还剩45页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《优先队列》Priority Queue欢迎来到关于优先队列的精彩讲解!本次课程将深入探讨优先队列的概念、应用、实现及其高级变体我们将从基础知识入手,逐步过渡到高级主题,并通过丰富的实例和练习,帮助大家全面掌握优先队列的精髓无论您是初学者还是有经验的开发者,相信都能从中受益匪浅什么是优先队列定义与普通队列的区别应用场景优先队列是一种特殊的队列,其中每个元普通队列遵循原则,而优先队列则根优先队列广泛应用于任务调度、事件驱动FIFO素都关联一个优先级与普通队列的先进据优先级出队这意味着即使元素先进入模拟、数据压缩等领域例如,在操作系先出()原则不同,优先队列根据元队列,如果优先级较低,也需要等待优先统中,优先级队列可用于调度进程,确保FIFO素的优先级决定其出队顺序优先级最高级更高的元素出队后才能轮到它高优先级进程优先执行的元素总是先出队优先队列的应用场景任务调度事件驱动模拟12在操作系统中,使用优先队列调度任务,确保高优先级任务优先在模拟系统中,事件按照发生的时间顺序(即优先级)放入优先执行,从而提高系统响应速度和效率例如,实时性要求高的任队列中,模拟器按照队列顺序处理事件,模拟真实世界的运行情务可以设置为高优先级况例如,交通模拟、物理模拟等数据压缩图算法34霍夫曼编码等数据压缩算法使用优先队列构建最优编码树,从而算法和算法等图算法使用优先队列来选择下一个要Dijkstra Prim实现高效的数据压缩频率高的字符具有更高的优先级,编码长处理的顶点或边,从而找到最短路径或最小生成树度更短优先队列的基本操作插入()Insert将一个带有优先级的元素插入到优先队列中插入操作需要维护队列的优先级顺序,确保队列的结构正确删除最大最小元素()/DeleteMax/DeleteMin删除队列中优先级最高(或最低)的元素删除操作后,需要调整队列结构,以保证队列的优先级性质查找最大最小元素()/FindMax/FindMin查找队列中优先级最高(或最低)的元素,但不删除它这通常是一个操作,因为优先级最高的元素通常位于队列的特定位置O1判空()IsEmpty检查队列是否为空,即队列中是否包含任何元素这是一个简单的布尔操作,用于判断队列是否可以进行删除操作数组实现的优先队列基本原理插入操作删除操作优缺点使用数组实现优先队列,最简插入操作的时间复杂度为删除操作的时间复杂度为优点是实现简单,缺点是删除单的方法是每次插入元素时,,因为只需要将元素添,因为需要遍历整个数操作效率较低,不适合频繁删O1On将元素添加到数组末尾,然后加到数组末尾即可组找到最大(或最小)元素除元素的场景在删除最大(或最小)元素时,遍历整个数组找到最大(或最小)元素并删除堆实现的优先队列基本原理插入操作删除操作优缺点堆是一种特殊的树形数据结构,插入操作的时间复杂度为删除操作的时间复杂度为优点是插入和删除操作效率较通常用于实现优先队列堆分,通过将新元素添加,通过删除堆顶元素,高,适合频繁插入和删除元素Olog nOlog n为最大堆和最小堆,最大堆的到堆的末尾,然后向上调整堆然后将堆的最后一个元素移动的场景,缺点是实现相对复杂每个节点的值都大于或等于其的结构,使其满足堆的性质到堆顶,并向下调整堆的结构,子节点的值,最小堆则相反使其满足堆的性质最小堆定义性质应用实现最小堆是一种堆,其中每个节最小堆满足堆的性质对于任最小堆常用于实现优先队列,最小堆可以使用数组或链表实点的值都小于或等于其子节点何节点,其值小于或等于其其中优先级最高的元素是值最现使用数组实现时,通常使i的值这意味着最小堆的根节子节点的值这保证了最小堆小的元素例如,在用完全二叉树的形式,便于计Dijkstra点是整个堆中值最小的元素的根节点是整个堆中最小的元算法中,可以使用最小堆来选算节点之间的父子关系素择下一个要处理的顶点最大堆定义性质应用实现最大堆是一种堆,其中每个节最大堆满足堆的性质对于任最大堆常用于实现优先队列,最大堆可以使用数组或链表实点的值都大于或等于其子节点何节点,其值大于或等于其其中优先级最高的元素是值最现使用数组实现时,通常使i的值这意味着最大堆的根节子节点的值这保证了最大堆大的元素例如,在堆排序中,用完全二叉树的形式,便于计点是整个堆中值最大的元素的根节点是整个堆中最大的元可以使用最大堆来实现排序算节点之间的父子关系素堆的构建自顶向下自底向上算法步骤优化从根节点开始,依次调整每个从最后一个非叶子节点开始,将所有元素放入数组中自底向上构建堆的方法效率更
1.节点,使其满足堆的性质这依次调整每个节点,使其满足从最后一个非叶子节点开高,因为它避免了不必要的比
2.种方法的时间复杂度为堆的性质这种方法的时间复始,依次调用调整堆的函数较和交换操作On杂度为调整堆的函数比较节点log nOn
3.与其子节点的值,如果节点的值小于(或大于)子节点的值,则交换它们的值,并递归调整子节点堆的插入步骤添加到堆末尾1首先,将新元素添加到堆的末尾,即数组的最后一个位置这会增加堆的大小步骤向上调整()2Heapify Up然后,从新添加的节点开始,向上调整堆的结构,使其满足堆的性质向上调整的过程称为堆化或“”“Heapify Up”步骤比较与交换3在向上调整的过程中,比较当前节点与其父节点的值如果当前节点的值大于(或小于)其父节点的值,则交换它们的值步骤重复调整4重复步骤,直到当前节点的值小于(或大于)其父节点的值,或者当前节点3到达堆的根节点此时,堆的结构已经调整完毕,满足堆的性质堆的删除步骤删除堆顶元素1首先,删除堆顶元素,即优先级最高的元素这会减少堆的大小步骤将最后一个元素移动到堆顶2然后,将堆的最后一个元素移动到堆顶,即数组的第一个位置这会保持堆的完整性步骤向下调整()3Heapify Down从堆顶元素开始,向下调整堆的结构,使其满足堆的性质向下调整的过程称为堆化或“”“Heapify Down”步骤比较与交换4在向下调整的过程中,比较当前节点与其子节点的值如果当前节点的值小于(或大于)其子节点的值,则交换它们的值步骤重复调整5重复步骤,直到当前节点的值大于(或小于)其子节点的值,或者当前节点到达堆的叶子节点此时,堆的结构已经调整完毕,满足堆的性质4堆的性质结构性堆序性12堆通常是一个完全二叉树,这意味着除了最后一层外,每一层都堆满足堆序性质对于最大堆,每个节点的值都大于或等于其子是完全填充的,并且最后一层的所有节点都尽可能地向左靠拢节点的值;对于最小堆,每个节点的值都小于或等于其子节点的这使得堆可以使用数组高效地表示值这保证了堆顶元素是最大(或最小)的元素时间复杂度空间复杂度34堆的插入和删除操作的时间复杂度为,查找最大(或最堆的空间复杂度为,因为需要存储所有元素然而,堆可以Olog nOn小)元素的时间复杂度为这使得堆成为实现优先队列的理使用数组原地排序,从而减少空间复杂度O1想数据结构堆排序基本原理算法步骤时间复杂度空间复杂度堆排序是一种基于堆数据结构构建堆将数组中的元素堆排序的时间复杂度为堆排序的空间复杂度为,
1.On O1的排序算法它利用堆的性质,构建成一个最大堆(或最小,其中是数组中元素因为它是一种原地排序算法,log nn将数组中的元素构建成一个堆,堆)循环删除循环删的个数堆排序是一种高效的不需要额外的存储空间
2.然后依次删除堆顶元素,并将除堆顶元素,并将删除的元素排序算法,适用于大型数据集删除的元素放到数组的末尾,放到数组的末尾调整堆
3.从而实现排序每次删除堆顶元素后,需要调整堆的结构,使其满足堆的性质完成排序当堆为空
4.时,数组中的元素已经排序完毕二项式堆定义性质优点缺点二项式堆是一组二项式树的集二项式堆的每棵二项式树的根二项式堆支持高效的合并操作,二项式堆的实现相对复杂,需合,每棵二项式树都满足最小节点都具有不同的度这保证可以在时间内将两个要维护多棵二项式树Olog n堆性质二项式树是一种特殊了二项式堆的结构是唯一的二项式堆合并成一个二项式堆的树形结构,其节点数目是这使得二项式堆适用于需要频2的幂次方繁合并操作的场景斐波那契堆定义性质优点缺点斐波那契堆是一种具有最优平斐波那契堆使用惰性删除和层斐波那契堆的插入操作的时间斐波那契堆的实现非常复杂,摊时间复杂度的高级堆数据结叠切割等技术,实现了高效的复杂度为,删除最小元需要维护大量的指针和标记O1构它由一组树组成,每棵树插入、合并和删除操作素的操作的平摊时间复杂度为都满足最小堆性质这使得斐波那契堆Olog n适用于需要频繁插入和删除元素的场景二项式堆的性质二项式树1二项式堆由一组二项式树组成,每棵树都是一个二项式树二项式树是由递归定Bk义的是一个单节点,是由两棵树连接而成,其中一棵树的根是另一棵B0Bk Bk-1树的根的最左边的孩子唯一性2一个包含个节点的二项式堆由最多棵二项式树组成对于每个,只能n logn+1k有一棵树,或者没有Bk最小堆性质3二项式堆中的每棵二项式树都满足最小堆性质每个节点的值都大于或等于其父节点的值度的不同4二项式堆中的每棵二项式树的根节点都具有不同的度这保证了二项式堆的结构是唯一的二项式堆的插入步骤创建新堆1首先,创建一个只包含要插入元素的新二项式堆这个新堆只包含一棵树B0步骤合并堆2然后,将新堆与原二项式堆合并合并操作类似于二进制加法从最小的度开始,如果两个堆都有相同度的树,则将它们合并成一棵更高度的树合并操作需要维护最小堆性质步骤调整堆3在合并过程中,如果出现连续三棵树具有相同的度,则需要将前两棵树合并成一棵更高度的树,以保证二项式堆的性质二项式堆的合并基本原理算法步骤最小堆性质高效合并二项式堆的合并操作是将两个将两个二项式堆的根列表在合并过程中,需要维护最小二项式堆的合并操作非常高效,
1.二项式堆合并成一个二项式堆合并成一个根列表从最堆性质,即每个节点的值都大因为它只需要遍历根列表,而
2.合并操作的时间复杂度为小的度开始,依次处理根列表于或等于其父节点的值不需要遍历整个堆,其中是两个二项中的每棵树如果根列表Olog nn
3.式堆中节点的总数中有两棵树具有相同的度,则将它们合并成一棵更高度的树如果根列表中有三棵树具
4.有相同的度,则将前两棵树合并成一棵更高度的树二项式堆的删除最小元素步骤找到最小元素1首先,找到二项式堆中具有最小值的根节点由于每棵二项式树都满足最小堆性质,因此最小元素一定是某个根节点步骤删除最小元素2然后,删除包含最小元素的二项式树这将导致该树分解成多棵更小的二项式树步骤合并剩余树3将分解后的树与剩余的二项式堆合并合并操作需要维护最小堆性质,并保证二项式堆的结构是唯一的斐波那契堆的性质树的集合1斐波那契堆由一组树组成,每棵树都满足最小堆性质与二项式堆不同,斐波那契堆中的树可以是任意形状的最小堆性质2斐波那契堆中的每棵树都满足最小堆性质每个节点的值都大于或等于其父节点的值惰性删除3斐波那契堆使用惰性删除技术,即删除节点时,并不立即调整堆的结构,而是将该节点标记为已删除只有在删除最小元素时,才会进行调整层叠切割4斐波那契堆使用层叠切割技术,即如果一个节点失去了两个孩子,则将其与其父节点断开连接,并将该节点添加到根列表中这有助于保持堆的平衡斐波那契堆的插入步骤创建新节点1首先,创建一个包含要插入元素的新节点这个新节点成为一个单节点的树步骤添加到根列表2然后,将新节点添加到斐波那契堆的根列表中根列表是一个链表,包含所有树的根节点步骤更新最小指针3如果新节点的值小于当前最小指针指向的节点的值,则更新最小指针,使其指向新节点最小指针指向根列表中具有最小值的节点斐波那契堆的合并基本原理算法步骤高效合并斐波那契堆的合并操作是将两个斐波那契将两个斐波那契堆的根列表合并成一个斐波那契堆的合并操作非常高效,因为它
1.堆合并成一个斐波那契堆合并操作的时根列表更新最小指针,使其指向根只需要连接两个根列表,而不需要遍历整
2.间复杂度为列表中具有最小值的节点合并操作个堆O
13.非常简单,只需要连接两个根列表即可斐波那契堆的删除最小元素步骤找到最小元素1首先,找到斐波那契堆中具有最小值的根节点最小指针指向根列表中具有最小值的节点步骤删除最小元素2然后,删除最小指针指向的节点这将导致该节点的孩子节点成为新的根节点步骤合并孩子节点3将删除节点的孩子节点添加到根列表中合并根列表中具有相同度的树,直到所有树的度都不同为止更新最小指针,使其指向根列表中具有最小值的节点步骤层叠切割4对堆进行层叠切割操作,以保持堆的平衡层叠切割操作会断开一些节点与其父节点的连接,并将这些节点添加到根列表中优先队列的时间复杂度分析实现方式插入删除最小元素查找最小元素数组O1On On堆Olog nOlog nO1二项式堆Olog nOlog nO1斐波那契堆平摊平摊O1Olog nO1不同的优先队列实现方式具有不同的时间复杂度在选择实现方式时,需要根据具体的应用场景和性能要求进行权衡例如,如果需要频繁插入和删除元素,则堆或斐波那契堆是更好的选择优先队列的空间复杂度分析数组堆二项式堆斐波那契堆使用数组实现优先队列的空间使用堆实现优先队列的空间复使用二项式堆实现优先队列的使用斐波那契堆实现优先队列复杂度为,其中是队列杂度为,其中是队列中空间复杂度为,其中是的空间复杂度为,其中On nOn nOn nOn n中元素的个数需要存储所有元素的个数需要存储所有元队列中元素的个数需要存储是队列中元素的个数需要存元素素所有元素和维护二项式树的结储所有元素和维护复杂的指针构结构不同的优先队列实现方式的空间复杂度都是,因为都需要存储所有元素然而,斐波那契堆需要维护大量的指针和标记,因此实际使On用的空间可能会更多优先队列的实现细节数组实现1使用数组实现优先队列时,需要注意数组的动态扩容当数组空间不足时,需要重新分配更大的数组空间,并将所有元素复制到新数组中这会带来一定的性能开销堆实现2使用堆实现优先队列时,需要注意堆的调整过程向上调整和向下调整都需要进行比较和交换操作,需要仔细优化,以提高性能二项式堆和斐波那契堆3使用二项式堆和斐波那契堆实现优先队列时,需要注意维护复杂的指针结构指针操作容易出错,需要仔细调试通用技巧4选择合适的键类型键类型应该具有可比性,以便进行优先级判断使用高效的比较函数比较函数是优先队列性能的关键避免频繁的内存分配和释放内存分配和释放会带来性能开销使用缓存缓存可以提高访问速度使用并行处理并行处理可以提高处理速度优先队列的应用实例1任务调度系统实现步骤一个任务调度系统需要根据任务的优先级来调度任务的执行可将所有任务放入优先队列中循环从优先队列中取出优先
1.
2.以使用优先队列来实现任务调度系统,其中任务的优先级作为键,级最高的任务执行任务如果任务执行完毕,则从优先
3.
4.任务本身作为值队列中删除该任务如果任务未执行完毕,则将该任务重新放
5.入优先队列中,并更新其优先级优先队列的应用实例2算法实现步骤Dijkstra算法用于求解单源最短路径问题可以使用优先队列来将所有节点放入优先队列中,初始距离为无穷大,源节点的距Dijkstra
1.实现算法,其中节点的距离作为键,节点本身作为值离为循环从优先队列中取出距离最小的节点更新该Dijkstra
02.
3.节点的邻居节点的距离如果邻居节点的距离被更新,则将邻
4.居节点重新放入优先队列中优先队列的应用实例3霍夫曼编码实现步骤霍夫曼编码是一种用于数据压缩的算法可以使用优先队列来实将所有字符放入优先队列中循环从优先队列中取出频率
1.
2.现霍夫曼编码,其中字符的频率作为键,字符本身作为值最小的两个字符将这两个字符合并成一个新的节点,并将新
3.的节点的频率设置为这两个字符的频率之和将新的节点重新
4.放入优先队列中重复步骤,直到优先队列中只剩下一个
5.2-4节点该节点就是霍夫曼树的根节点
6.优先队列的应用实例4模拟退火算法实现步骤模拟退火算法是一种用于求解优化问题的算法可以使用优先队初始化一个状态,并将其放入优先队列中循环从优先队
1.
2.列来实现模拟退火算法,其中状态的能量作为键,状态本身作为列中取出能量最低的状态生成该状态的邻居状态根据
3.
4.值准则,决定是否接受邻居状态如果接受邻居状Metropolis
5.态,则将邻居状态放入优先队列中优先队列的应用实例5搜索算法实现步骤A*搜索算法是一种用于求解路径规划问题的算法可以使用优先将起点放入优先队列中循环从优先队列中取出值最小的A*
1.
2.f队列来实现搜索算法,其中节点的值作为键,节点本身作为节点如果该节点是终点,则返回路径生成该节点的邻A*f
3.
4.值值是节点的值和值之和,值是从起点到该节点的实际代居节点计算邻居节点的值和值,并将其值放入优先队列f g h g
5.ghf价,值是从该节点到终点的估计代价中h优先队列的局限性空间复杂度1优先队列需要存储所有元素,因此空间复杂度为当数据量很大时,可能会占用On大量的内存空间特别是对于斐波那契堆这种需要额外指针维护的数据结构,空间开销更大实现复杂2一些高级的优先队列实现,如二项式堆和斐波那契堆,实现起来非常复杂,需要维护复杂的指针结构容易出错,调试困难不稳定性3优先队列的出队顺序只与优先级有关,与元素的插入顺序无关这导致优先队列不具有稳定性,即相同优先级的元素出队顺序是不确定的适用范围4优先队列适用于需要频繁插入和删除优先级最高(或最低)元素的场景对于其他类型的操作,如查找、修改等,效率较低某些高级实现可能存在常数因子较大的问题,在数据量较小时性能可能不如简单实现优先队列的发展方向更高效的实现研究更高效的优先队列实现,降低时间复杂度和空间复杂度例如,开发新的堆结构,优化插入、删除等操作并行化将优先队列算法并行化,利用多核处理器和分布式系统提高处理速度例如,开发并行堆结构,实现并行插入、删除等操作自适应性开发自适应的优先队列实现,根据数据量和操作类型自动选择最佳的实现方式例如,根据数据量选择使用数组、堆或斐波那契堆与其他数据结构的结合将优先队列与其他数据结构结合,实现更复杂的功能例如,将优先队列与哈希表结合,实现快速查找和删除操作优先队列的研究热点新型堆结构1研究新型堆结构,如配对堆、等,以提高优先队列的性能rank-pairing heap这些新型堆结构具有更优的时间复杂度和空间复杂度并行优先队列2研究并行优先队列算法,利用多核处理器和分布式系统提高处理速度例如,开发并行堆结构,实现并行插入、删除等操作使用加速GPU自适应优先队列3研究自适应优先队列算法,根据数据量和操作类型自动选择最佳的实现方式例如,根据数据量选择使用数组、堆或斐波那契堆根据硬件环境优化算法持久化优先队列4研究持久化优先队列,实现对优先队列历史状态的访问和修改这在一些特定的应用场景中非常有用,例如版本控制、数据恢复等优先队列的未来趋势与的结合AI将优先队列与人工智能算法结合,实现更智能的任务调度、路径规划等功能例如,使用深度学习算法预测任务的优先级,从而更有效地调度任务在云计算中的应用在云计算环境中应用优先队列,实现弹性伸缩、负载均衡等功能例如,使用优先队列调度虚拟机,确保高优先级虚拟机优先获得资源在物联网中的应用在物联网环境中应用优先队列,实现实时数据处理、事件驱动等功能例如,使用优先队列处理传感器数据,及时响应紧急事件在金融领域的应用在金融领域中应用优先队列,实现高频交易、风险控制等功能例如,使用优先队列处理交易请求,确保高优先级交易优先执行相关算法问题练习1题目提示给定一个包含个整数的数组,找可以使用优先队列(最小堆)来n到第个最大的元素解决该问题首先,将数组中的k前个元素放入优先队列中然后,k遍历数组中的剩余元素,如果当前元素大于优先队列的堆顶元素,则将堆顶元素删除,并将当前元素放入优先队列中最后,优先队列的堆顶元素就是第个最大的k元素难度中等相关算法问题练习2题目提示给定一个包含个整数的数组,找可以使用优先队列(最大堆)来n到前个最小的元素解决该问题首先,将数组中的k前个元素放入优先队列中然后,k遍历数组中的剩余元素,如果当前元素小于优先队列的堆顶元素,则将堆顶元素删除,并将当前元素放入优先队列中最后,优先队列中的所有元素就是前个最小k的元素难度中等相关算法问题练习3题目提示给定一个包含个字符串的数组,可以使用哈希表来统计每个字符n找到最频繁的个字符串串的频率然后,可以使用优先k队列(最小堆)来找到最频繁的k个字符串首先,将所有字符串和其频率放入优先队列中然后,从优先队列中取出前个元素,这k些元素就是最频繁的个字符串k难度中等相关算法问题练习4题目提示实现一个缓存可以使用哈希表和双向链表来实现LRU缓存哈希表用于快速查找缓存LRU中的元素,双向链表用于维护缓存中元素的访问顺序可以使用优先队列(最大堆)来维护缓存中元素的访问顺序每次访问一个元素时,将该元素的优先级设置为当前时间戳,并将该元素放入优先队列中当缓存已满时,从优先队列中删除优先级最低的元素,即最近最少使用的元素难度困难相关算法问题练习5题目提示给定一个包含个任务的数组,每个可以使用贪心算法和优先队列来解决n任务都有一个截止时间和奖励如何该问题首先,按照截止时间对任务安排任务,使得获得的奖励最大?进行排序然后,依次遍历任务,如果当前任务可以在其截止时间之前完成,则将该任务放入优先队列(最大堆)中优先队列中的任务按照奖励进行排序每次从优先队列中取出奖励最高的任务,并将其安排在截止时间之前完成如果当前任务无法在其截止时间之前完成,则跳过该任务难度困难相关算法问题练习6题目提示难度合并个排序链表,返回合并后的排序使用优先队列来解决该问题维护一个中等k链表请分析和描述算法的复杂度大小为的最小堆,堆中存储每个链表k的头节点每次从堆中取出最小的节点,将其添加到结果链表中,并将该节点的下一个节点插入堆中堆的维护保证了每次取出的节点都是当前所有链表中最小的节点相关算法问题练习7题目提示设计一个找到数据流中第大元使用最小堆来维护当前数据流中k素的类()注意是排序后最大的个元素每次添加新元class k的第个最大元素,不是数组中素时,如果堆的大小小于,则k k第个不同的元素直接插入堆中否则,如果新元k素大于堆顶元素,则将堆顶元素删除,并将新元素插入堆中堆的维护保证了堆中始终存储数据流中最大的个元素,且堆顶元k素为第大元素k难度简单相关算法问题练习8题目提示假设有打乱顺序的一群人站成一首先按照身高降序排序,相同身个队列每个人由一个整数对高按照值升序排序然后,遍k表示,其中是这个人的历排序后的人,按照值插入队h,k hk身高,是排在该人前面且身高列由于身高降序排序,插入位k大于或等于的人数编写一个置前面的人身高一定大于或等于h算法来重建队列当前人的身高,满足题意难度中等相关算法问题练习9题目提示给你一个数组,表示这是一个经典的最小圆覆盖问题,points2D平面上的一些点,其中可以使用随机增量法或者基于圆points[i]求出该平面上所有点心迭代的算法解决具体方法涉=[xi,yi]的最小面积的圆形覆盖其中所及到几何知识,可以通过查阅相有点的坐标是唯一的如果最小关资料了解覆盖圆的半径大于给定的阈值则返回空题目保证结果的圆的半径是有限的难度困难相关算法问题练习10题目提示给定一个整数数组和一个使用滑动窗口来解决该问题维nums整数,请你返回子数组内所有护一个滑动窗口,使得窗口内所k元素的乘积小于的连续子数组有元素的乘积小于每次移动k k的个数右指针,将新元素加入窗口,并更新窗口内的乘积如果窗口内的乘积大于等于,则移动左指k针,缩小窗口,直到窗口内的乘积小于窗口的大小即为以当k前右指针为结尾的满足条件的子数组的个数难度中等总结回顾优先队列的概念1优先队列是一种特殊的队列,其中每个元素都关联一个优先级与普通队列的先进先出()原则不同,优先队列根据元素的优先级决定其出队顺序FIFO优先队列的实现2优先队列可以使用数组、堆、二项式堆、斐波那契堆等数据结构实现不同的实现方式具有不同的时间复杂度和空间复杂度优先队列的应用3优先队列广泛应用于任务调度、事件驱动模拟、数据压缩、图算法等领域例如,算法、霍夫曼编码等Dijkstra优先队列的局限性4优先队列具有空间复杂度高、实现复杂、不稳定性等局限性在选择使用优先队列时,需要根据具体的应用场景和性能要求进行权衡参考文献《算法导论》•《数据结构与算法分析》•《算法设计与分析基础》•维基百科优先队列•相关博客和论文•。
个人认证
优秀文档
获得点赞 0