嵌套字典的查找时间如何增加?
How does the look up time of nested dictionaries increase?
有人可以评论我们 "nest" 词典的复杂性如何增加吗?
例如我添加一个元素如下:
dict_name[a][b][c][d] = 0
我认为任何字典的查找时间都应该相同(常数时间 O(1)),但如果我添加这样的元素,它会发生显着变化吗?
dict_name[a][b][c]....[z]
Python 的字典实现不会随着嵌套而改变,不,所以查找的算法复杂度不会改变。就 Python 而言,每个 [key]
订阅都独立于您订阅的对象的来源。
每次查找仍然是 O(1)。查找嵌套元素是 depth 次 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
所以你只有三个查找,其中你从一个字典中获取一个对象,而这个对象恰好是另一个字典。然后,在最后一步中,您进行一个字典分配。
与 we know 一样,字典查找平均花费所有常数时间,因此所有这四个操作本身都是 O(1)。结合起来,你得到 4 × O(1),这仍然是 O(1)(因为常数因子对于大 O 并不重要)。
如果现在增加该嵌套的深度,您将得到更多 temp_y = temp_x[k]
行,这又是常数时间。所以你只增加 k × O(1) 中的因子 k
。并且如前所述,只要 k
是常数,该因子对大 O 来说并不重要,因此无论嵌套深度如何,您都保持恒定时间。
有人可以评论我们 "nest" 词典的复杂性如何增加吗?
例如我添加一个元素如下:
dict_name[a][b][c][d] = 0
我认为任何字典的查找时间都应该相同(常数时间 O(1)),但如果我添加这样的元素,它会发生显着变化吗?
dict_name[a][b][c]....[z]
Python 的字典实现不会随着嵌套而改变,不,所以查找的算法复杂度不会改变。就 Python 而言,每个 [key]
订阅都独立于您订阅的对象的来源。
每次查找仍然是 O(1)。查找嵌套元素是 depth 次 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
所以你只有三个查找,其中你从一个字典中获取一个对象,而这个对象恰好是另一个字典。然后,在最后一步中,您进行一个字典分配。
与 we know 一样,字典查找平均花费所有常数时间,因此所有这四个操作本身都是 O(1)。结合起来,你得到 4 × O(1),这仍然是 O(1)(因为常数因子对于大 O 并不重要)。
如果现在增加该嵌套的深度,您将得到更多 temp_y = temp_x[k]
行,这又是常数时间。所以你只增加 k × O(1) 中的因子 k
。并且如前所述,只要 k
是常数,该因子对大 O 来说并不重要,因此无论嵌套深度如何,您都保持恒定时间。