私はフィボナッチヒープについて学ぼうとしていました。ヒープに要素を挿入するための擬似コードは次のとおりです。
Fibonacci-Heap-Insert(H,x)
degree[x] := 0
p[x] := NIL
child[x] := NIL
left[x] := x
right[x] := x
mark[x] := FALSE
concatenate the root list containing x with root list H
if min[H] = NIL or key[x]<key[min[H]]
then min[H] := x
n[H]:= n[H]+1
これが私が理解していなかったいくつかのことです、
root list containing x
Hを含むルートリストとそれを連結する方法とは何ですか?
minを抽出している間、次のようなことを行います。
Fibonacci-Heap-Extract-Min(H)
z:= min[H]
if x <> NIL
then for each child x of z
do add x to the root list of H
p[x]:= NIL
remove z from the root list of H
if z = right[z]
then min[H]:=NIL
else
min[H]:=right[z]
CONSOLIDATE(H)
n[H] := n[H]-1
return z
(ここに他の機能があります、統合してリンクします、http://www.cse.yorku.ca/~aaw/Jason/FibonacciHeapAlgorithm.html)
前の挿入関数では、子を設定し、xのpをnilとして設定し、minを抽出している間、
if <> nil
常にfalseになるため、関数を数回呼び出すと、正確なminが得られません。この構造がフィボナッチ「ヒープ」と呼ばれる場合、ヒーププロパティはどこで維持されますか?
フィボナッチヒープの代わりにダイクストラのアルゴリズムでバイナリヒープを使用する場合、配列またはリンクリストを使用する場合とほぼ同じくらい時間がかかりますか?
誰かが私が抱えている困難を説明できますか?ありがとうございました。