位置: 编程技术 - 正文

Python实现优先级队列结构的方法详解(python优先级顺序)

编辑:rootadmin

推荐整理分享Python实现优先级队列结构的方法详解(python优先级顺序),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python and or not优先级,优先级排序python,python中%的优先级,python and or not优先级,python and or not优先级,python and or not优先级,python中的优先级,python优先级运算符,内容如对您有帮助,希望把文章链接给更多的朋友!

最简单的实现一个队列至少满足2个方法,put和get.借助最小堆来实现.这里按"值越大优先级越高"的顺序.

使用heapq模块来实现下面的类利用 heapq 模块实现了一个简单的优先级队列:

下面是它的使用方式:

仔细观察可以发现,第一个 pop() 操作返回优先级最高的元素。 另外注意到如果两个有着相同优先级的元素( foo 和 grok ),pop操作按照它们被插入到队列的顺序返回的。

函数 heapq.heappush() 和 heapq.heappop() 分别在队列 _queue 上插入和删除第一个元素, 并且队列_queue保证第一个元素拥有最小优先级(1.4节已经讨论过这个问题)。 heappop() 函数总是返回”最小的”的元素,这就是保证队列pop操作返回正确元素的关键。 另外,由于push和pop操作时间复杂度为O(log N),其中N是堆的大小,因此就算是N很大的时候它们运行速度也依旧很快。

在上面代码中,队列包含了一个 (-priority, index, item) 的元组。 优先级为负数的目的是使得元素按照优先级从高到低排序。 这个跟普通的按优先级从低到高排序的堆排序恰巧相反。

index 变量的作用是保证同等优先级元素的正确排序。 通过保存一个不断增加的 index 下标变量,可以确保元素按照它们插入的顺序排序。 而且, index 变量也在相同优先级元素比较的时候起到重要作用。

为了阐明这些,先假定Item实例是不支持排序的:

如果你使用元组 (priority, item) ,只要两个元素的优先级不同就能比较。 但是如果两个元素优先级一样的话,那么比较操作就会跟之前一样出错:

Python实现优先级队列结构的方法详解(python优先级顺序)

通过引入另外的 index 变量组成三元组 (priority, index, item) ,就能很好的避免上面的错误, 因为不可能有两个元素有相同的 index 值。Python在做元组比较时候,如果前面的比较以及可以确定结果了, 后面的比较操作就不会发生了:

如果你想在多个线程中使用同一个队列,那么你需要增加适当的锁和信号量机制。 可以查看.3小节的例子演示是怎样做的。

深入思考函数 heapq.heappush() 和 heapq.heappop() 分别在队列 _queue 上插入和删除第一个元素, 并且队列_queue保证第一个元素拥有最小优先级(1.4节已经讨论过这个问题)。 heappop() 函数总是返回”最小的”的元素,这就是保证队列pop操作返回正确元素的关键。 另外,由于push和pop操作时间复杂度为O(log N),其中N是堆的大小,因此就算是N很大的时候它们运行速度也依旧很快。

在上面代码中,队列包含了一个 (-priority, index, item) 的元组。 优先级为负数的目的是使得元素按照优先级从高到低排序。 这个跟普通的按优先级从低到高排序的堆排序恰巧相反。

index 变量的作用是保证同等优先级元素的正确排序。 通过保存一个不断增加的 index 下标变量,可以确保元素按照它们插入的顺序排序。 而且, index 变量也在相同优先级元素比较的时候起到重要作用。

为了阐明这些,先假定Item实例是不支持排序的:

如果你使用元组 (priority, item) ,只要两个元素的优先级不同就能比较。 但是如果两个元素优先级一样的话,那么比较操作就会跟之前一样出错:

通过引入另外的 index 变量组成三元组 (priority, index, item) ,就能很好的避免上面的错误, 因为不可能有两个元素有相同的 index 值。Python在做元组比较时候,如果前面的比较以及可以确定结果了, 后面的比较操作就不会发生了:

如果你想在多个线程中使用同一个队列,那么你需要增加适当的锁和信号量机制。 可以查看.3小节的例子演示是怎样做的。

heapq 模块的官方文档有更详细的例子程序以及对于堆理论及其实现的详细说明。

详解Python中的__new__、__init__、__call__三个特殊方法 __new__:对象的创建,是一个静态方法,第一个参数是cls。(想想也是,不可能是self,对象还没创建,哪来的self)__init__:对象的初始化,是一个实例方法

实例解析Python中的__new__特殊方法 __new__方法是什么?如果将类比喻为工厂,那么__init__()方法则是该工厂的生产工人,__init__()方法接受的初始化参数则是生产所需原料,__init__()方法会按

Python的Django框架中使用SQLAlchemy操作数据库的教程 零、SQLAlchemy是什么?SQLAlchemy的官网上写着它的介绍文字:SQLAlchemyisthePythonSQLtoolkitandObjectRelationalMapperthatgivesapplicationdevelopersthefullpowerandflexibilityofSQL.SQLAlch

标签: python优先级顺序

本文链接地址:https://www.jiuchutong.com/biancheng/386940.html 转载请保留说明!

上一篇:KMP算法精解及其Python版的代码示例(kmp算法理解)

下一篇:详解Python中的__new__、__init__、__call__三个特殊方法(python:\n)

  • 什么公司需要缴纳印花税
  • 中外合资企业要交什么税
  • 中华人民共和国宪法
  • 网银发工资怎么增员的
  • 当期亏损如何计提所得税
  • 进项税额计入其他应付款是什么意思
  • 承租人与出租人签订了一份租赁合同,该设备
  • 应付票据保证金的会计分录怎么写
  • 固定资产不动产抵扣新政策
  • 多收账款怎么账务处理
  • 合伙企业可以弥补以前年度亏损吗
  • 清包工简易征收文件
  • 租的厂房再转租怎么开票抵扣
  • 新公司有减免税政策吗?
  • 公司用上年多缴的社保
  • 公司开出的发票
  • 怎么查询发票记录
  • 付款时收到应收票据会计分录怎么做?
  • 资产减值损失填在资产负债表哪里
  • 跨年度残保金退回做什么
  • 降低增值税税率对消费者的影响有哪些
  • "专项储备"在合并报表层面如何处理?
  • 固定资产平均年限法公式
  • 实收资本和资产的关系
  • 工资的结转
  • 注销公司如何清算
  • 两台mac怎么一起用
  • 贷款钱到账又被转出去
  • 公司准备上市到真正上市要多久
  • 哪些资产损失可以转回
  • wmiprvse.exe是什么程序
  • 材料外加工会计分录
  • 分红财务做账
  • 退休返聘人员是否享受工会福利
  • 数据 挖掘
  • magento后台无法登录解决办法的两种方法
  • 打造出ChatGPT的,是怎样一群人?
  • nodejs如何使用
  • elemental ui
  • 深入node.js技术栈
  • php类型约束用法有哪些
  • 帝国cms功能
  • 商业流通企业
  • 小企业发出存货成本的计量方法有
  • 认证系统维护费怎么算
  • 跨年发票两大原则
  • 广告费和业务宣传费
  • 收到政府补贴现金流
  • 社保金额不对到不了账
  • 固定资产折旧方法的选择
  • 会计错账的更正方法
  • 著作权使用费收费标准
  • 企业建账可以处于哪几个阶段
  • mysql5718解压版安装
  • Linux系统配置IP
  • putty ssh tunnel
  • windows系统中巧用系统中的文件查看有谁用过我们的电脑 查看方法介绍
  • win7 显示日期
  • win7系统安装ie11浏览器
  • win10预览版和正式版区别
  • windows8任务管理器在哪
  • win10天气组件
  • 使用jquery实现的项目
  • nodejs stdin
  • 利用用英文怎么翻译
  • 象棋软件编程
  • shell去掉\r
  • jquery示例
  • linux安装nodejs xz格式
  • jquery的点击事件怎么写
  • javascript刷新页面的几种方法
  • unityshader
  • javascriptz
  • 关于Colloder事件
  • js中遍历数组的方法
  • [置顶] [Android Studio 权威教程]最实用的快捷键
  • 成都税务企业号公众号
  • 供电代收电费
  • 小微企业契税政策
  • 国家税务局申报系统
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设