由于splay树用于缓存,我想知道当我想高效缓存时,Splay Tree优于HashTable有什么优势?
我应该何时更喜欢splay树而不是哈希表?
我想这是一个比BST更专业的案例,请不要链接到BST与Hashtable答案。
答案 0 :(得分:2)
这实际上取决于你的效率意味着什么。
如果它在数据结构消耗的存储/空间上,它们将是相同的。另一方面,当我们谈论时间复杂性时,它仍将取决于您的数据结构的使用方式。
如果您的用户说,以他们将访问非常相似的数据(每次相关数据)的方式使用您的数据结构,使用splay树进行缓存将是很好的,因为它的最坏情况围绕O(log n),而散列表的最坏情况是O(n)。
哈希表工作非常糟糕的一个实例是当您的哈希值存储在少于3个存储桶中或者更糟的情况下只存储在1个存储桶或链或线程中时。我想你可以想象当你试图访问数据时会发生什么。
但一般来说,当涉及到缓存时,Hash表可以很好地工作,因为它的平均时间复杂度为O(1)。
你也可以这样想。如果您想要的是让您的数据结构更快地访问“最新”/“访问最多”的数据,那么您可以考虑使用splay树。但如果您希望您的数据结构能够轻松访问不同类型的数据,那么您可以考虑使用哈希表。
此外,您还需要注意,确保选择要在存储桶中使用的良好哈希函数,表大小和数据结构以使其与您的用例一起使用非常重要。
事实上,将两者结合起来也可以起作用:)
这真的只是基于我的意见,所以我希望我帮助过!这真的是一个非常浅薄的比较,我建议你只是谷歌如何在缓存和你自己的比较!奖励!