【问题标题】:Binary Search Tree Explanation二叉搜索树解释
【发布时间】:2015-06-16 09:20:08
【问题描述】:

我正在尝试复习一下我对二叉树,尤其是二叉搜索树的理解。翻阅维基百科向我展示了以下信息 (http://en.wikipedia.org/wiki/Binary_search_tree):

“二叉搜索树保持它们的键是有序的,这样查找和其他操作就可以使用二叉搜索的原理:在树中寻找一个键(或插入新键的地方)时,它们会遍历树从根到叶,与存储在树的节点中的键进行比较,并根据比较决定继续在左子树或右子树中搜索。平均而言,这意味着每次比较允许操作跳过一半以上的树,因此每次查找/插入/删除所花费的时间与存储在树中的项目数的对数成正比。这比在未排序数组中按键查找项目所需的线性时间要好得多,但比哈希表的相应操作。”

有人可以详细说明/解释该描述的以下部分吗:

1) “平均而言,这意味着每次比较都允许操作跳过树的一半,因此每次查找/插入/删除所花费的时间与树中存储的项目数的对数成正比。”

2) [从最后一句]“……但比哈希表上的相应操作慢。”

【问题讨论】:

  • 呃,(1)中的文字措辞真的很糟糕。我会建议另一个参考。

标签: algorithm sorting search data-structures binary-search-tree


【解决方案1】:

1) “平均”仅适用于 BST平衡,即左右子树包含大致相等数量的节点。这使得搜索成为 O(log n) 操作,因为在每次迭代中,您可以大致丢弃剩余项目的一半。

2) 在哈希表上,搜索、插入和删除都需要预期的 O(1) 时间。

【讨论】:

  • 您能否进一步解释一下您对 1 的回复。为什么要丢弃导致 O(log n) 而不是 O(n/2) = O(n) 的一半操作
  • 因为它是递归的:每个节点都是平衡的。使用 每个 节点来比较您的值,您可以丢弃大约一半的剩余值,因为您知道它们大于/小于您要查找的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
相关资源
最近更新 更多