2013-05-31 31 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:好点来表示。 –