带你读《图解算法小抄》五、优先队列

简介: 带你读《图解算法小抄》五、优先队列

五、优先队列

访问 www.coding-time.cn 阅读原文动画效果,体验更佳。

 

在计算机科学中, 优先级队列(priority queue) 是一种抽象数据类型, 它类似于常规的队列或栈, 但每个元素都有与之关联的“优先级”。

 

在优先队列中, 低优先级的元素之前前面应该是高优先级的元素。 如果两个元素具有相同的优先级, 则根据它们在队列中的顺序是它们的出现顺序即可。

 

优先队列虽通常用堆来实现,但它在概念上与堆不同。优先队列是一个抽象概念,就像“列表”或“图”这样的抽象概念一样;

 

正如列表可以用链表或数组实现一样,优先队列可以用堆或各种其他方法实现,例如无序数组。

class PriorityQueue {
  constructor() {
    this.queue = [];
  }
  // 添加元素到优先队列中
  enqueue(element, priority) {
    const item = { element, priority };
    let inserted = false;
    for (let i = 0; i < this.queue.length; i++) {
      if (item.priority < this.queue[i].priority) {
        this.queue.splice(i, 0, item);
        inserted = true;
        break;
      }
    }
    if (!inserted) {
      this.queue.push(item);
    }
  }
  // 从优先队列中移除并返回具有最高优先级的元素
  dequeue() {
    if (this.isEmpty()) {
      return null;
    }
    return this.queue.shift().element;
  }
  // 返回具有最高优先级的元素,但不进行移除
  front() {
    if (this.isEmpty()) {
      return null;
    }
    return this.queue[0].element;
  }
  // 检查优先队列是否为空
  isEmpty() {
    return this.queue.length === 0;
  }
  // 返回优先队列的大小
  size() {
    return this.queue.length;
  }
}const priorityQueue = new PriorityQueue();
priorityQueue.enqueue("apple", 2);
priorityQueue.enqueue("banana", 3);
priorityQueue.enqueue("orange", 1);
console.log(priorityQueue.front()); // 输出: "orange"
console.log(priorityQueue.dequeue()); // 输出: "orange"
console.log(priorityQueue.size()); // 输出: 2
console.log(priorityQueue.isEmpty()); // 输出: false

3. 参考

Wikipedia

YouTube

相关文章
|
9月前
|
算法
带你读《图解算法小抄》二、双向链表(3)
带你读《图解算法小抄》二、双向链表(3)
|
9月前
|
存储 缓存 算法
带你读《图解算法小抄》一、链表(1)
带你读《图解算法小抄》一、链表(1)
带你读《图解算法小抄》一、链表(1)
|
9月前
|
算法
带你读《图解算法小抄》六、哈希表(2)
带你读《图解算法小抄》六、哈希表(2)
|
10天前
|
算法 C++
数据结构与算法===优先队列
数据结构与算法===优先队列
数据结构与算法===优先队列
|
4天前
|
算法 Java 调度
Java数据结构与算法:优先队列
Java数据结构与算法:优先队列
|
10天前
|
算法 C++
【洛谷 P1090】[NOIP2004 提高组] 合并果子(贪心算法+哈夫曼编码+优先队列)
该编程题目要求设计算法,将不同种类的果子合并成一堆,使得消耗的体力最小。给定果子种类数`n`(1至10000)和每种果子的数量,需输出合并的最小体力值。使用优先队列(最小堆),每次取出两个数量最少的果子堆合并,并更新总体力消耗。样例输入为3种果子(1, 2, 9),输出最小体力耗费为15。提供的AC代码采用C++实现,通过优先队列优化合并顺序。
9 0
|
10天前
|
存储 算法 Java
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
|
8月前
|
人工智能 算法 架构师
再现神作!字节算法小抄官方整版,已助1000+应届生拿到25w+年薪
2023年经济下行趋势明显,程序员出路在哪儿? 今年,毕业人数将达到1158万,导致很多公司招聘非常谨慎、要求也变得非常更高。
再现神作!字节算法小抄官方整版,已助1000+应届生拿到25w+年薪
|
2月前
|
算法 测试技术 编译器
【算法】优先队列式分支限界法,以01背包问题为例
📑 例题:01背包问题 题目链接:采药-洛谷 当洛谷上不让下载测试用例,可以试试:采药-ACWing
238 0
|
9月前
|
算法
带你读《图解算法小抄》二、双向链表(1)
带你读《图解算法小抄》二、双向链表(1)
带你读《图解算法小抄》二、双向链表(1)