有人可以评论字典的复杂性如何增加,因为我们已经#34;他们进一步?
例如,我添加如下元素:
dict_name[a][b][c][d] = 0
我认为任何字典的查找时间应该是相同的(常数时间为O(1)),但是如果我添加这样的元素会有显着的变化吗?
dict_name[a][b][c]....[z]
答案 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来说并不重要,所以无论你的嵌套深度如何,你都会保持恒定的时间。