首页 > 其他分享 >12.18

12.18

时间:2023-12-23 22:22:19浏览次数:31  
标签:编码 weight parent int s2 HT 12.18

写数据结构作业

 

7-1 哈夫曼树哈夫曼编码

输入一组整型权值,构建哈夫曼树,实现哈夫曼编码,并输出带权路径长度。

输入格式:

第一行输入叶子结点个数,接着依次输入权值。若叶子数为0或1,则输出error

输出格式:

输出哈夫曼编码,输出带权路径长度。

输入样例:

在这里给出一组输入。例如:

8

5 29 7 8 14 23 3 11

输出样例:

在这里给出相应的输出。例如:

5编码为0001

29编码为10

7编码为1110

8编码为1111

14编码为110

23编码为01

3编码为0000

11编码为001

WPL:271

 

一.实验内容

 

 

#include<iostream>

#include<cstring>

using namespace std;

typedef char **HuffmanCode;

//哈夫曼树:parent、lchild、rchild、weight

typedef struct

{

    int weight;

    int lchild,rchild,parent;

}HTNode,*HuffmanTree;

void min(HuffmanTree HT,int pos,int &s1,int &s2)

{//找到最小权值的两个下标信息

    s1=pos;s2=pos;//这个位置parent肯定为0

    for(int i=pos-1;i>=1;i--){

        if(HT[i].parent==0&&HT[i].weight<=HT[s1].weight)s1=i;//放个等于是想取下标小的后往前找

    }

    for(int i=pos-1;i>=1;i--)

        if(HT[i].parent==0&&HT[i].weight<=HT[s2].weight&&i!=s1)s2=i;

}

void CreatHT(HuffmanTree &HT,int n)

{//创建Huffman树

    if(n<=1)return;//**返回**

    int m=2*n-1;//总共2n-1个结点信息

    HT=new HTNode[m+1];

    for(int i=1;i<=m;++i)

    {

        HT[i].weight=0;HT[i].parent=0;HT[i].lchild=0;HT[i].rchild=0;//所有设置为0

    }

    for(int i=1;i<=n;i++)//

        cin>>HT[i].weight;

    for(int i=n+1;i<=m;i++)

    {

        int s1,s2;//最小权值的下标信息s1,s2

        min(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 CreatHC(HuffmanTree HT,HuffmanCode &HC,int n)

{//创建哈夫曼编码:从结点-->根

    HC= new char*[n+1];//1-n所以n+1个

    char *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)//f=0是根结点

        {

            if(c==HT[f].lchild)cd[--start]='0';

            else cd[--start]='1';

            c=f;f=HT[c].parent;

        }

        HC[i]=new char[n-start];

        strcpy(HC[i],&cd[start]);//****

    }

    delete cd;

}

int main()

{//2n-1个结点

    HuffmanTree HT;

    HuffmanCode HC;

    int n,WPL=0,j;

    cin>>n;

    if(n>1){

        CreatHT(HT,n);

        CreatHC(HT,HC,n);

        for(int i=1;i<=n;i++)

        {

            cout<<HT[i].weight<<"编码为";

            for(j=0;HC[i][j]!='\0';j++)

                cout<<HC[i][j];

            WPL+=j*HT[i].weight;

            cout<<endl;

        }

        cout<<"WPL:"<<WPL;

    }

    else{

        cout<<"error";

    }

    return 0;

}

标签:编码,weight,parent,int,s2,HT,12.18
From: https://www.cnblogs.com/bdsz/p/17923746.html

相关文章

  • #9 2023.12.18
    怎么做题速度单调递减了。464.THUPC2024Pre省流:我是演员。M我过的题。K我过的题。暴力打表就行了,我在本地打了三分钟就出答案了!很快。J我过的题。考虑\(v\)什么时候对\(len=k\)没有贡献。那就是\(v\)把序列分成了若干区间\([l,r]\),\(ban\)掉的区间就是\([......
  • 2023.12.18
    点击查看代码#include<bits/stdc++.h>#definefifirst#definesesecondusingstd::cin;usingstd::min;usingstd::max;usingstd::cout;usingstd::vector;constexprintM=2e6+5;constexprintINF=0x3f3f3f3f,mod=998244353;......
  • 12.18日
      终于迎来了王老师的最终测试,早上也是进行了最后的准备和测试。中午先去到了505教室,但是在教室里发现了几张熟悉的面孔——人工智能的同学,经询问得知他们在505上电工基础课程。而后经调整我们去往了512进行考试,看见王老师的一瞬间也是心安了。王老师总是给人一种稳重成熟的感......
  • 2023.12.18——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.JFinal明日计划:学习......
  • 12.18每日总结
    软件设计模式简单分类我们在未正式学习设计模式之前先去简单了解一下设计模式的主要三种分类:创建型模式用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。书中提供了单例、原型、工厂方法、抽象工厂、建造者等5种创建型模式。结构型模式用于描述如......
  • 闲话12.18
    上午打了一场模拟赛,垫底了。T1傻逼,不会,不可做。T2傻逼,把我卡爆。T3傻逼,时间全放T1了导致T3没啥时间想了,打了40pts跑路,最后20min想到一个和正解类似的做法,没时间写,哈哈。最终得分:\(0+60+40=100\),被众多人吊打哈哈哈哈哈。下午无聊改题,我记得有个人之前说要有时间了学......
  • 闲话 2023.12.18
    前天晚上打了CodeforcesRound915(Div.2),打的最好的一次,成功实现上大分......
  • 12.18 《代码大全2》的后感
    《代码大全2》是一本非常值得推荐的软件开发类书籍。通过阅读本书,我深刻地体会到了软件开发的复杂性和重要性。书中详细介绍了软件开发的各个方面,包括需求分析、设计、编码、测试等,让我对软件开发有了更全面的了解。在阅读过程中,我深受书中作者的理念和方法的启发。作者强调了代......
  • 云原生周刊:Kubernetes v1.29 正式发布 | 2023.12.18
    开源项目推荐RobustaKRRRobustaKRR(KubernetesResourceRecommender)是一个用于优化Kubernetes集群中资源分配的CLI工具。它从Prometheus收集Pod使用数据,并建议CPU和内存的请求和限制。这降低了成本并提高了性能。LiqoLiqo是一个开源项目,可实现动态、无缝的Kuber......
  • (2023.12.18)wifi的频宽配置
    //网关设备上的WiFi问题单ht_capab:频宽可调HighThroughput高吞吐量能力参数VHT:VeryHighThroughput现在也叫WiFi5GuardInterval:保护间隔(无线提速参数)AX2和AX5:指的是2.4G频段和5G频段HT40+:次通道高于主通道HT40-:次通道低于主通道SHORT-GI-20:disabledifnotsetWPA2:体......