【发布时间】:2011-04-15 01:13:16
【问题描述】:
在什么情况下使用平衡二叉搜索树而不是哈希表来实现 Dictionary ADT 更好?
我的假设是使用二叉搜索树总是更好,因为它的自然顺序。
但是哈希表的搜索时间确实可以和 O(1) 一样好,v.s.二叉树的 O(logn)。
所以我不确定情况是什么。
【问题讨论】:
标签: dictionary hashtable binary-search-tree
在什么情况下使用平衡二叉搜索树而不是哈希表来实现 Dictionary ADT 更好?
我的假设是使用二叉搜索树总是更好,因为它的自然顺序。
但是哈希表的搜索时间确实可以和 O(1) 一样好,v.s.二叉树的 O(logn)。
所以我不确定情况是什么。
【问题讨论】:
标签: dictionary hashtable binary-search-tree
当哈希表被填满并需要重新分配内存(在硬实时系统的上下文中)时,它们可能会出现性能问题。二叉树没有这个问题。 哈希表需要比实际使用更多的内存,而二叉树则需要尽可能多的内存。
【讨论】:
您的问题已经包含答案:
如果您不需要任何内在排序,请使用哈希表以获得更好的性能。如果您的要求需要某种排序,请考虑使用树。
【讨论】:
字典的时间复杂度是:
-----------------------------------------
| Operation | Dictionary | BST |
-----------------------------------------
| Insert | O(1) | O(log(n)) |
-----------------------------------------
| Delete | O(1) | O(log(n)) |
-----------------------------------------
| Search | O(1) | O(log(n)) |
-----------------------------------------
那么你在哪里使用 BST 和 Dictionary 呢?以下是 BST 的一些主要优势。
【讨论】: