確定リニアサーチアルゴリズムの平均実行時間を導出しようとしています。このアルゴリズムは、配列A [1]、A [2]、A [3] ... A [n]の順序でソートされていない配列Aの要素xを検索します。それは要素xを見つけるか、配列の終わりに達するまで続きます。私はwikipediaを検索し、与えられた答えは(x + 1)/(k + 1)であり、ここでkは配列中にxが存在する回数である。私は別の方法でアプローチし、別の答えを得ています。誰も私に正しい証拠を与えてください、私の方法で何が間違っているか教えてもらえますか?リニアサーチアルゴリズムの平均実行時間
E(T)= 1*P(1) + 2*P(2) + 3*P(3) ....+ n*P(n) where P(i) is the probability that
the algorithm runs for 'i' time (i.e. compares 'i' elements).
P(i)= (n-i)C(k-1) * (n-k)!/n!
Here, (n-i)C(k-1) is (n-i) Choose (k-1). As the algorithm has reached the ith
step, the rest of k-1 x's must be in the last n-i elements. Hence (n-i)C(k-i).
(n-k)! is the total number of ways of arranging the rest non x numbers, and n!
is the total number of ways of arranging the n elements in the array.
単純化すると(n + 1)/(k + 1)になっていません。
多分私は馬鹿ですが、配列がサイズNの場合、平均的なケース時間N/2ではありませんか? Nevermind ...私のiPhoneからコメントしてはいけません... qを間違って読んでください – Kevin
@kevin重複していない場合のケースです。しかし、重複している場合は、2番目の出現を発見しても(平均複雑度を計算するために)、まず検索を行います。 – Zimbabao
@Kevin実際、複数のコピーがない場合の平均的なケースは(n + 1)/ 2です。 1 *(1/n)+ 2 *(1/n)+ 3 *(1/n)... + n *(1/n)のように求めることができます。 – Brahadeesh