Hashtable的平均复杂度为O(1),最差情况复杂度为O(n)。平衡树的平均复杂度为O(logn),最差情况复杂度为O(logn)。大多数数据库是使用“树”而不是“桶”哈希表设计的吗?这将给出平均情况O(1)和最坏情况O(logn),正确吗?
答案 0 :(得分:0)
Hashtable的......最坏的情况复杂性是O(n)。
对于许多“单独链接”又称“开放散列”实现来说也是如此,但是一些这样的实现(例如Java)使用平衡的冲突元素树,将最坏情况复杂度降低到O(log n)。对于“封闭散列”实现,最坏的情况很容易甚至比O(n)更糟糕:这一切都取决于在碰撞后如何选择连续的桶进行探测,以及何时进行重新划分来增加桶的数量。
大多数数据库是使用“tree”而不是“bucket”哈希表设计的吗?
什么构成“数据库”是有争议的。做一项调查是不切实际的。甚至你的问题的意思还不清楚 - 或许你的意思是比较使用树和封闭哈希的单独链接?我无法对“数据库”中的常见做法发表评论,但会指出在任何给定情况下最好的做法在很大程度上取决于存储的键和值的大小以及它们的碰撞倾向。作为对比的一个例子,python“dict”(字典,这是散列表的python术语)使用了封闭散列,而C ++标准有效地强制要求单独链接,但两种语言的程序员对这些实现选择的抱怨相对较少。