【发布时间】:2018-05-11 16:04:18
【问题描述】:
由于 splay 树用于缓存,我想知道当我想要高效缓存时,Splay Tree 相对于 HashTable 有什么优势?
什么时候我应该更喜欢散列树而不是哈希表?
我想这是一个比 BST 更专业的案例,请不要链接到 BST vs Hashtable 答案。
【问题讨论】:
标签: data-structures hashmap time-complexity hashtable binary-search-tree
由于 splay 树用于缓存,我想知道当我想要高效缓存时,Splay Tree 相对于 HashTable 有什么优势?
什么时候我应该更喜欢散列树而不是哈希表?
我想这是一个比 BST 更专业的案例,请不要链接到 BST vs Hashtable 答案。
【问题讨论】:
标签: data-structures hashmap time-complexity hashtable binary-search-tree
这真的取决于你所说的效率。
如果它在数据结构消耗的存储/空间上,它们将是相同的。另一方面,当我们谈论时间复杂度时,它仍然取决于您的数据结构是如何被使用的。
如果您的用户说,以他们将访问非常相似的数据(每次相关数据)的方式使用您的数据结构,那么使用 splay 树进行缓存会很棒,因为它最坏的情况围绕 O(log n),而哈希表的最坏情况为 O(n)。
当您的哈希存储在少于 3 个存储桶中或更糟糕的情况下,仅存储在 1 个存储桶或链或线程中时,哈希表的工作非常糟糕。我想您可以想象当您尝试访问数据时会发生什么。
但总的来说,在缓存方面,哈希表会很好地工作,因为它的平均时间复杂度为 O(1)。
你也可以这样想。如果您想要让您的数据结构更快地访问“最新”/“最常访问”的数据,那么您可以考虑使用展开树。但是如果您希望您的数据结构能够轻松访问不同类型的数据,那么您可能需要考虑使用哈希表。
您还需要注意,确保选择一个好的散列函数、表大小和数据结构以在存储桶中使用以使其与您的用例很好地配合是非常重要的。
事实上,将两者结合起来也可以:)
这真的只是基于我的意见,所以我希望我能帮上忙!这确实是一个非常肤浅的比较,我建议您在缓存方面搜索两者的工作原理并进行自己的比较!赞一个!
【讨论】: