首页 > 编程知识 正文

高性能优先级队列,优先级一般分为几级

时间:2023-05-04 13:31:34 阅读:30227 作者:4658

优先级队列抽象数据类型是一个包含高优先级元素的集合,可以插入任何元素或删除最高优先级元素。 当元素插入优先级队列中时,指定相关键以确定元素的优先级。 键值最小的元素将是下一个从队列中删除的元素。

另一方面,优先级队列抽象数据类型的实现在形式上通过一个key-value对来建模一格要素及其优先级。 在首选队列p中定义首选队列ADT以支持以下方法

p.add(k,v ) :将具有密钥k和值v的元组P.min ) :插入优先队列p,并返回优先队列p中的最小键值和元组(k,v ); 如果队列为空,则会发生错误P.remove_min () :从优先级队列p中删除具有最小键值的元组,并返回删除的元组。 如果队列为空,则会发生错误。 p.is _ empty (如果:优先级队列不包含元组,则返回Truelen:其中优先级队列中的元组数为2,并返回优先级队列实现的组合设计模式

使用绑定设计模式存储包含由键k和值v组成的键-值对的内部元组。 为了在所有优先级队列中实现这个概念。 _Item定义包含嵌套类的PriorityQueueBase类。 对于元组实例a和b,请参见, 基于密钥定义语法abclasspriorityqueuebase : ' ' abstractbaseclassforpriorityqueue ' ' class _ item 3360 ' ' lightweight composite v ) : self._ key=k self._ value=vdef _ _ lt _ (self, other ) : return self._ key other._ keydefis _ empty (3360 ' ' returntrueifthepriorityqueeuisempty.' ' retur rry==由于元组没有排序,因此必须相互检查所有元组才能找到键值最小的元组。 因此,定义非共享方法_find_min以返回键值最小的元组位置

classunsortedpriorityqueue (优先级查询库) : ' ' Amin-orientedpriorityqueueimplementedwithanunsortedlist.' ' ' non public utility ' ' returnpositionofitemwithminimumkey.' ' if self.is _ empty (raise empty )优先级队列最小mall ) whilewalkisnotnone : if walk.element (small.none 3360 if walk.element )。 3360 small=walk walk=self._ data.after (walk ) returnsmalldef _ init _ (self ) ) ) ) ) ) ) ) ) ist(def_len__(self ) 3360 ' ' returnthenumberofitemsinthepriorityqueue.' ' return len (self._ data ) defadd value ) : ()、addakey-valuepair.(,defmin )、self ) : )、returnbutdonotremove ) k, v ) tuplewithminimumkey ' ' p=self._ find _ min (item=p.element ) return ) item._key,item._ value (def remement )

首选队列仍然是位置列表,但列表中的元组的键值按降序排序。 3360 ' ' Amin-orientedpriorityqueuebase ',确保列表中的第一个元组是具有最小键值的元组classsortedpriorityqueueimplementedwintedwite 3360 ' ' createanewemptypriorityqueue.' ' self._ data=位置列表(def _ len _ _ ) ) 3360 ' ' returnthenumbersofitemsinthepriorityqueue.' ' return len (self._ data ) defadd ) self、key、value(3360 () value ) walk=self._ data.last (whilewalkisnotnoneandnewestwalk.element ) )。 3360 walk=self._ data.beforeifwalkisnone : self._ data.add _ first (newest ) else3360self._data.add_data ve ) k,v ) tuplewithminimumkey.' ' if self.is _ empty : rasie empty (priorityqueueisempty.' ) p=self._ data.ffata item._value ) defremove_min ) self ) :''removeandreturn ) k,v ) tuplewithminimumkey.' ' if self.is _ empty

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。