2013-05-31 80 views
1

代碼:對象文字搜索的深度比O(1)慢嗎?

var PhoneNumbers = { 
    "J Smith": 7125551212, 
    "A Johnson": 4023331212 
} 

alert(PhoneNumbers["J Smith"]); // 7125551212 

該查找的速度是O(1)。速度比O(1)慢多少?

例如:

var PhoneNumbers = { 
    "J Smith": { 
     age: 40, 
     phoneNumber: 7125551212 
    }, 
    "A Johnson": { 
     age: 40, 
     phoneNumber: 7125551212 
    } 
} 

alert(PhoneNumbers["J Smith"]["phoneNumber"]); // 7125551212 

是否第二示例具有速度爲O慢(1)?

+0

by「below」你的意思是「慢於」? – Joe

回答

2

嵌套字典查找的複雜性是O(N),其中N是嵌套的深度。

任何特定查找操作(固定對象,固定鍵)的複雜性是恆定的(即O(1)):它將總是花費相同的時間量。

單個查找應該在O(1)中,至少在「典型」情況下。如果所有密鑰都具有相同的散列值,則字典通常被實現爲散列表,其理論上可以降級爲O(N)(其中N是字典中的鍵的數量)。

+0

我們很清楚,您正在討論嵌套的深度(在第一個示例中,即1),而不是輸入的大小(在第一個示例中,即2),是正確的嗎? –

+0

對於數據集的大小,您可能想要添加它仍然具有恆定的複雜度(O(1)),通常用N. – filmor

+0

@filmor:好點來表示。 –