

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
はじめに
このページでは連続部分列とは何かを、初心者にも分かるように解説します。連続部分列は、元の並びの中で、隣接する要素をそのまま並べた部分列のことです。「連続」という言葉が大切で、要素の間に別の要素を挟んで飛ばすことはできません。
連続部分列の定義と見分け方
一般的な「部分列」は元の順番を保ちながら取り出しますが、連続部分列は「抽出した要素が元の並びで連続している」ことが条件です。厳密には、配列 A の i から j までの連結部分列を指し、i <= j となる全ての組を含みます。例えば A = [1, 2, 3, 4] なら、連続部分列には [1], [2], [3], [4], [1,2], [2,3], [3,4], [1,2,3], [2,3,4], [1,2,3,4] などが含まれます。
基本の例
身近な例で考えると、整数の列 A = [1, 2, 3, 4] があるとき、連続部分列は上のように複数作ることができます。特に、長さ 1 の連続部分列は [1], [2], [3], [4]、長さ 2 の連続部分列は [1,2], [2,3], [3,4]、長さ 3 の連続部分列は [1,2,3], [2,3,4]、長さ 4 の連続部分列は [1,2,3,4] です。これらはすべて「元の並びの中で隣接する要素だけを取り出したもの」という性質を満たしています。
表で見る連続部分列
| 連続部分列 | 和 | 長さ | |
|---|---|---|---|
| [1..1] | [1] | 1 | 1 |
| [2..2] | [2] | 2 | 1 |
| [3..3] | [3] | 3 | 1 |
| [4..4] | [4] | 4 | 1 |
| [1..2] | [1,2] | 3 | 2 |
| [2..3] | [2,3] | 5 | 2 |
| [3..4] | [3,4] | 7 | 2 |
| [1..3] | [1,2,3] | 6 | 3 |
| [2..4] | [2,3,4] | 9 | 3 |
| [1..4] | [1,2,3,4] | 10 | 4 |
この表は、連続部分列の取り方と、対応する和や長さを視覚的に示す一例です。表を見れば、区間を指定すれば必ずその区間に対応する連続部分列が得られることがわかります。なお、実際の問題では「連続部分列の個数を数える」「最大和の連続部分列を求める」など、さまざまな課題が出てきます。
よくある応用例として、最大和の連続部分列問題があります。配列の中から、連続する部分列の和の中で最大のものを見つける問題で、効率的な解法として Kadaneのアルゴリズム が有名です。このアルゴリズムは、左から右へ走査し、現在の和が負になる場合はその区間を打ち切る、という考え方を使います。数学的には「部分和の累積を扱い、負の影響を持つ区間をスキップする」と言い換えることができます。
まとめとポイント
要点は次のとおりです。連続部分列は「隣接している要素だけを取り出した列」です。部分列との違いを意識すると、問題の解き方が変わります。授業やプログラミングの問題で「連続部分列」を扱う機会は多く、上の表や説明を基に、まずは小さな例から理解を深めていくのが良いでしょう。
連続部分列の同意語
- 連続部分列
- 元の列の中で、隣接する要素が連続して並ぶ部分列。例として、a_i, a_{i+1}, ..., a_{i+L-1} のように連続する要素の列を指す。
- 連続サブシーケンス
- 同じく、元の列の中で隣接する要素だけからなる部分列で、英語の consecutive subsequence に相当する表現。
- 連続部分文字列
- 文字列における、連続して並ぶ文字の列。文字列の一部として取り出せる連続部分を指す。
- 隣接部分列
- 隣接して並ぶ要素だけを含む部分列で、連続部分列とほぼ同義として使われることがある表現。
- 連続要素列
- 元の列の中で、隣接する要素をそのままつなげた列のこと。
- 連続インデックス列
- 要素のインデックスが連続して並ぶ部分列の言い換え表現。
- 区間連続列
- 開始位置と終了位置の区間に含まれる、連続した要素の列。
- 連続ブロック列
- 連続して現れる要素のブロックを指す表現。連続部分列の一部として扱われることがある。
- 連続部分列(文字列特化)
- 文字列に対する連続部分列の別称。文字列の連続的な一部を指す。
- 連続サブストリング
- 文字列の連続部分を指す別称として使われる語。
連続部分列の対義語・反対語
- 非連続部分列
- 元の列の中で、取り出す要素同士の間にギャップがある。連続していないが、元の順序は保つ。
- 部分列(一般的な意味)
- 元の列の順序を保ちつつ、連続性を問わない任意の要素の並び。連続部分列の対義概念として使われることが多い。
- 不連続な部分列
- 連続性を欠くように、間をあけて選んだ部分列。連続でない点を強調した表現。
- 離散部分列
- 連続性を持たない性質のある部分列。間隔が離れて要素が選ばれるイメージ。
- 断片列
- 連続性が途切れた断片の並びとして捉えられる部分列。欠片の集まりのようなイメージ。
- 非連続的サブシーケンス
- サブシーケンスのうち、連続性を満たさないもの。元の順序は保つが要素間に間が空くことがある。
連続部分列の共起語
- 部分列
- 元の列から、要素の順序を崩さずに取り出した並び。必ずしも隣接していなくてもよい(連続しているのは連続部分列です)。
- 部分文字列
- 文字列の中の連続した一部。文字の並びが連続している点が特徴です。
- 文字列
- 文字の並び。連続部分列の話題は文字列にも適用されます。
- 配列
- 同じ型の要素が順序付けて並んだデータ構造。数列や文字列の基礎となる集合です。
- 数列
- 数値の並び。連続部分列は数列の中の連続した部分を指します。
- 区間
- 数列や文字列の連続した範囲。区間を取り出して、連続部分列を作ることがあります。
- 区間和
- 区間内の全要素の和。連続部分列の和を計算する基本操作です。
- 累積和
- 前計算を使って、任意の区間の和を素早く求める仕組み。連続部分列の和計算を効率化します。
- 前計算
- 後の計算を速くするための事前の計算作業。累積和などが代表例です。
- 連続部分列の和
- 連続して並ぶ要素に含まれる全ての数の和。最大和問題などで頻繁に使われます。
- 最大和連続部分列
- 連続部分列の和の中で、最大となるものを探す問題。Kadaneのアルゴリズムがよく用いられます。
- Kadaneのアルゴリズム
- 最大和連続部分列を線形時間で求める代表的なアルゴリズム。現在の部分和とこれまでの最大を更新して解きます。
- 動的計画法
- 過去の計算結果を再利用して、問題を分解して解く方針。連続部分列の問題にも適用されます。
- スライディングウィンドウ法
- 一定の窓幅を動かしながら区間の性質を調べる手法。連続部分列の処理で計算量を抑えるのに有効です。
- 長さkの連続部分列
- 長さが k の連続部分列を対象に分析・計算する場合の表現です。
連続部分列の関連用語
- 部分文字列
- 文字列の中で、連続して現れる文字の列のこと。連続部分列の代表的な表現です。
- 部分列
- 元の列から、順序を守って取り出す要素の列。必ずしも連続している必要はありません。
- 最長共通部分列
- 2つ以上の文字列に共通して現れる部分列のうち、長さが最も長いもの。文字の順序は保たれます。
- 最長回文部分列
- 文字列中で回文となる部分列のうち、長さが最も長いもの(回文の性質を満たす文字列の並び)。
- 最長回文部分文字列
- 文字列中で回文となる連続した文字列の中で、長さが最も長いもの。
- 最大和連続部分列
- 配列の連続する要素の和の最大値をとる部分列のこと。
- Kadaneのアルゴリズム
- 最大和連続部分列を求める代表的な動的計画法のアルゴリズム。
- スライディングウィンドウ法
- 連続する部分列を動かして、和や最大値などを効率的に求める手法。
- 累積和(前計算/ prefix sum)
- 各位置までの和を事前に計算しておくことで、任意の連続部分列の和をO(1)で求められるようにする手法。
- 後綴配列
- 文字列の全ての後綴を辞書順に並べたデータ構造。substring検索の基盤となる。
- 後綴木
- 文字列の全後綴を表す木構造。部分文字列の検索を高速化する。
- Rabin-Karp法
- ハッシュ値を使って文字列の照合を行う、平均的に高速な文字列検索アルゴリズム。
- KMP法
- Knuth–Morris–Pratt 法。パターンとテキストのマッチングを線形時間で解くアルゴリズム。
- Zアルゴリズム
- 文字列の内部マッチを検出するための、Z値配列を用いた線形時間アルゴリズム。
- 辞書順/辞書式順序
- 部分文字列を辞書の並び順(アルファベット順)で比較・ソートする考え方。
- 部分文字列の個数/異なる部分文字列
- 文字列に現れる異なる部分文字列の総数を数える問題。
- 最大/最小連続部分列和
- 連続部分列の和を最大化・最小化する問題。最大和は Kadane 法、最小和は同様の変種で解く。
- 文字列照合/探索アルゴリズム群
- 長い文字列の中から、あるパターンが現れる位置を探す総称。
連続部分列のおすすめ参考サイト
- 【数列など】部分列とは何か~定義と応用例~ | 数学の景色
- コーシー列(基本列)の定義と具体例 | 数列 | 実数 | 数学 - ワイズ
- 数学の部分列とは?具体例で理解する部分列の完全ガイド
- LCS(最長共通部分列)とは - 東京工芸大学



















