优先队列
作者:互联网
首先了解什么是优先队列
作为缓存结构,优先队列与栈和队列类似,可以将数据元素保存其中,可以访问和弹出。优先队列的特点是存入其中的内向数据都另外附有一个数值,表示这个项的邮箱成都,称其为优先级。每次访问的都会是优先级最高的元素。如果不止一个元素优先级最高,优先队列将推出他们中的一个,具体哪个将由每部实现确定
如果优先队列要同时保持FIFO的性质,那只能做出较低的效率,如果只要求每次保证访问的是优先元素最高的,不要求最早进入优先队列的元素,那么就存在效率更高的实现
优先队列的世界应用:
各项工作的计划开始时间
一个大项目中各种工作人物的紧急程度
银行客户的诚信评估
基于线性表的事项:
考虑:1、在存入数据时,保证表中元素始终按优先书序排列,任何时候都可以直接取到当时在表里最优先的元素。采用有组织的元素存放方式,存入元素的操作比较麻烦,效率可能较低,但访问和弹出是比较方便
2、存入数据是采用最简单的方式,需要时通过检索找到最优先的元素,这种方式,存入的效率高,单取用访问比较麻烦。如果需要多次访问统一个元素单不弹出,就应该采用其他技术,避免重复检索
基于list实现优先队列:这里以较小的作为较优先
class PriQueue: def __init__(self, elist=[]): self._elems = elist self._elems.sort(reverse=True) def insert(self, e): lenth = len(self._elems) - 1 while lenth 》= 0: if e < self._elems[lenth]: lenth = lenth -1 else: break self._elems.index(lenth + 1, e) def is_empty(self): return not self._elems def dequeue(self): if self._elems is None: return ValuerError return self._elems.pop()
对连续表实现的分析:
在以上各项操作中插入元素的时间复杂度是O(n),其他的都是O(1)。注意:急事插入式标点存储区满,需要换一块存储,操作效率的复杂度量级也没有改变,任然是O(n);如果使用的是第二种方案则,插入队列是时间复杂度是O(1),其余的操作是O(n)
实际上也可以用链表来实现优先队列,但是复杂情况和连续表类似。显然采用线性表技术实现的优先队列,无论用哪种方式,在插入元素与去除元素率的操作中中总有一种是具有线性复杂度的操作。这个有点蛋疼。。。。
面对这种情况我们应该怎么解决呢????????
标签:优先,队列,self,元素,elems,._ 来源: https://www.cnblogs.com/bianjing/p/10413072.html