Python中哈夫曼的译码问题

我通过编码,对一个含有一大段字符串的文本得到了一个dict和一段编码完成的01字符串,dict中Keys为字符,value为权,不用树,怎么直接根据dict和01字符串译码回去?
比如 00100110101011011100111010101100111011101111010011110011101010110001000100110110101011001111001111110000000111111000001100000010100111111011110011101010111010101

dict:
a:110
C:00100
e:11110
d:01
g:11111
f:0000
h:00101
c:00110
q:1001
s:101
r:00111
w:1110
y:10000
x:0001
z:10001

求解

1个回答

仅供参考

 #coding:utf-8
'''
Created on 2016/4/17
@author: Bealing
'''

data = '00100110101011011100111010101100111011101111010011110011101010110001000100110110101011001111001111110000000111111000001100000010100111111011110011101010111010101'
code = {'a':'110','C':'00100','e':'11110','d':'01','g':'11111','f':'0000','h':'00101','c':'00110','q':'1001','s':'101','r':'00111','w':'1110','y':'10000','x':'0001','z':'10001'}

def haffuman_decode(data,code):
    newcode = dict(zip(code.values(), code.keys())) #字典key/value翻转
    i,res = 0,""
    while i < len(data):
        j = i+1
        while j < len(data): #获取某一字符的code
            if data[i:j] in newcode.keys():
                break
            j += 1
        res += newcode.get(data[i:j]) #获取某一code表示的字符,并追加在字符串后面
        i = j
    return res

if __name__ == '__main__':
    print haffuman_decode(data, code)
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
哈夫曼编/译码系统的设计与实现
问题描述利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(解码)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站设计一个哈夫曼编译码系统。基本要求 初始化(Initialzation)。从数据文件DataFile.data中读入字符及每个
数据结构:哈夫曼树,哈夫曼编码与译码系统
将文本文件利用哈夫曼树进行编码,存储成压缩文件
Huffman哈夫曼编码译码器(文件输入输出流)C语言(C++)
C语言(其中用到了c++) 哈夫曼编码译码器,做课程设计的,许多网上的资料都不能直接使用,以下是经过修改后能成功运行的,其中huffman.txt文件放在项目目录,需要的可以自己改代码 下面上代码: (现在scanf,getch都不能直接使用,需要在上面加上#define _CRT_SECURE_NO_WARNINGS或者是使用scanf_s,_getch,诸如此类) #define
【算法导论】哈夫曼树及编译码
哈夫曼树及编译码 哈夫曼树,又称二叉树,是一类带权路径长度最短的树。所谓路径长度,就是节点到树根之间的路径长度与节点权值的乘积。 哈夫曼本人曾在MIT的信息论研究生班学习。Robert Fano教授让学生们自己决定是参加期未考试还是做一个大作业。而哈夫曼选择了后者,原因很简单,因为解决一个大作业可能比期未考试更容易通过。Robert Fano教授也是信息论的先驱,学过信息论的都知道有Fano不
哈夫曼编码译码(数据结构课程设计)
1.需求分析 1.1问题描述 设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。 1.2 基本要求 将权值数据存放在数据文件(文件名为data.txt,位于执行程序的当前目录中)  分别采用动态和静态存储结构 初始化:键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树; 编码:利用建好的哈夫曼树生成哈夫曼编码; 输出编码; 设字符集及频度如下
哈夫曼编码/译码的设计与实现
首先根据给定的n个字符的权值构造哈夫曼树。通过遍历此二叉树完成各字符的哈夫曼编码,另输入一组‘0’、‘1’代码构成的报文将其翻译成对应的字符信息。 废话不说直接上代码: #include #include #define UINT_iMAX 10000 using namespace std; typedef struct { char letter, *code; int weig
Huffman树及Huffman编码,译码的算法实现
参考:https://blog.csdn.net/curson_/article/details/53771386 本来以为这个实验一会儿就可以搓出来,最后跟着要求搓了几个小时,菜是原罪,菜是真的菜,(助教小姐姐很好) 要求: 1、输入一段100—200字的英文短文,存入一文件a中。 2、写函数统计短文出现的字母个数n及每个字母的出现次数 3、写函数以字母出现次数作权值,建Haffman...
Java实现哈夫曼编码和解码
题目:将一个字符串进行哈夫曼编码;编码过程中,会得到每个字符的编码,通过已知的每个字符的编码对之前的编码进行解码。
c语言哈夫曼编码及译码
哈夫曼编码及译码,可以查看编码后的二进制文件,可以打印生成的哈夫曼树,还可以译码,提供菜单选项,根据提示键入大写字母进行相应的操作
哈夫曼编码及其解码全过程
今年的小学期我选了做哈夫曼编码,老师的要求是这样的: 编—译码系统的设计   内容: (1) 读入待编码的文字,统计各字符出现的频率 (2) 构造哈夫曼树 (3) 得到各字符的哈夫曼编码 (4) 对原文进行编码 (5) 发送、接收 (6) 还原(译码)收到的文字 (7) 利用哈夫曼树,从根到叶子读0、1序列,直到终止,再读下一个字符 (8) 比较(校验) 基本要求:(85分...
对文件进行哈夫曼编码压缩与译码的C++实现 以及压缩率计算 ——HIT杨朔
对英文文本文件进行哈夫曼编码译码的C++实现 以及压缩率计算哈夫曼编码压缩原理:由于每个字符在内存中都是以ASCII码进行存储,所以每个字符都占用了八个01位,利用哈夫曼树对每个字符进行01编码,根据字符在文章中出现的频率调整01串长度,出现频率高的字符在哈夫曼树中的权重大,编码后01串短,从而使得最终计算出的平均编码长度小于8,在本代码中平均编码长度约为4.72,压缩率约为59%,从而达到压缩文本
Python语言实现哈夫曼编码
汉语版:使用python实现huffman编码是一个能够很快地实现。所以我们选择使用python来实现我们这个程序。 l E-version: we will use python to realize this program called huffman encoding and decoding. why we use python, because in python we can fi
哈夫曼树编码与译码解码运用
#include<stdio.h> #include<conio.h> #define MAXVALUE 10000 #define MAXLEAF 30 #define MAXNODE MAXLEAF*2-1 #define MAXBIT 50 typedef struct node{ char letter; int weight; int parent;
C语言实现哈夫曼树、编码、解码及问题总结
一、准备知识 1、Huffman树 Huffman树是一类带权路径长度WPL最短的二叉树,中文名叫哈夫曼树或最优二叉树。 相关概念: 结点的路径长度:从根结点到该结点的路径上分支的数目。 树的路径长度:树中每个结点的路径长度之和。 树的带权路径长度:树中所有叶子结点的带权路径长度之和。 构造Huffman树的步骤: 1)  根据给定的n个权值,构造n棵只有一个根结点的二
C# 写的哈夫曼编码译码实例(图形界面)
本程序是用c#语言编写的,其中很多还不完善,仅供参考,需要的请下载,非诚勿扰,谢谢!
HaffManTree哈夫曼树的编码和解码的个人学习心得感悟
HaffManTree哈夫曼树的编码和解码的个人学习心得感悟
数据结构 第14讲 神秘电报密码——哈夫曼编码
看过谍战电影《风声》的观众都会对影片中神奇的消息传递惊叹不已!吴志国大队长在受了残忍的“针刑”之后躺在手术台上唱空城计,变了音调,把消息传给了护士,顾晓梦在衣服上缝补了长短不一的针脚……那么,片中无处不在的摩尔斯码到底是什么?它又有着怎样的神秘力量呢? 摩尔斯电码(Morse code)由点dot(. )、划dash(-)两种符号组成。它的基本原理是:把英文字母表中的字母、标点符号和空格
哈夫曼树及python实现
最近在看《tensorflow实战》中关于RNN一节,里面关于word2vec中涉及到了哈夫曼树,因此在查看了很多博客(文末)介绍后,按自己的理解对概念进行了整理(拼凑了下TXT..),最后自己用python实现Haffuman树的构建及编码。哈夫曼(huffman)树基本概念 路径和路径长度:树中一个结点到另一个结点之间的分支构成这两个结点之间的路径;路径上的分枝数目称作路径长度,它等于路径上的结
【数据结构】哈夫曼树实现编码译码
根据一段字符串中字符的个数 作为该字符的权值生成哈夫曼树。        然后根据生成的哈夫曼编码,对任意字符串实现编码,对任意二进制串实现译码。 程序运行结果: 1.程序主界面: 2.根据字符串 创建哈夫曼树及编码: 3.生成的编码表如下: 4.根据生成的哈夫曼编码对字符串编码: 5.生成的编码保存在文件中: 6.对二进制串译码
基于matlab的huffman编解码
-
哈夫曼树构造及编码算法应用之26个字母的哈夫曼编码
/*--------------------------------------------------------------- 任务过程:创建26个字母哈夫曼树,及其编码和译码 1、建立哈夫曼树 2、从每个叶结点回溯到root的路径,并记录路径,则为哈夫曼编码 3、查表方式获得每个字符的哈夫曼编码 ------------------------------------------------
对26个英文字母进行huffman编码
1、建立哈夫曼树 2、从每个叶结点回溯到root的路径,并记录路径,则为哈夫曼编码 3、查表方式获得每个字符的哈夫曼编码 #include #include #include ///----------------------定义结点数据--------------- #define leave 26 #define node (26*2-1) typedef struct nodee {
利用matlab自带函数对字符串进行Huffman编码
利用matlab自带函数对字符串进行Huffman编码
哈夫曼编码(Huffman Coding) cpp完整代码实现 详细注释 ASCII码表
1.概念       哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。 1951年,哈夫曼和他在MIT信息论的同学需要选择是完成学期报告还是期末考试
电文的编码和译码(哈夫曼树的应用)
一、        实验环境 学宝虚拟机,VC6.0二、        实验目的 从键盘接收一串电文字符,输出对应的哈夫曼编码,同时能翻译哈夫曼编码生成的代码串,输出对应的电文字符。三、        实验内容1.用C语言实现二叉树的链式(二叉链表)存储结构;2.实现二叉树的基本操作的有关算法(二叉树的建立、各种遍历等);3.定义二叉树的静态链表结构,并利用这种结构存储哈夫曼树,利用哈夫曼树解决编...
哈夫曼编码译码(HuffmanCode)
哈夫曼 编码 译码<br>win-tc
【数据压缩】Huffman原理与代码实现
Huffman算法也是一种无损压缩算法,但与上篇文章LZW压缩算法不同,Huffman需要得到每种字符出现概率的先验知识。通过计算字符序列中每种字符出现的频率,为每种字符进行唯一的编码设计,使得频率高的字符占的位数短,而频率低的字符长,来达到压缩的目的。通常可以节省20%~90%的空间,很大程度上依赖数据的特性!Huffman编码是变长编码,即每种字符对应的编码长度不唯一。 前缀码:任何一个字符的编码都不是同一字符集中另一种字符编码的前缀。Huffman编码为最优前缀码,即压缩后数据量最小。 -------
【VB6】实现哈夫曼编码
Private ContentString As String Private ItemCount As Long Private Nodes() As Node Private Type Node preID As Long leftID As Long leftValue As Long rightID As Long rightVa
C/C++ 哈夫曼树的构造、编码以及译码
题目:假设用于通信的电文由字符集{a,b,c,d,e,f,g,h}中的字母构成,这8个字母在电文中出现的 频率分别为: {0.19, 0.21, 0.02, 0.03, 0.06, 0.07, 0.1, 0.32}. 要求:画出哈夫曼树。哈夫曼树的构造 哈夫曼编码及译码的实现 我从课本上面摘抄了一个题目,题目大概是上面这样的,我们这里只是详细的说明一下哈弗曼树要怎么构建。借用一下这个题目。哈夫曼
C++实现Huffman的编解码
Huffman用C++进行编解码的实现
哈夫曼树以及编解码
这一篇要总结的是树中的最后一种,即哈夫曼树,我想从以下几点对其进行总结: 1,什么是哈夫曼树? 2,如何构建哈夫曼树? 3,哈夫曼编码? 4,算法实现? 回到顶部 一,什么是哈夫曼树 什么是哈夫曼树呢? 哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树。下面用一幅图来说明。 它们的带权路径长度分别为: 图a: WPL=5*
哈夫曼译码
哈夫曼树:给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。...
哈夫曼树数据机构的建立及哈夫曼编码与解码的C++实现
纠结了两天,终于解决了这个问题,分享给大家自己的思路。 将一组无序数列建立最小堆,从最小堆中弹出两个最小的元素作为左右儿子其和为父节点构建一个树,将父节点加入最小堆,再次调用以上方法重复构建树,最终即可构建一棵哈夫曼树,哈夫曼树的特点有3个:1、 所有的序列元素集中在叶节点上  2、没有度为1的节点 3、哈夫曼树的任意非叶节点的左右子树交换后仍是哈夫曼树 4、n个叶子结点的哈夫曼树共有2n-1个
哈夫曼编码 C#
我是从《数据结构与算法 C#语言描述》这本书里面抄的 , 程序可以正常运行 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 哈夫曼编码1 { public class HuffmanTree { privat
java创建哈夫曼树和实现哈夫曼编码
import java.util.*; public class HuffmanTree { public static class Node { E data; double weight; Node leftChild; Node rightChild; public Node(E data , double weight) { this.data = dat
数据结构中huffman编码与译码
本例实现了数据结构中的哈夫曼(huffman)算法, 完成编码与译码功能,附带本人的word设计。
哈夫曼树及其应用-哈夫曼编码
编码方案 1. 编码和解码   数据压缩过程称为编码。即将文件中的每个字符均转换为一个惟一的二进制位串。   数据解压过程称为解码。即将二进制位串转换为对应的字符。 2. 等长编码方案和变长编码方案   给定的字符集C,可能存在多种编码方案。  (1) 等长编码方案   等长编码方案将给定字符集C中每个字符的码长定为[lg|C|],|C|表示字符集的大小。  【例】设待压缩的数据文
数据结果实验书哈夫曼编译码
数据结构实验课本中的一道实验题——哈夫曼编译码,希望对大家有所帮助。
Python使用优先队列,树结构实现哈夫曼算法(哈夫曼树)
对于哈夫曼树就不做介绍了,直接进入正题。 本篇使用简单的结点创建导入优先队列中进行处理然后将树根地址传入二叉树方法中,通过广度遍历实现查询。class node:结点创建,left指向左子结点地址,right指向右子结点地址,limit为权值,root指向父结点。 class first_lis:优先队列 class huffTree:哈夫曼树在这里以此图作为例子加以实现: 代码:
哈夫曼编译码问题(源代码)
有关树的应用,利用哈夫曼树的构造算法和哈夫曼编译码的算法进行译码。例如给定编码能给出相应的译码,并存入文件。
相关热词 c#俄罗斯方块源码 c# linq原理 c# 装箱有什么用 c#集合 复制 c# 一个字符串分组 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类