通常、最初の反復の関係は、の実行時間を説明するために使用され、アルゴリズムを分割します。 a
ここでは、データを分割する部分の数を示します。1/b
は、各部分で使用されている元のデータを示し、f(n)
は、各レベルでどれくらいの時間が必要かを示します。たとえば、QuickSortアルゴリズムでは、データ(配列またはリスト)を元のデータの1/2に相当する2つの部分に分割し、分割するそれぞれの「レベル」ごとにすべてn
要素を通過する必要があります1回。だから、再発関係は
(O(N * LG(N)に評価される))
T(n) = 2T(n/2) + n
で、バイナリ検索であなたは、2つの部分にデータを分割するが、唯一の1にそれらのを取り、それぞれ「レベルの時間"は一定なので、関係は次のようになります。
T(n) = T(n/2) + 1
ただし、Cの関数は分裂征服戦略に従いません。代わりに数学的誘導を示しています。開始条件を定義します。l
がNULL
の場合は長さが0、l->next
がNULL
の場合(リスト内の1要素の条件も定義します)。次に、一種の帰納的ステップを定義します。(n-1)番目の要素の関数値を知っている場合、n番目の要素の関数を計算する方法を定義します。したがって、第1要素の関数の値を知っていれば、この規則を適用して2番目の要素、3番目の要素などの値を取得できます。
誘導方法は本質的に再帰アルゴリズムであることがわかります。ここでは2回考えます。最初は、開始点(またはエンドポイント - これはリストを見ている順序に依存します)で値を計算する時間です。あなたの関数ではこの値を返すだけなので、定数(C1
)です。 2番目は1ステップを作る時間です。あなたの関数では、それも一定です(C2
)。直感的に、あなたは、このアルゴリズムの実行時間がされるはずです。
T(n) = C1, when n = 1
T(n) = T(n - 1) + C2, when n > 1
したがって、n = 1
ない限り、あなたはn - 1
要素の上にそれを実行するための時間を通じてn
要素にアルゴリズムを実行する時間を定義します。
T(n) = T(n - 1) + 1
(
T(n) = T(n - 1) + 1 = T(n - 2) + 2 = ... = 1 + n
に評価、または
O(n)
)
またを読み取る
:最終的な漸化式であるので、ビーゴ表記で任意定数が1
と1つの要素の場合のように定義されるが、考慮されていません。
パーツの番号は「a」であり、「b」は1の部分の長さに反比例する。 – ffriend