繁体   English   中英

python dict has_key()方法的时间复杂度是多少

[英]What is the time complexity of python dict has_key() method

python dict has_key()方法的时间复杂度是O(1),就像在dict中键入key一样。

简短的答案: 最坏的情况O(n) 但是平均情况下的时间复杂度为O(1) 最坏情况不过是非常罕见的

查找时,首先对键进行双哈希处理(一次按键的类型,一次按字典的键)。 根据该结果,我们知道必须在哪个存储桶中搜索,然后开始搜索。

但是,可能会发生哈希冲突 :在这种情况下,多个键位于同一存储桶中,因此我们必须在多个键中进行搜索。 最坏的情况是所有键都在同一个存储桶中,因此我们退回到线性搜索。

但是,散列冲突(带有大量密钥) 非常少见。 通常可以安全地假设-与字典的大小无关-同一存储桶中的键数将是固定的。

它是O(n)的事实对安全性产生了一些有趣的影响。 假设您有一台在字典中存储和检索数据的服务器。 然后,当然,响应时间将随着这样的查找而扩展。 现在,黑客可以设计输入方式,将所有密钥都放在同一个存储桶中。 结果,查找将变慢,最终服务器将不再在合理的时间内响应。 这就是为什么Python具有用于散列随机化的标志-R的原因。 这将更改每次运行的哈希函数,因此使黑客更难设计此类输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM