1. 程式人生 > >Python利用heapq實現一個優先順序佇列

Python利用heapq實現一個優先順序佇列

實現一個優先順序佇列,每次pop的元素要是優先順序高的元素,由於heapq.heapify(list)預設構建一個小頂堆,因此要將priority變為相反數再push,程式碼如下:

import heapq
class PriorityQueue(object):
    """實現一個優先順序佇列,每次pop優先順序最高的元素"""
    def __init__(self):
        self._queue = []
        self._index = 0
    def push(self,item,priority):
        heapq.heappush(self._queue,(-priority,self._index,item))#將priority和index結合使用,在priority相同的時候比較index,pop先進入佇列的元素
self._index += 1 def pop(self): return heapq.heappop(self._queue)[-1] if __name__ == '__main__': pqueue = PriorityQueue() pqueue.push('d',4) pqueue.push('f',3) pqueue.push('a',6) pqueue.push('s',2) print(pqueue.pop()) print(pqueue.pop()) print(pqueue.pop())

執行結果

相關推薦

Python利用heapq實現一個優先順序佇列

實現一個優先順序佇列,每次pop的元素要是優先順序高的元素,由於heapq.heapify(list)預設構建一個小頂堆,因此要將priority變為相反數再push,程式碼如下: import he

C++利用模板實現一個佇列

開頭總結:.利用模板類實現了一個佇列,利用模板的好處是提供泛型程式設計,在儲存資料的時候會適應不同型別的資料,減少了程式碼的書寫,簡化了程式的結構。#include <iostream>

Python 利用socket 實現 ssh 跳轉

socket python squid 1.場景描述:主機A主機B主機C10.13.170.76172.28.117.156(squid)10.95.113.131 主機A---->主機B(80)--->主機C(22), A通過B的80訪問主機C131 2.Python代碼;im

Python-通過socket實現一個小型的端口檢測工具

socket 結果 soc png cep light true python bsp 實驗機器IP:192.168.220.139,端口開放情況 代碼 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import

WPF和Expression Blend開發實例:充分利用Blend實現一個探照燈的效果

scree 時機 調整 位置 shift 矩形 同時 效果 最終 原文:WPF和Expression Blend開發實例:充分利用Blend實現一個探照燈的效果本篇文章閱讀的基礎是在讀者對於WPF有一定的了解並且有WPF相關的編碼經驗,對於Blend的界面布局有基礎的知識.

利用AOP實現一個簡單的快取儲存、清除的工具

基本要求:利用aop實現一個簡單的快取儲存、清除的工具,從實際使用上來說,切面應該在provider層。在service層方法呼叫和資料庫查詢之間生效。為了簡化過程,不要求與資料庫互動,資料可以隨機生成,不要求使用redis等中介軟體,可以直接快取到記憶體中。 程式碼實現非常的基礎,能夠很好

使用python的Flask實現一個RESTful API伺服器端 使用python的Flask實現一個RESTful API伺服器端[翻譯]

使用python的Flask實現一個RESTful API伺服器端[翻譯] 最近這些年,REST已經成為web services和APIs的標準架構,很多APP的架構基本上是使用RESTful的形式了。 本文將會使用python的Flask框架輕鬆實現一個RESTful的服務。 R

python 語法:實現棧與佇列

學資料結構的時候,用c語言實現棧與佇列可不容易。用python只要幾行程式碼就可以了,基於列表實現棧,基於雙端列表實現佇列。 棧(後進先出) stack = [1, 2, 3, 4] stack.append(5) # 入棧 stack.pop() # 出棧 佇列(先進先

Python用列表實現棧,佇列(二)

用列表實現佇列        佇列和棧實現的功能差不多,無非是入佇列,出佇列,佇列長度等等。其中,入佇列可以用列表的append()來實現,出佇列可以使用pop(0)來實現。由於這個實現方法比較簡單,因此它也是最低效的。append方法入佇列和棧實

Python用列表實現棧,佇列(一)

用列表實現棧 棧方法 列表實現 S.push() L.append() S.pop() L.pop() S.top()

使用Python科學計算實現一個簡單的推薦系統

許多人把推薦系統視為一個神祕的存在,他們覺得推薦系統似乎知道我們的想法是什麼。Netflix向我們推薦電影,還有亞馬遜向我們推薦該買什麼樣的商品。推薦系統從早期發展到現在,已經得到了很大的改進和完善,以不斷提高使用者體驗。儘管推薦系統中許多都是非常複雜的系統,但其背後的基本思想依然十分簡單。

.NET Core微服務之路:利用DotNetty實現一個簡單的通訊過程

  上一篇我們已經全面的介紹過《基於gRPC服務發現與服務治理的方案》,我們先複習一下RPC的呼叫過程(筆者會在這一節的幾篇文章中反覆的強調這個過程呼叫方案),看下圖

python利用paramiko實現ssh連線及遠端執行命令

python3.6, windows下 1,安裝paramiko模組 依賴cryptography:使用命令easy_install安裝該模組時,如果報錯“...microsoft visual c++ 14.0 is required.”, 可以下載.whl檔案,使用命令pip instal

python-利用生成器實現併發

1.建立一個生成器: next和send都可以使生成器物件輸出。 區別在send可以傳值。 def create_num(all_num): print('-----1-------') a, b = 0, 1 current_num = 0 while

Python利用scapy實現ARP欺騙

一、實驗原理。         本次用程式碼實現的是ARP閘道器欺騙,通過傳送錯誤的閘道器對映關係導致區域網內其他主機無法正常路由。使用scapy中scapy.all模組的ARP、sendp、Ether等函式完成包的封裝與傳

python練習:實現一個整數數組裡面兩個數之和為183的所有整數對

1 l1 = [183,0,1,2,-184,367] 2 3 num = [] 4 5 for i in range (0,len(l1)): 6 7 for l in range (i+1,len(l1)): 8 9 if l1[i]+l1[l]==

基於雙端堆實現優先順序佇列(3):外觀

   本文講述雙端堆的5個公開泛型操作演算法:make_dheap(原位構造雙端堆)、push_dheap(插入元素)、pop_max_dheap(刪除最大元素)、pop_min_dheap(刪除最小元素),is_dheap(堆驗證),每個演算法都提供<小於運算子和仿函式比較2個版本,要注意

基於雙端堆實現優先順序佇列(1):原理

前言    眾所周知,stl中的優先順序佇列是基於最大堆實現的,能夠在對數時間內插入元素和獲取優先順序最高的元素,但如果要求在對數時間內還能獲取優先順序最低的元素,而不只是獲取優先順序最高的元素,該怎麼實現呢?可以用最大堆-最小堆或雙端堆資料結構來實現,最大堆-最小堆和雙端堆都是支援雙端優先佇列

基於雙端堆實現優先順序佇列(2):內幕

   在《基於雙端堆實現的優先順序佇列(1):原理》一文中講述了雙端堆的相關原理,本文則詳細講述具體的內部實現,便於區分,內部函式名稱都以雙下劃線作為字首,在這裡,有幾個關鍵問題需要說明    1)怎麼求一個結點的對稱結點:如果完全二叉樹根結點從索引1開始但不儲存元素,那麼最小堆根結點則在索引2

使用python的Flask實現一個簡單RESTful API伺服器端

找了一篇教程學習了一下,為了加深印象照著寫了一遍存下來,原文連結如下:傳送門 REST的六個特性 Client-Server:伺服器端與客戶端分離。 Stateless(無狀態):每次客戶端請求必需包含完整的資訊,換句話說,每一次請求都是獨立的。 Ca