【问题标题】:What are the advantages of splay tree over hash table?展开树相对于哈希表的优势是什么?
【发布时间】:2018-05-11 16:04:18
【问题描述】:

由于 splay 树用于缓存,我想知道当我想要高效缓存时,Splay Tree 相对于 HashTable 有什么优势?

什么时候我应该更喜欢散列树而不是哈希表?

我想这是一个比 BST 更专业的案例,请不要链接到 BST vs Hashtable 答案。

【问题讨论】:

    标签: data-structures hashmap time-complexity hashtable binary-search-tree


    【解决方案1】:

    这真的取决于你所说的效率。

    如果它在数据结构消耗的存储/空间上,它们将是相同的。另一方面,当我们谈论时间复杂度时,它仍然取决于您的数据结构是如何被使用的。

    如果您的用户说,以他们将访问非常相似的数据(每次相关数据)的方式使用您的数据结构,那么使用 splay 树进行缓存会很棒,因为它最坏的情况围绕 O(log n),而哈希表的最坏情况为 O(n)。

    当您的哈希存储在少于 3 个存储桶中或更糟糕的情况下,仅存储在 1 个存储桶或链或线程中时,哈希表的工作非常糟糕。我想您可以想象当您尝试访问数据时会发生什么。

    但总的来说,在缓存方面,哈希表会很好地工作,因为它的平均时间复杂度为 O(1)。

    你也可以这样想。如果您想要让您的数据结构更快地访问“最新”/“最常访问”的数据,那么您可以考虑使用展开树。但是如果您希望您的数据结构能够轻松访问不同类型的数据,那么您可能需要考虑使用哈希表。

    您还需要注意,确保选择一个好的散列函数、表大小和数据结构以在存储桶中使用以使其与您的用例很好地配合是非常重要的。

    事实上,将两者结合起来也可以:)

    这真的只是基于我的意见,所以我希望我能帮上忙!这确实是一个非常肤浅的比较,我建议您在缓存方面搜索两者的工作原理并进行自己的比较!赞一个!

    【讨论】:

    • 但是哈希表不需要更多的空间,从这个意义上说 HashMap 没有满到 100%?
    • 效率我的意思是当我会使用一个而不是另一个。 Splay 树是一个很好的数据结构,但如果 HashMap 刚好胜过它,我什么时候使用它?
    • 嗯。从理论上讲,它们都实际使用相同数量的空间。我不太明白您所说的“未满 100%”是什么意思。
    • 生病编辑我的答案以添加一个哈希树工作非常糟糕的示例
    • @VincentParkson 由于数据的随机性和哈希函数的随机性,哈希表之间可能存在间隙。这意味着,如果没有数据被散列到索引 2 的存储桶中,那么它就是空的。因此内存没有被充分利用。
    猜你喜欢
    • 2011-05-06
    • 2011-05-18
    • 2019-02-01
    • 2013-03-07
    • 2010-12-29
    • 2011-06-17
    • 2015-02-19
    • 2013-12-20
    • 1970-01-01
    相关资源
    最近更新 更多