Skip to content

队列与搜索

Published: at 04:06

普通队列

用于求 BFS 最短路,特点是先进先出,按层扩展,等价与在边权为 11 的图上找最短路。每个状态只入队一次,第一次入队时即为该状态的最少步数。时间复杂度为 O(n)O(n)

双端队列

用于实现双端队列 BFS,维护队列的两端性。等价于在边权为 0011 的图上找最短路。每个状态入队多次,第一次出队即为该状态的最少代价。时间复杂度还是 O(n)O(n)

优先队列

用于实现 堆优化dijkstra ,功能有大根堆(完全二叉树)。等价于在边权为任意数值的图上找最短路,每个状态入队多次,只拓展一次,第一次出队时即该状态的最少代价。时间复杂度是 O(nlogn)O(n \log n)

单调队列

用于实现单调队列优化 DP,维护队列的单调性。每个状态只入队一次,出队一次,维护队中序列的单调性,队头是最优转移。时间复杂度是 O(n)O(n)