アルゴリズムのステップ数法(歩数法)とは?計算量解析の基本を解説
ステップ数法(歩数法)とは
ステップ数法(歩数法)は、アルゴリズムの効率を分析する手法の一つです。この方法では、アルゴリズム内の各命令が何回実行されるかを数え、その結果からアルゴリズムの計算量(時間計算量)を求めます。
具体的には、各命令の実行に必要なコスト(実行時間)を c1, c2, … のように定義し、「実行回数 × コスト」の合計を計算することで、アルゴリズム全体の実行時間を見積もります。
例:逐次探索(線形探索)の分析
ここでは、配列から特定のキー値を探す「逐次探索(シーケンシャルサーチ)」を例に、ステップ数法を使った計算量の求め方を見ていきましょう。最悪の場合(キーが配列中に存在しない、または末尾にある場合)を想定して分析します。
| アルゴリズム | 実行回数 | コスト |
|---|---|---|
| seqSearch(arr, n, key) i := 0 while i < n, do if arr[i] = key, then break end if done return i | 1 n+1 n 0/1 1 | c1 c2 c3 c4 c5 |
上記の表では、各命令が最悪ケースで何回実行されるかを示しています。たとえば、初期化 i := 0 は1回だけ実行されますが、while文の条件判定はループ終了時にも評価されるため n+1 回実行されます。また、if文による比較は最大で n 回発生します。
コストの計算
各命令の実行回数とコストを掛け合わせて合計すると(最悪ケースを想定)、次のようになります。
Cost = c1 + (n+1)c2 + nc3 + c4 + c5
これを整理すると、
Cost = c1 + nc2 + c2 + nc3 + c4 + c5
Cost = n(c2 + c3) + c1 + c4 + c5
Cost = n(c2 + c3) + C
ここで、定数部分である c1 + c4 + c5 を C と置くと、最終的な式は直線の方程式 y = mx + b と同じ形になります。つまり、この関数は入力サイズ n に対して線形に増加することがわかります。
結論:計算量は O(n)
このことから、逐次探索の時間計算量は O(n)、すなわち線形時間であると結論付けられます。入力データのサイズが大きくなるほど、実行時間もそれに比例して増加するということを、ステップ数法によって数学的に示すことができました。
ステップ数法は、このように各命令の実行回数を丁寧に追跡することで、アルゴリズムの性能を厳密に評価できる基本的かつ重要な解析手法です。
-
フォード・ファルカーソン法とは?グラフの最大流を求めるアルゴリズムを解説
フォード・ファルカーソン(Ford-Fulkerson)アルゴリズムは、与えられたグラフにおいて、始点(ソース)から終点(シンク)までの最大フロー(最大流)を求めるために用いられる古典的なアルゴリズムです。このグラフでは、すべての辺に「容量」が設定されており、ソースとシンクという2つの頂点が指定されます。ソース頂点は外向きの辺のみを持ち、シンク頂点は内向きの辺のみを持つという特徴があります。アルゴリズムが満たすべき制約条件各辺に流れるフローは、その辺に設定された容量を超えてはならない。ソースとシンクを除くすべての頂点において、流入するフローの合計と流出するフローの合計は等しくなければならない。
-
フロイド・ワーシャル法(Floyd–Warshall)とは?全ペア最短経路を求めるアルゴリズムを解説
フロイド・ワーシャル法(Floyd–Warshall algorithm)は、重み付きグラフに対する「全ペア最短経路問題」を解くための代表的なアルゴリズムです。グラフ上のすべての頂点の組み合わせについて最短距離を一括で求め、その結果を「任意のノードから他のすべてのノードへの最小距離」を表す行列(距離行列)として出力します。 アルゴリズムの基本的な考え方 処理の流れは非常にシンプルです。 初期化: 出力用の行列を、グラフのコスト行列(隣接行列)と同じものにします。直接つながっていない頂点間の距離は ∞(無限大)として扱います。 更新: 各頂点 k を「中継地点」として仮定し、「i → k →