PriorityQueue
概念 优先级队列(Priority Queue)是一种特殊的队列,队列中每个元素都附有一个"优先级"。出队时,不再遵循普通队列的 FIFO(先进先出)原则,而是优先级最高(或最低)的元素先出队。 直观类比:医院的急诊室——无论谁先到,病情最重的患者优先就诊。 核心特性 插入(insert / enqueue):将元素连同优先级一起加入队列 取最值(peek):查看优先级最高的元素,不移除 取出最值(poll / dequeue):取出并移除优先级最高的元素 不保证全局有序:内部结构只保证堆顶(最值)正确,其余元素顺序不确定 内部实现:二叉堆 绝大多数语言的标准库都用**二叉堆(Binary Heap)**实现优先级队列。 堆的结构 用完全二叉树表示,通常以数组存储 最小堆(Min-Heap):父节点 ≤ 子节点,根为最小值 最大堆(Max-Heap):父节点 ≥ 子节点,根为最大值 数组索引关系(从 0 开始): 节点 索引 父节点 (i-1) / 2 左子节点 2*i + 1 右子节点 2*i + 2 核心操作:上浮与下沉 上浮(Sift Up):插入新元素时,将其放在数组末尾,然后与父节点比较,不满足堆性质则交换,直到满足为止。 下沉(Sift Down):取出堆顶后,将末尾元素移到堆顶,然后与子节点比较,不满足堆性质则与较小(或较大)的子节点交换,直到满足为止。 时间复杂度 操作 时间复杂度 插入 $O(\log n)$ 取出最值 $O(\log n)$ 查看最值 $O(1)$ 建堆(heapify) $O(n)$ 两种变体 最小优先级队列(Min Priority Queue) 优先级数值最小的元素最先出队。例如:Dijkstra 最短路径算法中,每次选取距离最小的节点。 最大优先级队列(Max Priority Queue) 优先级数值最大的元素最先出队。例如:任务调度中,优先执行优先级最高的任务。 ...