1.哈夫曼樹(最優二叉樹)
給定n個權值作為n個
葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹(huffman tree)。哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。
2.基本術語編輯
哈夫曼樹(霍夫曼樹)又稱為最優樹.
1、路徑和路徑長度
在一棵樹中,從乙個結點往下可以達到的孩子或孫子結點之間的通路,稱為路徑。通路中分支的數目稱為路徑長度。若規定根結點的層數為1,則從根結點到第l層結點的路徑長度為l-1。
2、結點的權及帶權路徑長度
若將樹中結點賦給乙個有著某種含義的數值,則這個數值稱為該結點的權。結點的帶權路徑長度為:從根結點到該結點之間的路徑長度與該結點的權的乘積。
3、樹的帶權路徑長度
樹的帶權路徑長度規定為所有葉子結點的帶權路徑長度之和,記為wpl。
4,、哈夫曼樹構造
假設有n個權值,則構造出的哈夫曼樹有n個葉子結點。 n個權值分別設為 w1、w2、…、wn,則哈夫曼樹的構造規則為:
(1) 將w1、w2、…,wn看成是有n 棵樹的森林(每棵樹僅有乙個結點);
(2) 在森林中選出兩個根結點的權值最小的樹合併,作為一棵新樹的左、右子樹,且新樹的根結點權值為其左、右子樹根結點權值之和;
(3)從森林中刪除選取的兩棵樹,並將新樹加入森林;
(4)重複(2)、(3)步,直到森林中只剩一棵樹為止,該樹即為所求得的哈夫曼樹
下面**由c++/c 等實現的哈夫曼樹**:
5.二叉樹的遍歷:
前序:根左右
中序:左根右
後序:左右根
6.鍊錶刪除
typedef int linkdata;
typedef struct _node
node,*head;
int delete_data(node* h, linkdata data)
if (tmp->next == null)
return false;
node *p = tmp->next;
tmp->next = p->next;
free(p);
return true;}
7.鍊錶逆序
int reverse_list(node *h)
h->next->next = null;
h->next = pre;
return true;}
筆試整理四
1.關鍵字const作用 1.1const 用來定義唯讀變數 定義時,const可以放在型別說明符前或者後面 int const i 2 const int i 2 1.2定義或說明乙個唯讀陣列 int const a 5 或 const int a 5 1.3 const 修飾指標 先忽略型別名 ...
筆試題整理
n副撲克,張數為m,大小為1 m,每幅撲克抽一張,求和恰好為k的組合數,結果對10e9 7取餘數。思路 動態規劃。和為i,j副撲克,dp i j dp i 1 j 1 dp i m j 1 此處需要判斷 i m 0 初始化,j 1,i m,dp i j 1 i j,dp i j 1,後面的情況不可能...
筆試面試 經典筆試題整理
以下內容全部整理自網路。把整數關鍵碼k雜湊到n個槽列表,最好的雜湊函式是 h k k rand n mod n,rand n 返回0到n 1的整數 初始資料集的排列順序對演算法的效能無影響的是 堆排序 堆排序 最優時間複雜度o nlogn 最差時間複雜度o nlogn 平均時間複雜度o nlogn ...