基於雙佇列實現huffman樹

2021-06-18 19:04:09 字數 748 閱讀 3669

今天數算課講huffman樹,是基於堆實現的,突然想起以前實現過基於雙佇列的huffman樹,做個回顧。

首先將n個元素從小到大排序,基於比較的排序都是nlogn的複雜度,這裡可以考慮用計數排序(即桶排序)或者基數排序嘗試優化到n試試。

然後我們獲得了乙個有序佇列我們把它放在a佇列中,然後再找乙個空的b佇列。

然後從a中或者b中找出兩個最小的元素,累加放入b佇列的隊尾加入。不難發現b佇列也是遞增的。這樣模擬每次取最小的兩個。

仔細一想,原先需用插入堆中,動態詢問最小值的問題,被我們用雙佇列取代了,之所以能用雙佇列實現,

因為這個問題特殊在它每次產生的新的數是由兩個最小的數產生的,這樣使得產生的值都是遞增的。因此才可以用雙佇列去優化它。

// 雙佇列實現huffman樹

#include #include #include #include #include #include using namespace std;

const int maxn = 100+5;

int test,n,a[maxn];

queueqa,qb;

int get()

if (qa.empty())

if (qa.front() < qb.front()) else

return t;

}int main()

cout << sum << endl;

} return 0;

}

Huffman樹的實現

huffmantree.h inte ce for the huffmantree class.if defined afx huffmantree h e2fe6c12 c0a9 4483 af1b 9623f1fd0ef8 included define afx huffmantree h e2...

Huffman樹與MinHeap實現

ifndef min heap define min heap define max size 256 template class minheap private int left int curr int right int curr int parent int curr t a max si...

Huffman樹編碼 DFS實現

通過寫這個編碼和huffman樹的構建,讓我對huffman tree 有了更深的理解 1 首先huffman是經過n 1次迭代之後生成的樹,所以如果開始的節點有n個的話,那麼生成之後的的樹的節點個數是2 n 1 2 編碼的話可以用dfs處理 3 樹的節點新加了乙個parents值,讓我學到了一種新...