0
我在某處讀到說Hashtbl.create的複雜性是O(nlogn)。Hashtbl.create複雜性
我認爲這很奇怪,因爲Hashtbl是作爲數組實現的,Array.create的複雜度是O(n)。所以,我看着源代碼:
let rec power_2_above x n =
if x >= n then x
else if x * 2 > Sys.max_array_length then x
else power_2_above (x * 2) n
let create ?(random = !randomized) initial_size =
let s = power_2_above 16 initial_size in
let seed = if random then Random.State.bits (Lazy.force prng) else 0 in
{ initial_size = s; size = 0; seed = seed; data = Array.make s Empty }
看來,我第一次發現上面的* initial_size最小2功率*然後形成陣列出來。這聽起來不像O(n logn)......我在想像O(2 **(logn +1))。
任何想法?
謝謝。
你的實際問題是什麼?只能回答「是」還是「否」? –
「我在想O(2 **(logn + 1))」,這與O(n)完全相同。 – newacct
「我在某處讀到說Hashtbl.create的複雜性是O(nlogn)。」你在哪裏讀到這個?另外,是否有可能將Hashtbl與其他一些數據結構(例如Set或Map)混淆? – newacct