国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

基礎練習 Huffuman樹

2019-11-08 02:46:03
字體:
來源:轉載
供稿:網友

問題描述  Huffman樹在編碼中有著廣泛的應用。在這里,我們只關心Huffman樹的構造過程。  給出一列數{pi}={p0, p1, …, pn-1},用這列數構造Huffman樹的過程如下:  1. 找到{pi}中最小的兩個數,設為pa和pb,將pa和pb從{pi}中刪除掉,然后將它們的和加入到{pi}中。這個過程的費用記為pa +pb?! ?. 重復步驟1,直到{pi}中只剩下一個數?! ≡谏厦娴牟僮鬟^程中,把所有的費用相加,就得到了構造Huffman樹的總費用。  本題任務:對于給定的一個數列,現在請你求出用該數列構造Huffman樹的總費用。  例如,對于數列{pi}={5, 3, 8, 2, 9},Huffman樹的構造過程如下:  1. 找到{5, 3, 8, 2, 9}中最小的兩個數,分別是2和3,從{pi}中刪除它們并將和5加入,得到{5, 8, 9, 5},費用為5?! ?. 找到{5, 8, 9, 5}中最小的兩個數,分別是5和5,從{pi}中刪除它們并將和10加入,得到{8, 9, 10},費用為10。  3. 找到{8, 9, 10}中最小的兩個數,分別是8和9,從{pi}中刪除它們并將和17加入,得到{10, 17},費用為17。  4. 找到{10, 17}中最小的兩個數,分別是10和17,從{pi}中刪除它們并將和27加入,得到{27},費用為27?! ?. 現在,數列中只剩下一個數27,構造過程結束,總費用為5+10+17+27=59。輸入格式  輸入的第一行包含一個正整數n(n<=100)?! 〗酉聛硎莕個正整數,表示p0, p1, …, pn-1,每個數不超過1000。輸出格式  輸出用這些數構造Huffman樹的總費用。樣例輸入55 3 8 2 9樣例輸出59

解答代碼

#include<iostream>#include<string>#include<cstring>#include<set>#include<algorithm>using namespace std;#define N 1024int main(){	int i,j,n,temp=0,data;	multiset<long long> s;	multiset<long long>::iterator pos;	s.clear();	cin>>n;	for(i=0;i<n;i++)	{		cin>>data;		s.insert(data);	}	long long result=0;	if(n>1)	{		while(true)		{			if(s.size()<2)				break;			pos=s.begin();			int a=(*pos);			s.erase(pos);			pos=s.begin();			int b=(*pos);			s.erase(pos);			result+=(a+b);			s.insert(a+b);				}	}	else	{		pos=s.begin();		result+=(*pos);	}	cout<<result<<endl;	return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 白水县| 白城市| 泸州市| 乌恰县| 丽水市| 刚察县| 泗洪县| 萨嘎县| 平昌县| 庄河市| 通化市| 独山县| 阜阳市| 政和县| 宁津县| 定陶县| 黄浦区| 正宁县| 河源市| 玉山县| 堆龙德庆县| 六安市| 綦江县| 铁岭市| 芦山县| 丰原市| 锡林浩特市| 绥芬河市| 石首市| 全州县| 陕西省| 旺苍县| 汤阴县| 无锡市| 裕民县| 寿光市| 禹州市| 阳朔县| 务川| 汉中市| 碌曲县|