鱼C论坛

 找回密码
 立即注册
查看: 7924|回复: 26

[技术交流] Huffman树

[复制链接]
发表于 2018-5-23 22:01:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小弟自己写的Huffman树,算作这段时间的练习和提升功力的机会
在这个过程中也是学会了很多,等过了这段时间再优化一下代码,
不说了,小弟去复习量子力学了 ,加油!!!
游客,如果您要查看本帖隐藏内容请回复

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-5-25 12:31:16 | 显示全部楼层

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
溯影 + 1 + 1 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-15 14:54:17 From FishC Mobile | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-17 13:59:14 | 显示全部楼层
困惑我好久了,都没写出来,楼主给看个源代码呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-17 17:48:49 | 显示全部楼层
fanyifan 发表于 2018-6-17 13:59
困惑我好久了,都没写出来,楼主给看个源代码呗

我发了我的GitHub的地址,你可以上一下那个网址看一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-17 17:50:56 | 显示全部楼层
不熟悉GitHub的朋友也可以在这里下载源工程。

-_HuffmanTree-master.zip

692.44 KB, 下载次数: 25

-_HuffmanTree-master.zip

692.44 KB, 下载次数: 6

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-5 16:43:48 | 显示全部楼层
加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-3 19:37:29 | 显示全部楼层
支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-11 10:51:30 | 显示全部楼层
来看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-22 17:10:20 | 显示全部楼层
加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-3 12:37:51 | 显示全部楼层
加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-9 16:17:15 | 显示全部楼层
Jiangxi
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 20:57:51 | 显示全部楼层
nbnb
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-1 22:57:41 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-27 17:14:32 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-8 21:46:20 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-1 17:56:30 | 显示全部楼层
#include<iostream>
using namespace std;
typedef struct{
        int weight;
        int parent,lchild,rchild;
}HTNode,*huffmanTree;
CreatHuffmanTree(HuffmanTree &HT,int n);

void Select(HuffmanTree HT,int m,int &s1,int &s2)
{
        min1=min(HT,m);
        min2=min(HT,m);
}
int min(HUffmanTree HT,int m)
{
        int i=0;
        int min;
        int min_weight;
        while(HT[i].parent!=0)
                i++;
        min_weight=HT[i].weight;
        min=i;
        for(;i<m;i++)
        {
                if(HT[i].weight<min_weight && HT[i].parent==0)
                {
                        min_weight=HT[i].weight;
                        min=i;
                }
        }
        HT[min].parent=1;
        return min;
}
void CreatHuffmanTree(HuffmanTree &HT,int n)
{
        if(n<=1) return;
        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<=n;++i)
                cin>>HT[i].weight;
        for(k=n+1;i<=m;i++)
        {
                Select(HT,k-1,s1,s2);
                HT[s1].parent=k;
                HT[s2].parent=k;
                HT[k].lchild=s1;
                HT[k].rchild=s2;
                HT[k].weight=HT[s1].weight+HT[s2].weight;
        }
}
typedef char **HuffmanCode;
void CreatHuffmanCode(Huffman HT,HuffmanCode &HC,int n)
{
        HC=new char*[n+1];
        cd=new char[n];
        cd[n-1]='\0';
        for(i=1;i<=n;i++)
        {
                start=n-1;
                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;
}
int main()
{
        void Select(HuffmanTree HT,int m,int &s1,int &s2);
        int min(HUffmanTree HT,int m);
        void CreatHuffmanTree(HuffmanTree &HT,int n);
        void CreatHuffmanCode(Huffman HT,HuffmanCode &HC,int n);


        int n;
        cout<<"请输入结点个数:"<<endl;
        cin>>n;
        HTNode *Huffman=new HTNode[2*n-1];
        int *weight=new int[n];
        char **HC=new char*[n];

        cout<<"请输入"<<n<<"个权值:";
        CreatHuffmanTree(huffmanTree,n);
        CreatHuffmanCode(,huffman HT,huffmancode HC,n);
        cout<<"输出哈夫曼编码:"<<endl;
}
       
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-2 14:43:11 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-8 13:57:30 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-8 20:46:58 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 02:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表