Hashtbl.create の複雑さは O(nlogn) であるとどこかで読みました。
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)) のようなものを考えています。
何か案は?
ありがとう。