在几种情况下,您将使用二进制堆而不是二进制搜索树?
我对每种结构都有基本的了解。如果可以的话,我希望您能提供意见。
答案 0 :(得分:0)
在使用优先级队列的情况下,使用二进制堆而不是二进制搜索树会很有帮助。优先级队列需要某些功能,例如访问优先级元素,插入元素和删除最高优先级元素。堆可以分别在O(1),O(log n)和O(log n)中执行此操作。但是,某些类型的二进制搜索树也可以做到这一点(请参阅:自平衡搜索树)。除此之外,优先级队列也更容易用二进制堆实现,不需要额外的指针空间,并且构建它们需要O(n)时间,而O(n log n)需要自平衡二进制搜索树。
另一种情况是二进制堆比二进制搜索树更有用的情况是,如果您需要随机删除顺序并可以访问堆对象的索引。
总体而言,二进制堆在使用较少空间(按恒定因子)方面很方便,并且可以用单个数组实现,而不必担心指针。但是,最终,您的选择实际上取决于您要实现的应用程序。
答案 1 :(得分:0)
当您需要查找数据集中的最小或最大元素时,二进制堆非常有用。二进制堆在根节点中将始终具有最小或最大元素,因此可以在(O(1))恒定时间内对其进行检索。二进制堆可用于最大化某些算法的效率,例如prim的最小生成树算法和dijkstra的最短路径算法。这些算法都可以使用二进制堆来快速找到运行它们的图形中可用的最小边。
二进制搜索树的优点是可以轻松地按顺序访问元素,但是与二进制堆相比,管理二进制搜索树需要更多的开销。因此,是否也可以根据向其添加方式和元素的方式来低效率地制作二叉搜索树。如果树不平衡,则使用二分搜索树的许多效率优势将消失。使用红黑树或abl树可以解决此问题,但要以保持平衡为代价。
简而言之,当只需要查找数据集中最大或最小的元素时,二进制堆会更好,因为它易于访问且管理起来更便宜。二进制搜索树包含元素的特定顺序,但是要花更多的时间进行管理。