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

Python 嵌套字典的查找时间是如何增加的?,python,dictionary,time,time-complexity,lookup,Python,Dictionary,Time,Time Complexity,Lookup,有人能评论一下,随着我们对词典的进一步“嵌套”,词典的复杂性是如何增加的吗 例如,当我添加一个元素时,如下所示: dict_name[a][b][c][d] = 0 我认为任何字典的查找时间都应该是相同的(常数时间O(1)),但是如果我添加这样的元素,它会有显著的变化吗 dict_name[a][b][c]....[z] Python的字典实现不会随着嵌套而改变,因此查找的算法复杂性不会改变。就Python而言,每个[key]订阅都独立于您订阅的对象的来源 每个查找仍然是O(1)。然后,查找

有人能评论一下,随着我们对词典的进一步“嵌套”,词典的复杂性是如何增加的吗

例如,当我添加一个元素时,如下所示:

dict_name[a][b][c][d] = 0
我认为任何字典的查找时间都应该是相同的(常数时间O(1)),但是如果我添加这样的元素,它会有显著的变化吗

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

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

每个查找仍然是O(1)。然后,查找嵌套元素是深度乘以O(1)查找。因为您硬编码了深度(通过使用文字符号),所以仍然是O(1),作为一个常量乘数,不会影响Big-O复杂性

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
所以你只需要进行三次查找,从一个字典中得到一个对象,而这个字典恰好是另一个字典。然后,在最后一步,你做一个字典作业

同样,字典查找平均占用所有的固定时间,所以这四个操作本身都是O(1)。加起来,得到4×O(1),仍然是O(1)(因为常数因子对大O不重要)


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

你是否意识到维度26的数组将容纳至少2^26=67108864个不同的字典(假设每个维度允许2个不同的值;2541865828329字典允许每个维度3个值,这远远超出了PC的处理能力)?您似乎还没有理解
O(1)
的概念。如果您执行
O(1)
操作一定次数,您仍然会得到
O(1)
所以答案解释了为什么常量元素不重要(除了它是重要的)。@YvesDaoust感谢您澄清这一点。我很好奇嵌套字典会对时间和内存产生什么影响:)