1 有限列の定義
有限列とは、有限個の要素からなる「位置(添字)つきの並び」を意味する。順序が保持され、同じ要素でも位置が異なれば別の有限列になる。数学ではしばしば、有限列を「どの位置にどの値が入るか」という対応として定式化し、要素数(長さ)に基づいて議論する。
有限列は、離散対象の表現、組合せ構造の列挙、形式言語の記号列、計算機科学での配列やリストの基礎など、幅広い領域で現れる。基本的な関心は、長さの概念、添字による参照、部分列や連結といった操作、そして数え上げや列挙の仕組みである。
1.1 直観的な定義(順序付きの並び)
有限列を直観的に捉えると、たとえば「第1項、第2項、…、第n項」という読み順で並んだ有限個の項の列である。各項は位置に対応し、その位置が取り違えられない限り、列としての同一性が保たれる。
1.1.1 長さと添字
長さは、要素が存在する位置の個数として定める。一般に長さ n の有限列は、添字集合 {1,2,…,n} または {0,1,…,n−1} を用いて定義されることが多い。添字 i に対して列の i 番目の要素を取り出せることが、基本的な参照機構になる。
添字体系(0起点か1起点か、添字集合をどのように選ぶか)は厳密には定義の一部であり、同じ並びでも添字規約が異なると形式的に同一とは限らない。とはいえ、実際の数学的議論では添字規約を固定して扱うことで混乱を避ける。
1.2 集合論的な定義(有限集合上の関数)
集合論の言葉では、有限列は「有限集合を台(ドメイン)として、その上の関数」であるとみなせる。つまり、有限集合 I を添字集合とし、列を f: I → X という写像として表す。ここで X は取り得る値の集合(元の型)である。
この見方では、列の各位置は台集合 I の要素に対応し、列の値は写像 f が定める。連結、部分列、反転などの操作も、台集合側の操作や写像の加工として記述できるため、概念の統一が図れる。
1.2.1 取り得る値の集合(台集合)
取り得る値の集合は、通常 X と書かれる。これは「列が参照する値の種類」を表し、各位置でどの要素が許されるかを規定する。例えば整数からなる列であれば X は整数全体の集合になる。
また、「台集合」と呼ばれる用語が複数の文脈で用いられることがある。有限列に対しては、台集合を添字の集合として扱う流儀(I)と、値の集合として扱う流儀(X)があり得る。混同を避けるため、どちらの集合を指しているかを定義時に明確化するのが重要になる。
1.3 近縁概念との関係(有限集合・列・系列)
有限列は近縁概念と自然に結びつく。まず「有限集合上の関数」という観点からは、有限集合一般の要素配置問題と関連し、さらに「列」や「系列」という語が指す概念との対応が整理できる。
無限列(無限系列)との違いは、添字集合の大きさにある。無限列では添字集合が無限になるため、終端の概念が消え、収束や極限といった解析的・位相的な性質が論点になりやすい。有限列では終端が存在し、操作や計算は有限回で完了する対象として扱える。
さらに、離散的な列挙と比較すると、有限列は「並びの情報」を含むのが特徴である。単なる集合(順序を失う)とは違い、同じ要素集合でも並び順が異なれば別の有限列になる。
2 表記と基本操作
有限列の議論では、表記の選び方が理解の助けになる。代表的には、添字つきの表し方と、丸括弧や角括弧で括って列全体を示す表記が用いられる。さらに、連結や部分列、反転などの操作を定義することで、有限列の構造を扱える。
2.1 表記法(添字付き・括弧表記など)
添字つき表記では、列を a_1,a_2,…,a_n のように書き、a_i を i 番目の要素として示す。0起点規約なら a_0,…,a_{n−1} が現れる。形式的には、列を (a_i)_{i=1}^n や (a_i)_{i=0}^{n−1} といった記号で示す。
括弧表記としては (a_1,a_2,…,a_n) のように全体を一つの対象として括る方法がある。角括弧を用いる流儀もあり、配列やリストを連想させる表記として定着している場合がある。
表記の差異は見た目の違いであるが、添字が省略されているときは規約(何をもって i 番目と言うか)が前提として暗黙に置かれることが多い。そのため、定義や証明の場面では添字規約が一貫していることが望ましい。
2.2 連結(コンカテネーション)
連結は、同種の要素からなる2つの有限列を、順序を保ったままつなぎ合わせて新しい有限列を作る操作である。長さ m の列 (a_1,…,a_m) と長さ n の列 (b_1,…,b_n) から、長さ m+n の列 (a_1,…,a_m,b_1,…,b_n) が得られる。
集合論的には、台集合をずらした和集合として構成し、最初の台上では最初の写像、後半の台上では第二の写像が与える値を使うことで定義できる。これにより、連結がどの位置にどの値を置くかが明確になる。
連結は一般に結合的であり、括弧の付け方を変えても結果の列(添字と値の対応)が同一になるように扱える設定が多い。ただし、添字集合の扱い方(0起点か1起点か、台集合の固定)により形式的な同一性の記述が変わる点には注意が必要である。
2.3 切り出しと部分列
部分列は、元の有限列から一部の要素を選び、順序を保ったまま並べ直した列である。切り出しという言い方は、連続した位置の範囲をそのまま取り出す場合に限って用いられることが多いが、文脈により部分列と同義に使われる場合もあるため注意が要る。
部分列は選択規則によって種類が分かれる。どの位置を採用するかが定義に直結するので、添字の条件(連続性の有無など)をはっきりさせるのが基本となる。
2.3.1 連続部分列と非連続部分列
連続部分列は、添字 i から j までのように連続した範囲を丸ごと取り出した列である。元の並びにおいて途中の要素を省かないため、元の位置関係がそのまま反映される。
非連続部分列は、添字を複数個選ぶが、途中の位置を飛ばすことが許される場合である。たとえば i_1 < i_2 < … < i_k のような増加列を選び、元の i_t 番目の要素だけを並べることで得られる。選ぶ添字の組が異なれば、同じ要素の集合を持っていても列として別の結果になり得る。
この差は、順序の保持方法と、元の隣接関係が失われるかどうかに関わる。連続性を制約として入れると構造が単純になり、非連続性を許すと組合せ的な自由度が増える。
2.4 反転・成分変換などの操作
反転は、有限列の順序を逆にする操作である。列 (a_1,…,a_n) の反転は (a_n,…,a_1) と定める。集合論的には台集合の添字対応を入れ替えることで記述でき、値の種類を変えないため、順序のみが変化する。
成分変換は、各位置の値をある関数で写す操作である。たとえば列に対して写像 g を適用し、 (a_1,…,a_n) を (g(a_1),…,g(a_n)) に変える。ここでは各成分が独立に変換されるため、長さは維持される。
さらに、位置に関する操作(添字の再配置)と、値に関する操作(成分変換)を分けて考えると整理が容易になる。反転は前者、成分変換は後者に対応し、両者を組み合わせた操作も自然に定義できる。
3 計数・列挙に関する基礎
有限列は、組合せの対象として数え上げや列挙に頻繁に登場する。基本的には「どの要素をどの位置に置くか」という選択問題に帰着されるため、台集合の大きさや許される重複の有無が結果を決める。
3.1 一様な台集合での個数(長さ固定)
| 値の集合 X の大きさが | X | = k であり、長さ n の有限列を考える。各位置は X から独立に選べると仮定すれば、重複を許した場合の総数は k^n になる。これは n 個の位置それぞれに k 通りの選択があり、組み合わせの乗法原理が適用されるためである。 |
|---|
一方、重複を許さない(同じ値を同じ位置に同時に置けない)場合は、長さ n が k 以下であるときに選択が制限される。位置の数だけ異なる値を選び、さらにそれを順序つきに割り当てるので、順列に対応する数が現れる。
この段階では「重複可否」と「長さの大小関係」が数の形を決める中心的要因になる。
3.2 長さを変える場合の総数
長さを 0 から N までの範囲で許すとき、有限列の総数は長さごとの個数を合計したものになる。たとえば重複を許し、各位置の選択が k 通りであるなら、長さ n の個数は k^n であり、総数は Σ_{n=0}^N k^n となる。
長さ 0 の列は空列であり、定義上ひとつだけ存在する。これにより和の式が整合的になり、以後の閉形式(幾何級数の性質など)につなげやすい。
長さを上限なしで許すと無限個になり、列挙の性格が変わる。そこで有限列の枠組みでは、しばしば長さの上限や固定長を明示することで議論が収束する形になる。
3.3 数え上げで使う代表的な原理
数え上げでは、いくつかの標準的な原理が反復して用いられる。まず乗法原理は、独立に選ぶ段階が複数あるとき、総数が各段階の選択肢の積になることを述べる。
和の原理は、互いに排反な場合を合計して総数を得る考え方である。条件が複数のケースに分かれるとき、重複する範囲を適切に扱わないと誤りが生じるため、排反性の確認が重要になる。
また、包括排除の考え方は重なりを考慮して数える枠組みを与える。特定の条件を満たすものの個数を数え、交差条件を引き足しすることで最終的な個数を得る。この原理は、部分列の選択条件や制約付きの配置問題にも適用できる。
4 アルゴリズム的な観点
有限列は計算機上では配列やリストとして表現される。アルゴリズム的には、要素へのアクセス、走査、変換、整列などの操作が定型化されるため、定義と計数の概念が実装へと接続される。
4.1 有限列のデータ表現(配列・リスト)
有限列のデータ表現として典型的なのは、配列(配列的記憶)と連結リスト(参照による連結)である。配列では添字から直接要素へ到達しやすく、メモリアクセスの規則性が利点になる。連結リストでは要素間のリンクに基づくため、先頭から順に辿る操作が中心になることが多い。
また、計算機における要素の型は、数学的には取り得る値の集合 X に対応する。長さは記憶構造やデータ構造のメタ情報として保持されることが多く、反復処理の終端条件として使われる。
有限列を不変データとして扱うか、更新可能として扱うかは実装方針によって異なる。更新可能の場合、位置対応が重要であり、添字体系の整合性が保たれる必要がある。
4.2 探索・走査(位置の特定と集計)
探索は、列の中から特定の値または条件を満たす要素の位置を見つける操作である。単純な線形探索では、添字を順に進め、条件に合致した最初の位置や全ての位置を記録する。計算量は概ね長さに比例し、比較対象のコストも含めて評価する。
走査は、列の全成分を順番に取り出して集計結果を作る処理である。たとえば総和、最大値、条件判定(全て満たすか、いずれかが満たすか)などが代表例になる。走査は一回の通過で済むことが多く、データ構造との相性が性能に影響しやすい。
位置の特定が必要な場合は、単に存在するかだけでなくインデックス(位置)を返す設計が求められる。部分列の概念とも整合的に扱えるため、アルゴリズム設計では「どの位置を記録するか」が鍵になる。
4.3 整列や変換が要素順に与える影響
整列(ソート)は有限列の並び順を、ある基準に従って並べ替える操作である。整列後も要素は同数保持されるが、位置関係が変わるため、順序情報が書き換わる。整列の安定性(同値要素の相対順序を維持するかどうか)は、要素の順序が意味を持つ応用で重要になる。
変換としては、成分変換(各要素への関数適用)や、フィルタリング(条件を満たす要素だけを残す)、連結や部分列抽出のような操作がある。成分変換は位置を保つため整列の前後で意味が衝突しにくいが、フィルタリングは長さが変化し、添字対応の更新が必要になる。
整列と変換を組み合わせると、結果が「順序に依存する」か「値の単調変換に依存する」かが論点になり、設計段階で性質の整理が求められる。有限列の数学的定義は、これらの操作がどの要素をどの位置に置くかを明確にするため、アルゴリズム仕様の土台になる。