【问题标题】:Separate Chaining vs random probing单独链接与随机探测
【发布时间】:2017-07-20 05:41:15
【问题描述】:

我目前正在考虑哈希表的冲突解决策略选项。当我最初被教导哈希表的实现时,我了解到与有很多陷阱的线性探测相比,分离链是首选。在网上研究之后,我发现python字典的底层实现使用一种称为随机探测的技术来解决冲突,如this CPython file的文档字符串中所述。

鉴于它在官方字典实现中使用,它似乎可能是解决哈希表冲突的最有效方法。但是考虑到实现随机探测的复杂性,并且由于分离链通常是一种公认​​的冲突策略,我有什么理由不应该使用分离链来支持随机探测?

【问题讨论】:

  • 为什么要担心实施?你可以只使用字典。
  • 随机探测真的没有那么复杂,它是几个算术运算:j = ((5*j) + 1) mod 2**i
  • @user3080953 我只是不明白为什么它甚至应该被用作单独链接的首选。

标签: python dictionary hashtable


【解决方案1】:

我能想到的两个原因:

1) 探测比单独的链接更便宜(它不需要分配内存来扩展链表或任何用于存储元素的数据结构)

2) 探测比链接(稍微)更节省空间,因为您不需要存储数据结构的开销(例如链表的下一个指针)

【讨论】:

    猜你喜欢
    • 2010-12-22
    • 2015-08-21
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 2018-12-30
    • 2014-01-22
    相关资源
    最近更新 更多