国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)“基于哈夫曼樹(shù)的數(shù)據(jù)壓縮算法”的實(shí)驗(yàn)報(bào)告

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)“基于哈夫曼樹(shù)的數(shù)據(jù)壓縮算法”的實(shí)驗(yàn)報(bào)告。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一個(gè)不知名大學(xué)生,江湖人稱(chēng)菜狗
original author: jacky Li
Email : 3435673055@qq.com
Last edited: 2022.11.20

數(shù)據(jù)結(jié)構(gòu)“基于哈夫曼樹(shù)的數(shù)據(jù)壓縮算法”的實(shí)驗(yàn)報(bào)告

目錄

數(shù)據(jù)結(jié)構(gòu)“基于哈夫曼樹(shù)的數(shù)據(jù)壓縮算法”的實(shí)驗(yàn)報(bào)告

一、實(shí)驗(yàn)?zāi)康?/p>

二、實(shí)驗(yàn)設(shè)備

三、實(shí)驗(yàn)內(nèi)容

1.【問(wèn)題描述】

2.【輸入要求】

3.【輸出要求】

4.【實(shí)驗(yàn)提示】

四、實(shí)驗(yàn)步驟

4.1

4.2編程和調(diào)試

五、實(shí)驗(yàn)結(jié)果

5.1程序完成后關(guān)鍵源碼及運(yùn)行結(jié)果截圖

六、實(shí)驗(yàn)總結(jié)

七、劃重點(diǎn)參考代碼


數(shù)據(jù)結(jié)構(gòu)“基于哈夫曼樹(shù)的數(shù)據(jù)壓縮算法”的實(shí)驗(yàn)報(bào)告

課程名稱(chēng):

數(shù)據(jù)結(jié)構(gòu)

項(xiàng)目名稱(chēng):

基于哈夫曼樹(shù)的數(shù)據(jù)壓縮算法

實(shí)驗(yàn)類(lèi)型:

驗(yàn)證性實(shí)驗(yàn)

一、實(shí)驗(yàn)?zāi)康?/h3>

1.掌握哈夫曼樹(shù)的構(gòu)造算法。

2.掌握哈夫曼編碼的構(gòu)造算法。

二、實(shí)驗(yàn)設(shè)備

裝有Dev C++的計(jì)算機(jī)一臺(tái)

三、實(shí)驗(yàn)內(nèi)容

結(jié)合在頭歌上已完成的實(shí)訓(xùn)任務(wù)進(jìn)行填寫(xiě)

1.【問(wèn)題描述】

輸入一串字符串,根據(jù)給定的字符串中字符出現(xiàn)的頻率建立相應(yīng)的哈夫曼樹(shù),構(gòu)造哈夫曼編碼表,在此基礎(chǔ)上可以對(duì)壓縮文件進(jìn)行壓縮(即編碼),同時(shí)可以對(duì)壓縮后的二進(jìn)制編碼文件進(jìn)行解壓(即譯碼)。

2.【輸入要求】

多組數(shù)據(jù),每組數(shù)據(jù)1行,為一個(gè)字符串(只考慮26個(gè)小寫(xiě)字母即可)。當(dāng)輸入字符串為“0”時(shí),輸入結(jié)束。

3.【輸出要求】

每組數(shù)據(jù)輸出2n+3行(n為輸入串中字符類(lèi)別的個(gè)數(shù))。第1行為統(tǒng)計(jì)出來(lái)的字符出現(xiàn)頻率(只輸出存在的字符,格式為:字符:頻度),每?jī)山M字符之間用一個(gè)空格分隔,字符按照ASCII碼從小到大的順序排列。第2行至第2n行為哈夫曼樹(shù)的存儲(chǔ)結(jié)構(gòu)的終態(tài)(如主教材139頁(yè)表5.2(b),一行當(dāng)中的數(shù)據(jù)用空格分隔)。第2n+1行為每個(gè)字符的哈夫曼編碼(只輸出存在的字符,格式為:字符:編碼),每?jī)山M字符之間用一個(gè)空格分隔,字符按照ASCII碼從小到大的順序排列。第2n+2行為編碼后的字符串,第2n+3行為解碼后的字符串(與輸入的字符串相同)。

4.【實(shí)驗(yàn)提示】

此實(shí)驗(yàn)內(nèi)容即要求實(shí)現(xiàn)主教材的案例5.1,具體實(shí)現(xiàn)可參考算法5.10和算法5.11。首先,讀入一行字符串,統(tǒng)計(jì)每個(gè)字符出現(xiàn)的頻率;然后,根據(jù)字符出現(xiàn)的頻率利用算法5.10建立相應(yīng)的哈夫曼樹(shù);最后,根據(jù)得到的哈夫曼樹(shù)利用算法5.11求出每個(gè)字符的哈夫曼編碼。

四、實(shí)驗(yàn)步驟


4.1

此部分可包含解題思路、最初填寫(xiě)的但沒(méi)有通過(guò)的程序,通過(guò)調(diào)試如何找到問(wèn)題并做出改正,可粘貼調(diào)整規(guī)范的截圖

4.2編程和調(diào)試

此部分可包含解題思路、最初填寫(xiě)的但沒(méi)有通過(guò)的程序,通過(guò)調(diào)試如何找到問(wèn)題并做出改正,可粘貼調(diào)整規(guī)范的截圖

五、實(shí)驗(yàn)結(jié)果

5.1程序完成后關(guān)鍵源碼及運(yùn)行結(jié)果截圖

可以將最終完成的代碼及運(yùn)行結(jié)果在此展示。

六、實(shí)驗(yàn)總結(jié)

用簡(jiǎn)介、準(zhǔn)確的語(yǔ)言描述本次實(shí)驗(yàn)重點(diǎn)解決了什么問(wèn)題,學(xué)習(xí)了什么知識(shí),自己掌握的如何等等

七、劃重點(diǎn)參考代碼

#include <iostream>
#include <algorithm>
#include <map>
#include <cmath>
#include <cstring>

#define IOS std::ios::sync_with_stdio(false)

using namespace std;

typedef struct
{
	int weight;
	int parent, lchild, rchild;
}HTNode, *HuffmanTree;

typedef char **HuffmanCode;

char ch[10];

void Select(HuffmanTree HT,int len,int &s1,int &s2)
{
    int i, min1 = 0x3f3f3f3f, min2 = 0x3f3f3f3f;
    
    for(i = 1; i <= len; i ++)
    	if(HT[i].parent == 0 && min1 > HT[i].weight)
    		min1 = HT[i].weight, s1 = i;
    		
    for(i = 1; i <= len; i ++)
    	if(i != s1 && HT[i].parent == 0)
    		if(HT[i].weight < min2)
        		min2 = HT[i].weight, s2 = i;
}
 
void CreatHuffmanTree(HuffmanTree &HT, int n, int s[])
{
    if(n <= 1) return;
    int m = 2 * n - 1;
    HT = new HTNode[m + 1];
    for(int i = 1; i <= m; i ++)
        HT[i].parent = 0, HT[i].lchild = 0, HT[i].rchild = 0;
        
    for(int i = 1; i <= 26; i ++) 
		if(s[i] != 0) 
			HT[i].weight = s[i];
    
    for(int i = n + 1; i <= m; i ++)
	{
        int s1, s2;
        Select(HT, i - 1, s1, s2);
        HT[s1].parent = i;
		HT[s2].parent = i;
        HT[i].lchild = s1;
        HT[i].rchild = s2;
        HT[i].weight = HT[s1].weight + HT[s2].weight;
    }
}
 
void CreatHuffmanCode(HuffmanTree HT, HuffmanCode &HC, int n)
{
	char *cd;
    HC = new char*[n + 1], cd = new char[n];
    
    cd[n - 1] = '\0';
    for(int i = 1; i <= n; i ++)
	{
        int start = n - 1;
        int c = i, f = HT[i].parent;
        while(f != 0)
		{
            -- start;
            if(HT[f].lchild == c) cd[start] = '0';
            else cd[start] = '1';
            c = f, f = HT[f].parent;
        }
        HC[i] = new char[n - start];
        strcpy(HC[i], &cd[start]);
    }
    delete cd;
}

void show(HuffmanCode HC, int h)
{
	for(int i = 1; i <= h; i ++)
		cout << HC[i] << endl;
}

void init()
{
	IOS;
	for(int i = 0; ; i ++)
	{
		char a; cin >> a;
		if(a != '0') ch[i] = a;
		else break;
	}
}

int main()
{
	IOS; init();
	int s[27], t = strlen(ch), h = 0;
	memset(s, 0, sizeof s);
	
	for(int i = 0; i <= t; i ++) s[ch[i] - 'a' + 1] ++;
	
	for(int i = 0; i <= 26; i ++)
		if(s[i] != 0) h ++;
	cout << h << endl;
	
	for(int i = 1; i <= 26; i ++)
		if(s[i] != 0)
			cout << (char)(i + 'a' - 1) << ":" << s[i] << ' ';
	cout << endl;
	
	
	HuffmanTree HT;
	HuffmanCode HC;

	CreatHuffmanTree(HT, h, s);
	CreatHuffmanCode(HT, HC, h);
	show(HC, h);
 
    return 0;
}

如果感覺(jué)博主講的對(duì)您有用,請(qǐng)點(diǎn)個(gè)關(guān)注支持一下吧,將會(huì)對(duì)此類(lèi)問(wèn)題持續(xù)更新……文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-490790.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)“基于哈夫曼樹(shù)的數(shù)據(jù)壓縮算法”的實(shí)驗(yàn)報(bào)告的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)課程實(shí)驗(yàn)五:哈夫曼樹(shù)與哈夫曼編碼

    實(shí)驗(yàn)日期:2022-12-20 ? 目錄 一、實(shí)驗(yàn)?zāi)康?1、掌握哈夫曼樹(shù)的建立 2、掌握哈夫曼編碼方式 二、實(shí)驗(yàn)內(nèi)容

    2024年02月05日
    瀏覽(30)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】-哈夫曼樹(shù)(Huffman Tree)與哈夫曼編碼

    【數(shù)據(jù)結(jié)構(gòu)與算法】-哈夫曼樹(shù)(Huffman Tree)與哈夫曼編碼

    超詳細(xì)講解哈夫曼樹(shù)(Huffman Tree)以及哈夫曼編碼的構(gòu)造原理、方法,并用代碼實(shí)現(xiàn)。 路徑 :從樹(shù)中一個(gè)結(jié)點(diǎn)到另一個(gè)結(jié)點(diǎn)之間的 分支 構(gòu)成這兩個(gè)結(jié)點(diǎn)間的路徑。 結(jié)點(diǎn)的路徑長(zhǎng)度 :兩結(jié)點(diǎn)間路徑上的 分支數(shù) 。 樹(shù)的路徑長(zhǎng)度: 從樹(shù)根到每一個(gè)結(jié)點(diǎn)的路徑長(zhǎng)度之和。記作: TL? 權(quán)

    2024年02月06日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu)【哈夫曼樹(shù)】

    數(shù)據(jù)結(jié)構(gòu)【哈夫曼樹(shù)】

    最優(yōu)二叉樹(shù)也稱(chēng)哈夫曼 (Huffman) 樹(shù) ,是指對(duì)于一組帶有確定權(quán)值的葉子結(jié)點(diǎn),構(gòu)造的具有最小帶權(quán)路徑長(zhǎng)度的二叉樹(shù)。權(quán)值是指一個(gè)與特定結(jié)點(diǎn)相關(guān)的數(shù)值。哈夫曼樹(shù)是帶權(quán)路徑長(zhǎng)度最短的樹(shù),權(quán)值較大的結(jié)點(diǎn)離根較近。 涉及到的幾個(gè)概念: 路徑: 從樹(shù)中一個(gè)結(jié)點(diǎn)到另一個(gè)結(jié)

    2024年02月14日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)-哈夫曼樹(shù)

    數(shù)據(jù)結(jié)構(gòu)-哈夫曼樹(shù)

    介紹 哈夫曼樹(shù),指 帶權(quán)路徑長(zhǎng)度最短的二叉樹(shù) ,通常用于數(shù)據(jù)壓縮中 什么是帶權(quán)路徑長(zhǎng)度? 假設(shè)有一個(gè)結(jié)點(diǎn),我們?yōu)樗x值,這個(gè)值我們稱(chēng)為權(quán)值,那么從根結(jié)點(diǎn)到它所在位置,所經(jīng)歷的路徑,與這個(gè)權(quán)值的積,就是它的帶權(quán)路徑長(zhǎng)度。 比如有這樣一棵樹(shù),D權(quán)值為2 ?從

    2024年02月20日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)----哈夫曼樹(shù)

    數(shù)據(jù)結(jié)構(gòu)----哈夫曼樹(shù)

    哈夫曼樹(shù)就是尋找構(gòu)造最優(yōu)二叉樹(shù),用于提高效率 各種路徑長(zhǎng)度 各種帶權(quán)路徑長(zhǎng)度 結(jié)點(diǎn)的帶權(quán)路徑長(zhǎng)度 樹(shù)的帶權(quán)路徑長(zhǎng)度 哈夫曼樹(shù) 帶權(quán)路徑長(zhǎng)度最短的樹(shù)或者二叉樹(shù) 也就是樹(shù)的葉子結(jié)點(diǎn)帶權(quán)路徑長(zhǎng)度之和 :也就是葉子結(jié)點(diǎn)的結(jié)點(diǎn)路徑長(zhǎng)度(根結(jié)點(diǎn)到葉子結(jié)點(diǎn)的路徑數(shù))

    2024年01月21日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)】哈夫曼樹(shù)

    為一個(gè)信息收發(fā)站編寫(xiě)一個(gè)哈夫曼碼的編/譯碼系統(tǒng)。文末貼出了源代碼。 完整的系統(tǒng)需要具備完整的功能,包含初始化、編碼、譯碼、印代碼文件和印哈夫曼樹(shù),因此需要進(jìn)行相應(yīng)的文件操作進(jìn)行配合。 哈夫曼樹(shù)的字符集和頻度可以從文件中讀入,也可以讓用戶(hù)手動(dòng)輸入,

    2023年04月22日
    瀏覽(18)
  • 【數(shù)據(jù)結(jié)構(gòu)-樹(shù)】哈夫曼樹(shù)

    【數(shù)據(jù)結(jié)構(gòu)-樹(shù)】哈夫曼樹(shù)

    ??????歡迎來(lái)到我的博客,很高興能夠在這里和您見(jiàn)面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內(nèi)容和知識(shí),也可以暢所欲言、分享您的想法和見(jiàn)解。 推薦:kuan 的首頁(yè),持續(xù)學(xué)習(xí),不斷總結(jié),共同進(jìn)步,活到老學(xué)到老 導(dǎo)航 檀越劍指大廠系列:全面總

    2024年02月08日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)—哈夫曼樹(shù)及其應(yīng)用

    數(shù)據(jù)結(jié)構(gòu)—哈夫曼樹(shù)及其應(yīng)用

    5.6哈夫曼樹(shù)及其應(yīng)用 5.6.1哈夫曼樹(shù)的基本概念 路徑 :從樹(shù)中一個(gè)結(jié)點(diǎn)到另一個(gè)結(jié)點(diǎn)之間的 分支 構(gòu)成這兩個(gè)結(jié)點(diǎn)間的路徑。 結(jié)點(diǎn)的路徑長(zhǎng)度 :兩結(jié)點(diǎn)間路徑上的 分支數(shù) 。 樹(shù)的路徑長(zhǎng)度 :從 樹(shù)根 到每一個(gè)結(jié)點(diǎn)的 路徑長(zhǎng)度之和 。記作 TL 結(jié)點(diǎn)數(shù)目相同的二叉樹(shù)中,完全二叉

    2024年02月14日
    瀏覽(18)
  • 【數(shù)據(jù)結(jié)構(gòu)】實(shí)驗(yàn)十:哈夫曼編碼

    【數(shù)據(jù)結(jié)構(gòu)】實(shí)驗(yàn)十:哈夫曼編碼

    實(shí)驗(yàn)十?哈夫曼編碼 一、實(shí)驗(yàn)?zāi)康呐c要求 1 )掌握樹(shù)、森林與二叉樹(shù)的轉(zhuǎn)換; 2 )掌握哈夫曼樹(shù)和哈夫曼編碼算法的實(shí)現(xiàn); 二、?實(shí)驗(yàn)內(nèi)容 1.? 請(qǐng)編程實(shí)現(xiàn)如圖所示的樹(shù)轉(zhuǎn)化為二叉樹(shù)。 2.? 編程實(shí)現(xiàn)一個(gè)哈夫曼編碼系統(tǒng),系統(tǒng)功能包括: (1)? 字符信息統(tǒng)計(jì):讀取待編碼的源文

    2024年02月15日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu)與算法--哈夫曼樹(shù)應(yīng)用

    第1關(guān):統(tǒng)計(jì)報(bào)文中各個(gè)字符出現(xiàn)的次數(shù) 任務(wù)描述 本關(guān)任務(wù): 給定一串文本,統(tǒng)計(jì)其中各個(gè)字符出現(xiàn)的次數(shù); 測(cè)試說(shuō)明 平臺(tái)會(huì)對(duì)你編寫(xiě)的代碼進(jìn)行測(cè)試: 測(cè)試輸入:` abcdeabcdeabcdabcdabcdabcbccc 預(yù)期輸出: a 6 b 7 c 9 d 5 e 2 代碼: 第2關(guān):對(duì)第一關(guān)報(bào)文中的各個(gè)字符進(jìn)行哈夫曼編

    2024年02月06日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包