当大多数哈希表操作为O(1)时,为什么复制O(n)

时间:2017-04-20 06:56:28

标签: python

dict本质上是一个哈希表,其大多数操作都在O(1)中。而复制是在O(n)。为什么呢?

1 个答案:

答案 0 :(得分:2)

大多数操作都是O(1),因为他们正在访问哈希表并且这是分摊的常量时间。将N个元素复制到新的字典中,使其为O(N)。

什么是哈希?曾经发现一个旁边有一个小哈希的文件?这标识了文件。而不是这个大文件作为标识,这是一个识别它的短字符串。你基本上将一个大文件/字符串运行到​​一个哈希函数中,然后弹出一个较小的字符串。这是典型的鸽笼问题。假设你有N只鸽子和N-1洞。一洞将有2羽鸽子。换句话说,你会发生碰撞。但是,如果你使用足够好的散列函数,碰撞发生的几率低于在任何一天撞击你的陨石。一个例子是SHA 256。

同样的事情适用于哈希表。您获取一个项目,通过哈希函数运行它,并将该项目放入哈希表的特定部分。

进入下一部分0(1)以访问元素。假设您想获得特定物品。哈希表将获取该项,通过之前用于存储它的哈希函数运行它,立即获取该位置并直接访问它。结果是不变的。