什麼是優先隊列?

前言

以前學習過隊列,所謂隊列就像咱們平時排的隊同樣,排成一排,先排隊的人先得到,先到先得。真實的世界不是這樣的,有的人要插隊,有的事情比較的緊急優先處理,生活中有不少這樣的例子告訴咱們並非說先到先得的,我說這樣的意思並非說咱們的社會很差,而是人們在經濟活動中天然而然產生的狀況。數組

現實生活中的優先隊列

舉一個栗子,好比你要去北京協和醫院看病,首先你的掛專家的號,但是這個專家的號你要排隊恐怕要等一年之久,固然病情也不容許這樣,不準的立刻治療,因而乎你找人託關係找到了黃牛,他有資源能夠立刻讓你掛到專家號,能夠你得出5000RMB,就這樣你經過黃牛掛到了這個專家的號。 數據結構

計算機世界中的優先隊列

上面咱們花了大段文字講了排隊這件事情,其實我今天談到話題就是數據結構中的優先隊列,聽起這個名字其實和隊列有點不同。普通隊列是先到先得,先進先出,而優先隊列出隊列和入隊的順序無關,和優先級有關,可能最後一個入隊的元素會最早出隊學習

優先隊列的實現

優先隊列從底層來講仍是一個隊列,和普通隊列在實現並無太多的差異,惟一差異比較大的可能就是入隊(enqueue) 和出隊(dequeue)不同,能夠直接使用之前用到的隊列接口,不同的地方就是在接口的實現上。好比出隊的元素不是入隊最先的元素,而是優先級最高的元素最早出隊cdn

優先隊列的底層實現方案

對於優先隊列的底層實現,可使用不一樣的數據結構,好比使用鏈表、數組這樣的線性結構,也可使用二叉樹這樣的樹型結構blog

方案 入隊 出隊(最大元素)
普通線性結構 O(1) O(n)
順序線性結構 O(n) O(1)
O(logn) O(logn)

從上面的圖中咱們能夠看到普通的線性結構、順序線性結構總有一個的時間複雜度是O(n),順序線性結構確實維護了一個有序的數據,取出最大元素複雜度在O(1),可是爲了維持這個循序不得不遍歷全部的元素來插入一個新的元素。 若是咱們採用堆來實現優先隊列,狀況會好不少,入隊出隊複雜度都在O(logn),即使在最差的是否複雜度也是O(logn)接口

總結

本身最近在學習數據結構,對數據結構應該怎麼學習不知道,一點點的敲代碼,碼字,寫文章,我以爲比我以前學了就忘恐怕要好一些,至少不會忘記的那麼快,還能夠整理一下思路,在學完這個課程後,能夠回過頭來複習一下,看看本身有沒有用心學習,學的怎麼樣。 一開始在寫的時候句子不免有些不通順的地方,我也在一點點的改進,爭取一節課一篇文章,把學習的過程記錄下來。 下篇文章將介紹使用實現的優先隊列隊列

相關文章
相關標籤/搜索