哈夫曼樹的構造

2021-08-17 02:02:17 字數 669 閱讀 5187

給定數列{ai}

哈夫曼數是一棵二叉樹,滿足數列中的所有的數都是它的葉節點,且每乙個葉節點的權值*它到根的距離之和最短。

將原數列看成乙個森林,每次挑出最小的兩個節點合併,直到只剩下乙個節點,就構造好了一顆哈夫曼樹。

(證明略~)

#include

#include

#include

using

namespace

std;

const

int maxn=2000005;

int n,tot,a[maxn],fa[maxn];

long

long ans;

struct dyt

};priority_queuehep;

inline

int read()

int dfs(int x)

int main()

while (hep.size()>1)

//for (int i=1;i<=n;i++) printf("%d\n",dfs(i));

for (int i=1;i<=n;i++) ans+=1ll*dfs(i)*a[i];

printf("%lld\n",ans);

return

0;}

構造哈夫曼樹 哈夫曼編碼

1.權值越大的節點,距離根越近 2.樹中沒有度為1的節點,這類樹叫正則 嚴格 二叉樹,樹的總節點 2 雙分支結點 1 單分支結點 雙分支結點 3.樹的帶權路勁 wpl 所有葉子結點的帶權長度路勁之和 長度最短。嗶哩嗶哩王卓老師的口訣 構造森林全是根,選用兩小選新樹,刪除兩小添新人,重複23剩單根 1...

哈夫曼樹構造 哈夫曼編碼

一 哈夫曼樹 p189 1.定義 帶權路徑長度 wpl 最小的二叉樹稱為哈夫曼樹 wpl 樹中所有葉子節點的帶權路徑長度之和 帶權路徑長度 從樹根到任意節點的路徑長度與該節點上權值的乘積 2.構造 1 將這n個節點分別作為n課僅含乙個結點的二叉樹,構成森林f 2 構造乙個新節點,從f中選取兩棵根節點...

哈夫曼樹構造

usr bin env python3 coding utf 8 created on fri jul 27 18 08 26 2018 author luogan 樹節點類構建 class treenode object def init self,data self.val data 0 sel...