Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 堆与二进制搜索树(当它优于其他树时?)_Algorithm_Data Structures_Heap_Binary Search Tree - Fatal编程技术网

Algorithm 堆与二进制搜索树(当它优于其他树时?)

Algorithm 堆与二进制搜索树(当它优于其他树时?),algorithm,data-structures,heap,binary-search-tree,Algorithm,Data Structures,Heap,Binary Search Tree,在什么情况下,使用最小堆比使用二进制搜索树更有效?在二元搜索树中查找最小值的时间是否等于在min heap-O1中查找最小值的时间?这两者有不同的用途,不能互换 堆是一种结构,它保证给定节点的值低于或等于最小堆的值;大于或等于max heap下任何节点的值。这允许获得O1中的最小值或最大值 二叉搜索树是一种保持所有节点有序的结构。这允许检索Oh h中的任何值,h是树的高度,如果树是平衡的,则h=log2n,n是节点数。这两个值有不同的用途,不能互换 堆是一种结构,它保证给定节点的值低于或等于最小

在什么情况下,使用最小堆比使用二进制搜索树更有效?在二元搜索树中查找最小值的时间是否等于在min heap-O1中查找最小值的时间?

这两者有不同的用途,不能互换

堆是一种结构,它保证给定节点的值低于或等于最小堆的值;大于或等于max heap下任何节点的值。这允许获得O1中的最小值或最大值


二叉搜索树是一种保持所有节点有序的结构。这允许检索Oh h中的任何值,h是树的高度,如果树是平衡的,则h=log2n,n是节点数。

这两个值有不同的用途,不能互换

堆是一种结构,它保证给定节点的值低于或等于最小堆的值;大于或等于max heap下任何节点的值。这允许获得O1中的最小值或最大值


二叉搜索树是一种保持所有节点有序的结构。这允许检索Oh h中的任何值,h是树的高度,如果树是平衡的,则h=log2n,n是节点数。

这几乎就像比较咖啡杯和考拉熊一样。堆和二进制搜索树用于执行非常不同的功能。堆是优先级队列抽象数据类型的实现。在基本层次上,优先级队列和堆只是一个包,您可以在其中放置物品,当您伸手去拿物品时,总是会得到包中最小的最小堆或最大的最大堆项目

您可以想象并赋予堆删除任意项的能力,或更改堆中某项的优先级,但这些功能更高级,不在堆数据结构的传统定义的范围内

二叉搜索树是一种完全不同的野兽。它是一个袋子,你可以把东西放在里面,你可以快速伸手按键抓取任何物品,也可以按顺序或相反顺序列出所有物品

您可以使用二叉搜索树来实现优先级队列,这意味着您原则上可以用二叉树替换堆。二进制搜索树的性能不如堆,但它可以完成任务

但事实并非如此。不能使用堆替换二进制搜索树

因此,哪个更好的问题实际上是一个你想做什么的问题

如果您想要一组有序的项目,您可以从中快速找到任何项目,或者您可以按顺序遍历这些项目,那么您需要一个二叉搜索树


如果您想要实现优先级队列抽象数据类型:一个包,根据您在请求时如何定义它,它将快速为您提供最小或最大的数据项,那么您需要使用堆。

这几乎就像比较咖啡杯和考拉熊一样。堆和二进制搜索树用于执行非常不同的功能。堆是优先级队列抽象数据类型的实现。在基本层次上,优先级队列和堆只是一个包,您可以在其中放置物品,当您伸手去拿物品时,总是会得到包中最小的最小堆或最大的最大堆项目

您可以想象并赋予堆删除任意项的能力,或更改堆中某项的优先级,但这些功能更高级,不在堆数据结构的传统定义的范围内

二叉搜索树是一种完全不同的野兽。它是一个袋子,你可以把东西放在里面,你可以快速伸手按键抓取任何物品,也可以按顺序或相反顺序列出所有物品

您可以使用二叉搜索树来实现优先级队列,这意味着您原则上可以用二叉树替换堆。二进制搜索树的性能不如堆,但它可以完成任务

但事实并非如此。不能使用堆替换二进制搜索树

因此,哪个更好的问题实际上是一个你想做什么的问题

如果您想要一组有序的项目,您可以从中快速找到任何项目,或者您可以按顺序遍历这些项目,那么您需要一个二叉搜索树


如果您想要实现优先级队列抽象数据类型:根据您请求时如何定义项目,快速为您提供最小或最大数据类型的包,那么您需要使用堆。

哪种数据结构最好将在很大程度上取决于您使用它的具体情况。您是在试图解决一个特定的问题,还是这是一个一般性的问题?哪种数据结构最好将在很大程度上取决于您使用它的具体情况。你有没有想解决的具体问题
olve,或者这是一个一般性的问题?平衡二叉搜索树的高度是logn,特别是logbase 2,而不是ln,这是自然对数,base e.@miliesmith,非常正确,但这不会影响big-O访问时间,因为任何对数基数都只是一个常数。@dfeuer,这是正确的,但这仍然是误导和错误的。顺序相同,但高度不同!=lnn.@JulienGuertault我认为实现构建系统的更好方法是使依赖关系图对象=节点,依赖关系=边。然后,你们可以做一个拓扑图。这不仅在时间上运行得更快,而且更有意义,因为你不知道如何在不遵循整个依赖链的情况下比较两个对象并确定应该先构建哪个对象。平衡二叉搜索树的高度是logn,特别是logbase 2,而不是ln,ln是自然对数,base e.@millesmith,非常正确,但这不会影响big-O访问时间,因为任何对数基数都只是一个常数。@dfeur,这是正确的,但它仍然是误导和错误的。顺序相同,但高度不同!=lnn.@JulienGuertault我认为实现构建系统的更好方法是使依赖关系图对象=节点,依赖关系=边。然后,你们可以做一个拓扑图。这不仅在时间上运行得更快,而且更有意义,因为您不知道如何在不遵循整个依赖关系链的情况下比较两个对象并确定应该先构建哪个对象。