※ 引述《JinSha ( )》之銘言:
: 所以若是遇到問的問binomial heap的find min的複雜度時,
: 有的地方會說O(log n),有的地方會說O(1)
: 比方說
: https://en.wikipedia.org/wiki/Binomial_heap#cite_note-amortized-9
: http://www.growingwiththeweb.com/data-structures/binomial-heap/overview/
: 這兩的地方是說O(log n)
https://en.wikipedia.org/wiki/Binomial_heap#Find_minimum
To find the minimum element of the heap, find the minimum among the roots of
the binomial trees. This can again be done easily in O(log n) time, as there
are just O(log n) trees and hence roots to examine.
By using a pointer to the binomial tree that contains the minimum element,
the time for this operation can be reduced to O(1). The pointer must be
updated when performing any operation other than Find minimum. This can be
done in O(log n) without raising the running time of any operation.
也就是說,原本是 O(log n),但是可以取巧改進到 O(1)。
題外話:
實務上沒有人使用 binomial heap,甚至實務上沒有人使用任何一種 heap。
同樣的事情可以用 binary search tree 做到。(除了合併操作)(感謝LPH66指正)
教科書會寫 binomial heap,是因為作者覺得這很有特色,具有一咪咪理論上的價值。
教授上課會教 binomial heap,是因為臺灣教授的水平,僅止於複誦教科書。
研究所考試會考 binomial heap,是因為教授要貫徹上意,達成我國愚民教育的方針。
至於正確答案應該要填 O(1) 還是 O(log n),其實是教授說了算,他們爽就好。
反正現實世界沒有人在用。