任何人都知道在常見實現中ECMAScript5的Object.keys()的時間複雜性? n
鑰匙是O(n)
嗎?假設一個哈希實現,時間與散列表的大小成正比嗎?Object.keys()的複雜性?
我正在尋找語言實現者或一些現實世界基準的保證。
任何人都知道在常見實現中ECMAScript5的Object.keys()的時間複雜性? n
鑰匙是O(n)
嗎?假設一個哈希實現,時間與散列表的大小成正比嗎?Object.keys()的複雜性?
我正在尋找語言實現者或一些現實世界基準的保證。
,似乎是在O(n)
V8(鉻,Node.js的)至少:
> var hash = {}
> , c = 0;
>
> var s = +new Date();Object.keys(hash);console.log(+new Date() - s);
0
> for(var i=0; i<100000; i++, c++){ hash[c] = 1; }
> var s = +new Date();Object.keys(hash);console.log(+new Date() - s);
26
> for(var i=0; i<100000; i++, c++){ hash[c] = 1; }
> var s = +new Date();Object.keys(hash);console.log(+new Date() - s);
49
> for(var i=0; i<100000; i++, c++){ hash[c] = 1; }
> var s = +new Date();Object.keys(hash);console.log(+new Date() - s);
75
> for(var i=0; i<100000; i++, c++){ hash[c] = 1; }
> var s = +new Date();Object.keys(hash);console.log(+new Date() - s);
102
這些結果對密集哈希映射有意義。隨着密鑰越來越稀疏,性能是否會降低? – hurrymaplelad
@hurrymaplelad - 什麼?所有的JS哈希鍵都是字符串。這段代碼有效地生成了'{'1':1,'2':1,'3':1,...}'_sparse_ vs _dense_鍵對散列實現無效,只有數組纔有意義。對於引擎來說,將數組作爲一個數組來實現是沒有意義的,因爲數字索引通常很少。雖然如果你想測試一下,只需要將'C++'改成'c + = Math.random()',這會給你完全不相關的鍵。 –
@cwolves:'Array'對象只是一個對象,其屬性應該是整數。這些並不是非常罕見,當然有JS實現使用數組來支持'Array'實例。 – Gabe
多少鍵你希望是具有,這樣他們列舉事項的時間複雜度? – Gabe
我不認爲它可以小於'O(n)' –
@PabloFernandez,長度小於O(n) – Joe