返回介绍

6.8.基于二叉堆的优先队列

发布于 2024-06-08 22:44:10 字数 3987 浏览 0 评论 0 收藏 0

6.8.基于二叉堆的优先队列

在前面的部分中,你了解了称为队列的先进先出数据结构。队列的一个重要变种称为优先级队列。优先级队列的作用就像一个队列,你可以通过从前面删除一个项目来出队。然而,在优先级队列中,队列中的项的逻辑顺序由它们的优先级确定。最高优先级项在队列的前面,最低优先级的项在后面。因此,当你将项排入优先级队列时,新项可能会一直移动到前面。我们将在下一章中研究一些图算法看到优先级队列是有用的数据结构。

你可能想到了几种简单的方法使用排序函数和列表实现优先级队列。然而,插入列表是 O(n)O(n)O(n) 并且排序列表是 O(nlogn)O(nlogn)O(nlogn)。我们可以做得更好。实现优先级队列的经典方法是使用称为二叉堆的数据结构。二叉堆将允许我们在 O(logn)O(logn)O(logn) 中排队和取出队列。

二叉堆是很有趣的研究,因为堆看起来很像一棵树,但是当我们实现它时,我们只使用一个单一的列表作为内部表示。二叉堆有两个常见的变体:最小堆(其中最小的键总是在前面)和最大堆(其中最大的键值总是在前面)。在本节中,我们将实现最小堆。我们将最大堆实现作为练习。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文