嵌套字典的查找时间如何增加?

时间:2015-08-31 07:56:30

标签: python dictionary time time-complexity lookup

有人可以评论字典的复杂性如何增加,因为我们已经#34;他们进一步?

例如,我添加如下元素:

dict_name[a][b][c][d] = 0

我认为任何字典的查找时间应该是相同的(常数时间为O(1)),但是如果我添加这样的元素会有显着的变化吗?

dict_name[a][b][c]....[z]

2 个答案:

答案 0 :(得分:6)

Python的字典实现不会随着嵌套而改变,不会,因此查找的算法复杂性不会改变。就Python而言,每个[key]订阅都与您订阅的对象的来源无关。

每次查找仍为O(1)。然后查找嵌套元素深度乘以O(1)查找。由于你对深度进行了硬编码(使用文字符号),你所拥有的仍然是O(1),因为常数乘数不会影响Big-O的复杂性。

答案 1 :(得分:4)

dict_name[a][b][c][d] = 0

这与以下

基本相同
temp_a = dict_name[a]
temp_b = temp_a[b]
temp_c = temp_b[c]
temp_c[d] = 0

所以你只有三个查找,你从字典中得到一个恰好是另一个字典的对象。然后,在最后一步中,您将进行一次字典分配。

作为we know,字典查找平均占用所有常量时间,因此所有这四个操作本身都是O(1)。合并后,你得到4×O(1),它仍然是O(1)(因为常数因子对大O来说并不重要)。

如果你现在增加嵌套的深度,你得到的更多是temp_y = temp_x[k]行,这也是恒定的时间。因此,您只需在k×O(1)中增加因子k。如前所述,只要k是常数,该因子对于大O来说并不重要,所以无论你的嵌套深度如何,你都会保持恒定的时间。