筆試整理 六

2021-08-10 08:19:24 字數 1212 閱讀 2857

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 ...