首页 > 其他分享 >2024/12/3日工作总结

2024/12/3日工作总结

时间:2024-12-18 11:23:22浏览次数:4  
标签:总结 编码 12 weight 哈夫曼 int s2 HT 2024

完成数据结构pta实验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;
typedef struct {
    int weight;
    int lchild, rchild, parent;
} HTNode, *HuffmanTree;

// 寻找最小值
void findMinimum(HuffmanTree HT, int pos, int &s1, int &s2) {
    s1 = -1; s2 = -1;
    for (int i = 1; i < pos; ++i) {
        if (HT[i].parent == 0) {
            if (s1 == -1 || HT[i].weight < HT[s1].weight) {
                s2 = s1;
                s1 = i;
            } else if (s2 == -1 || HT[i].weight < HT[s2].weight) {
                s2 = i;
            }
        }
    }
}

// 创建哈夫曼树
void createHuffmanTree(HuffmanTree &HT, int n) {
    if (n <= 1) return;
    int m = 2 * n - 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;
    }
    for (int i = 1; i <= n; i++) {
        cin >> HT[i].weight;
    }
    for (int i = n + 1; i <= m; i++) {
        int s1, s2;
        findMinimum(HT, i, 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 createHuffmanCode(HuffmanTree HT, HuffmanCode &HC, int n) {
    HC = new char*[n + 1];
    char *cd = new char[n + 1];
    cd[n] = '\0';
    for (int i = 1; i <= n; i++) {
        int start = n;
        int c = i, f = HT[i].parent;
        while (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 + 1];
        strcpy(HC[i], &cd[start]);
    }
    delete[] cd;
}

int main() {
    HuffmanTree HT;
    HuffmanCode HC;
    int n, WPL = 0;
    cin >> n;
    if (n <= 1) {
        cout << "error" << endl;
        return 0;
    }
    createHuffmanTree(HT, n);
    createHuffmanCode(HT, HC, n);
    for (int i = 1; i <= n; i++) {
        cout << HT[i].weight << "编码为";
        cout << HC[i] << endl;
        WPL += strlen(HC[i]) * HT[i].weight;
    }
    cout << "WPL:" << WPL << endl;

    // 释放内存
    for (int i = 1; i <= n; i++) {
        delete[] HC[i];
    }
    delete[] HC;
    delete[] HT;
    return 0;
}

标签:总结,编码,12,weight,哈夫曼,int,s2,HT,2024
From: https://www.cnblogs.com/zhanglijian/p/18614389

相关文章

  • 【每日一题】20241218
    【每日一题】方程\(x^2+6x+12=0\)的根为_______.棱长为\(a\)的正四面体外接球与内切球的半径之差为_______.已知\(\odotC\)过点\((3,0)\),且与\(y\)轴相切于点\((0,1)\),则\(C\)的标准方程为_______.[题目来源:]【每日一言】我想躲进一个不会被人看到的角落。我想......
  • 2024/12/4日工作总结
    完成数据结构pta实验7-1邻接表存储实现图的深度优先遍历编写程序,实现由邻接表存储实现无向图的深度优先搜索遍历的功能。顶点为字符型。输入格式:第一行输入顶点个数及边的个数,第二行依次输入各顶点,第三行开始依次输入边的两个顶点,用空格分开。最后输入深度优先遍历的起始点。......
  • 2024/12/5日工作总结
    完成数据结构pta实验7-2迪杰斯特拉方法实现最短路径用迪杰斯特拉算法实现有向网的最短路径输入格式:第一行输入有向网的顶点和边数,第二行输入各顶点值,用空格间隔,第三行开始输入各条边的两个点的及边上的权值,用空格间隔。最后一行输入要求路径的两个顶点。输出格式:输出最短......
  • goland2024如何安装?附安装包和激活方式
    前言大家好,我是小徐啊。goland是我们开发Go语言时的常用的开发工具,功能强大,今天,小徐就来介绍下如何安装和获取激活方式。文末附获取方式。如何安装和激活goland首先,我们双击下goland2024安装包,开始安装。然后,我们点击下运行按钮。然后,我们点击下一步按钮。然后,我们选择要......
  • 2024-12-18:正方形中的最多点数。用go语言,给定一个二维数组 points 和一个字符串 s,其中
    2024-12-18:正方形中的最多点数。用go语言,给定一个二维数组points和一个字符串s,其中points[i]表示第i个点的坐标,s[i]表示第i个点的标签。如果一个正方形的中心在(0,0),边与坐标轴平行,并且内部没有标签相同的两个点,则称这个正方形为“合法”的。你的任务是返回可以被“合......
  • 电脑为什么会提示“msvcr120.dll缺失”?“找不到msvcr120.dll文件”要怎么解决?
    电脑故障排查指南:揭秘“msvcr120.dll缺失”的真相与解决方案在软件开发与日常维护的广阔天地里,遇到系统报错或文件缺失的情况可谓家常便饭。今天,我将带领大家深入探讨一个常见的系统提示——“msvcr120.dll缺失”,并揭秘其背后的原因及有效解决方案。通过这一探讨,希望能帮助大......
  • 鸿蒙Next创建自定义组件总结
    一、引言在鸿蒙Next开发中,自定义组件是构建高效、可维护UI的重要组成部分。它具有可组合、可重用以及数据驱动UI更新等特点,能帮助开发者更好地实现代码复用、业务逻辑与UI分离等目标。本文将详细总结创建自定义组件的相关知识,包括其基本结构、成员函数/变量、参数规定、build()函......
  • 发点牢骚(20241217)
    我个人表示不要把一些东西发在一些论坛,社区和公开区域。(尤其是NGA)最近部分平台有了挖坟挂人的征兆,这使得我感觉“沟通成本”太高了,因为总有傻X喜欢开天眼,喜欢以现在的角度强行评价过去的事,你们天天发个帖子评价啥东西的过去,你能回到2000年吗?回不到就别提了。我一直认为讨论历......
  • 12.17学习总结
    1.结构体学习(学完哒)    2.写了英语作业~ 3.p1162题代码已经敲出来哒,但是运行仍存在问题,我需再努力下 ......
  • 2024.12.17
    根据您提供的代码和错误信息,问题在于您尝试将Page<Policy>对象直接传递给page方法,但是page方法期望的是一个实现了IPage接口的对象。Page类是IPage接口的一个实现,所以您可以直接使用Page类,但是需要确保您使用的是正确的类型参数。您的代码中出现的错误提示表明,您可......