Data structures 与哈希表相比,splay树有哪些优点?

Data structures 与哈希表相比,splay树有哪些优点?,data-structures,hashmap,time-complexity,hashtable,binary-search-tree,Data Structures,Hashmap,Time Complexity,Hashtable,Binary Search Tree,由于splay树用于缓存,我想知道当我想要高效缓存时,splay树比哈希表有什么优势 什么时候我应该更喜欢splay树而不是哈希表 我想这是一个比BST更特殊的案例,请不要链接到BST vs Hashtable答案。这取决于你所说的效率 如果它位于数据结构所消耗的存储/空间上,则它们将是相同的。另一方面,当我们谈论时间复杂性时,它仍然取决于数据结构的使用方式 如果您的用户使用您的数据结构时,他们每次都会访问非常相似的数据(相关数据),那么使用splay树进行缓存将非常好,因为最坏的情况是围绕O(

由于splay树用于缓存,我想知道当我想要高效缓存时,splay树比哈希表有什么优势

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


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

这取决于你所说的效率

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

如果您的用户使用您的数据结构时,他们每次都会访问非常相似的数据(相关数据),那么使用splay树进行缓存将非常好,因为最坏的情况是围绕O(logn)进行的,而哈希表最坏的情况是O(n)

散列表的工作非常糟糕的一个例子是,散列存储在少于3个存储桶中,或者更糟糕的是,只有1个存储桶、链或线程。我想你可以想象当你试图访问数据时会发生什么

但一般来说,当涉及到缓存时,哈希表会工作得很好,因为它的平均时间复杂度为O(1)

你也可以这样想。如果你想要的是让你的数据结构更快地访问“最近的”/“最被访问的”数据,那么你可以考虑使用八叉树。但是如果您希望数据结构能够轻松访问不同类型的数据,那么您就需要考虑使用哈希表。 您还需要注意的是,确保选择一个好的散列函数、表大小和数据结构来在bucket中使用非常重要,以使它能够很好地与您的用例配合使用

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


这真的只是基于我的意见,所以我希望我能帮上忙!这真的是一个非常肤浅的比较,我建议你只是谷歌如何两者的工作时,谈到缓存,并作出自己的比较!荣誉

但是,哈希表不需要更多的空间吗?从某种意义上说,哈希表并没有达到100%的满度?我所说的效率是指当我使用一个哈希表而不是另一个哈希表时。Splay树是一个很好的数据结构,但是如果HashMap超过它,我什么时候会使用它呢?嗯。理论上,它们都实际使用相同的空间量。我真的不明白你所说的“未满到100%”是什么意思。我将编辑我的答案,添加一个哈希树真正起作用的示例bad@VincentParkson由于数据的随机性和哈希函数的随机性,哈希表之间可能存在间隙。也就是说,若并没有数据散列到索引2处的bucket中,那个么它就是空的。因此,内存没有被充分利用。