Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当大多数哈希表操作都是O(1)时,为什么复制是O(n)_Python - Fatal编程技术网

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

Python 当大多数哈希表操作都是O(1)时,为什么复制是O(n),python,Python,dict本质上是一个哈希表,其大多数操作都在O(1)中。然而,拷贝是在O(n)中。为什么?大多数操作都是O(1),因为它们正在访问哈希表,这是摊销的固定时间。复制将N个元素复制到一个新字典中,因此它是O(N) 什么是杂烩?有没有发现一个文件旁边有一个小散列?用于标识文件的。不是用这个大文件作为标识,而是用这个短字符串来标识它。基本上,将一个大文件/字符串运行到哈希函数中,然后弹出一个较小的字符串。这是经典的鸽子洞问题。假设你有N只鸽子和N-1个洞。一个洞有两只鸽子。换句话说,你会有碰撞。然而,如

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

大多数操作都是O(1),因为它们正在访问哈希表,这是摊销的固定时间。复制将N个元素复制到一个新字典中,因此它是O(N)

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

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


这将进入下一部分0(1),用于访问元素。假设你想得到一个特定的项目。哈希表将获取该项,通过它之前用于存储该项的哈希函数运行它,立即获得该位置并直接访问它。因此,它是常量。

如果表有n个条目,则需要执行c*n操作以复制它,其中c是某个常量。这有什么奇怪的?你查过了吗?如果是,请告诉我们它是如何进行的?嗯,可能是因为访问n个元素中的每一个(O(1)中的每一个)都会产生O(n)(=n*O(1))?@timgeb为什么大多数哈希表操作都是O(1)@lanardo,因为这是哈希表的整个点。我不会为你做家庭作业。