優先順序佇列概述

2021-09-27 08:06:00 字數 767 閱讀 9714

優先佇列是一種用來維護一組元素構成的集合s的資料結構,其中每個元素都有乙個鍵值key,元素之間的比較都是通過key來比較。優先佇列包括最大優先佇列和最小優先佇列。

基於最小優先佇列進行討論,顧名思義:出隊,隊頭元素是最小的;入隊,直接在隊尾插入就可以了。

優先順序佇列依舊是佇列,佇列具有的屬性和操作,優先順序佇列也都是具有的。真正影響時間複雜度的就是入隊操作和出隊操作。

1、使用無序陣列,那麼每一次插入的時候直接在陣列末尾插入即可,入隊時間複雜度為o(1),如果要保證隊頭元素是最小的,必須先進行查詢,時間複雜度是o(n),然後將最小值和隊頭元素進行交換後,將隊頭元素出隊,出隊的時間複雜度是o(n)。

2、使用有序陣列,每一次插入通過堆排序,將元素放在合適的位置(注意,入隊的時候還是在隊尾插入,調整是在入隊完成之後),時間複雜度是log2(n)。如果想讓最小值從隊首出隊,由於元素已經有序,隊首元素本身就是最小值。注意和無序陣列作比較,無序陣列出隊的時候並沒***一開始隊頭元素就是最小的。

經過分析,利用有序陣列並且採用堆排序來構建優先順序佇列。

不管是無序陣列實現還是有序陣列實現,都只需要借用乙個臨時空間。故空間複雜度都是o(1)。

public static void shiftupsmall(int array,int index)else

}}

佇列 優先順序佇列

優先順序佇列的隊尾是不需要改變的,永遠在低下標處。當佇列增加資料時,隊頭的位置就是資料項的大小減去1.public class priorityq 插入 public void insert long item else quearray j 1 item nitem 刪除 public long ...

優先順序佇列

分為最小優先順序佇列和最大優先順序佇列。優先順序佇列是一種用來維護一組元素構成的集合s的資料結構,這一組元素都有乙個關鍵字key,乙個最大優先順序佇列支援的操作 insert s,x 把x插入到集合s中 maxmum s 返回s中最大元素 extra max s 去掉s中最大關鍵字並返回該最大關鍵子...

優先順序佇列

1 include stdafx.h 2 include3 4 using namespace std 5 6 define max heap len 107 int heap max heap len 8 int heap size 0 the number of elements in heap...