【发布时间】:2021-02-15 11:30:54
【问题描述】:
为什么我们总是想要浅二叉树?在什么情况下,浅二叉树比非浅/最小深度树更好?
我只是很困惑,因为我的教授一直说我们想瞄准尽可能浅的二叉树,但我不明白为什么。我想smallar更好,但有什么具体的具体原因吗?对不起我的英语不好谢谢你的帮助
【问题讨论】:
标签: algorithm performance data-structures tree depth
为什么我们总是想要浅二叉树?在什么情况下,浅二叉树比非浅/最小深度树更好?
我只是很困惑,因为我的教授一直说我们想瞄准尽可能浅的二叉树,但我不明白为什么。我想smallar更好,但有什么具体的具体原因吗?对不起我的英语不好谢谢你的帮助
【问题讨论】:
标签: algorithm performance data-structures tree depth
我假设这是关于二叉 搜索 树 - 如果不是,请告诉我,我可以更新这个答案。
在二叉搜索树中,几乎每个操作(插入、删除、查找、后继、前驱、最小、最大、范围搜索、拆分、连接等)的成本都取决于二叉搜索树的高度。这样做的原因是,这些操作通过从根部沿着树向下走,直到它们从树上掉下来或找到它们正在寻找的东西来工作。树越深,如果输入错误,这可能需要的时间就越长。
通过改组节点以保持树的高度较低,我们可以使这些操作通常非常快。高度为 h 的树最多可以有 2h - 1 个节点,这与 h 相比是一个巨大的数字(图如果 h = 20,则 2h - 1 超过一百万!),因此如果您努力将节点打包到更高且更靠近根的树中,您将获得更好的运行速度。
在某些情况下,让树木尽可能不平衡实际上是有益的。例如,如果你有一棵二叉搜索树,并且事先知道某些元素会比其他元素被查找得更多,那么你可能希望将树中的节点打乱,将高频项放在更高的位置,而低频项树中更深的项目。在非二叉搜索树上下文中,随机可融合优先级队列通过随机沿着树向下进行合并来工作,并且 less 平衡树的可能性越大,这些操作就越有可能提前结束从树上掉下来。
【讨论】: