heapifyUp()と heapifyDown()メソッドを使用するヒープの実装をいくつか見てきました。私は上記のコードの時間複雑度は(Cormenに従って)O(N)である信じheapifyUp()メソッドの時間の複雑さはどのくらいですか?
for(int i = heap_size/2; i >= 0; i--)
heapifyDown(i);
:のように、我々はheapifyDown()を使用して)(heapifyUpを実装することができませんでした。次のように
は今heapifyUp()実装されました:私は間違っていないよ場合はO(LOGN)が優れているので、
while(i!=0 && arr[parent(i)]>arr[i])
{
swap(arr[i],arr[parent(i)]);
i = parent(i);
}
は今、上記の実施のtimeplexityは今O(LOGN)
ですO(n)よりheapifyUp()メソッドは確かに良くなりました。では、なぜCormenはヒープを構築するためにボトムアップheapify(方法1)を使用しますか?
私が間違っていて、どの実装が優れているか教えてください。
参照しているCormen論文へのリンクを付けることはできますか?ヒープを構築するときに値が追加された後に何が起こるかについて具体的に話していますか? – Justin