siftup
私はヒープのアルゴリズムを書いていましたが、質問の最後で立ち往生しています。質問の最後の部分は、アルゴリズムは対数の最悪の場合の時間計算量を持つべきであると言っていますO(log(n)
。以下にアルゴリズムを記述しました。ここi
で、はヒープ内の要素のインデックスであり、v
はヒープ配列です。ルートのインデックスは最低ですが、ヒープの最下位の子のインデックスは最大です。配列が1からnになることを検討しています
アルゴリズム
Siftup (v, i) {
While(v[i] > v[i/2] and i != 0) {
Temp = v[i] // Temp is of the same type as v[i]
v[i] = v[i/2]
v[i/2] = temp
i = i / 2
}
}
このプロセスには、それぞれが一定の最悪の場合のタイミングを持つ4つの割り当てステートメントが含まれるためwhile loop
、アルゴリズムには対数的な最悪の場合の時間計算量が必要です。ヒープ内の要素の数はO(n)
どこにあるのかを判断するためのアプローチを示すことができますか?n
PSアルゴリズムのエラーも教えてください。