• 构造Huffman以及实现


    构造Huffman

    题目

    在作业本上分别针对权值集合W=(6,5,3,4,60,18,77)和W=(7,2,4,5,8)构造哈夫曼树,提交构造过程的照片

    错误回答

    错误原因:遵循左边小于根右边大于根的原则

    正确回答

    HuffmanTree的实现

    题目

    • 1、采用静态三叉链表Triment(已经完整实现)储存HuffmanTree
    • 2、理解HuffmanTree的构造过程,不中代码完成decode()
    • 3、在HuffmanTreeTest中补充代码完成上个练习中的内容
    • 4、提交补充代码和运行结果截图

    压缩

    //数据压缩,将text各字符转换成Huffman编码存储,返回压缩字符串
        public String encode(String text)
        {
            String compressed="";                              //被压缩的数据,以字符串显示
            for (int i=0; i<text.length(); i++)
                compressed += getCode(text.charAt(i)-'A');     //默认字符集是从A开始的n个字符
            return compressed;
        }
    
    

    解压

    
        //数据解压缩,将压缩compressed中的0/1序列进行Huffman译码,返回译码字符串
        public String decode(String compressed)
        {
            //依次取出二进制的每一位,从树根向下搜索,1向右,0向左,
            // 到了叶子节点(命中),退回根节点继续重复以上动作
            String uncompressed="";
            char code;
    
            TriElement node = huftree[huftree.length-1];
            int i=0;
            while(i<compressed.length()) {
                if(!node.isLeaf()){
                    code = compressed.charAt(i);
                    if (code == '0') {
                        node = huftree[node.left];
                    } else {
                        node = huftree[node.right];
                    }
                    i++;
                }else if(node.isLeaf()){
                    //找到该叶节点的data在权值数组中的位置
                    int j=0;
                    while(!(node.data == weights[j]))
                        j++;
                    //该位置即为该叶节点对应字母在默认字符集中的位置
                    uncompressed +=  charset.charAt(j);
    
                    node = huftree[huftree.length-1];
                }
            }
            return uncompressed;
        }
    

    运行结果

  • 相关阅读:
    两线段是否相交模板
    树的距离
    Codeforces Round #369 (Div. 2)-D Directed Roads
    Codeforces Round #369 (Div. 2)-C Coloring Trees
    Codeforces Round #374 (Div. 2)-D Maxim and Array
    zstu-4243 牛吃草
    Codeforces Round #447 (Div. 2)
    zstu 4247-萌新的旅行
    CDQ分治求前缀和
    self.faceshowing = !self.facshowing无效,了,原来set
  • 原文地址:https://www.cnblogs.com/shuailinzhen/p/8046637.html
Copyright © 2020-2023  润新知