Huffman编码的Matlab实现_旧慢的博客-程序员ITS203

技术标签: matlab  算法  字符串  Matlab  

Huffman编码的Matlab实现


实现代码

信息论与编码大作业

function [ Huff_chart, Ave_length, yita] = huff_code( c )

%统计字符串中字符出现频率
    t=unique(c);
    for i=1:length(t)
        Num(i)=length(strfind(c,t(i)));
    end
    Num=Num/sum(Num);

%构建Huffman编码表
    Huff_chart=cell(3,length(t));
    for i=1:length(t)
        Huff_chart(1,i)={t(i)};
        Huff_chart(2,i)={Num(i)};
        Huff_chart(3,i)={0};
    end

%生成待编码矩阵,每列最后一个元素为新求和得到元素的位置
    n=length(t);   
    A=sort(Num,'descend');%按降序排列
    T=A;
    A=A/sum(A);
    B=zeros(n,n);
    %生成第一列
    for i=1:n
        B(i,1)=T(i);
    end
    r=B(i,1)+B(i-1,1);
    T(n-1)=r;T(n)=0;
    T=sort(T,'descend');
    t=n-1;
    %生成编码表的其他各列
    for j=2:n
        for i=1:t
            B(i,j)=T(i);
        end
        if t>1
            K=find(T==r);
            B(n,j)=K(end);
            r=(B(t-1,j)+B(t,j));
            T(t-1)=r;
            T(t)=0;
            T=sort(T,'descend');
            t=t-1;
        else
            B(n,j)=1;
        end
    end
    
%对编码矩阵进行Huffman编码编码格式为:
    %2--->0
    %1--->1
    
    Huff_code=zeros(1,n);
    Huff_code(1,1)=2;
    Huff_code(1,2)=1;
     for i=n-2:-1:1
         t1=Huff_code(B(n,i+1))*10+1;
         t0=Huff_code(B(n,i+1))*10+2;
         Huff_code(B(n,i+1))=[];
         Huff_code(n-i+1)=t1;
         Huff_code(n-i)=t0;
     end
     
%将Huffman编码对应输出到Huffman编码表格中  
    A1=A;
    for i=1:n
        t=find(abs(A-Num(i))<10.^-3);
        t=t(1);
        A(t)=0;
        Huff_chart(3,i)={strrep(num2str(Huff_code(1,t)),'2','0')};
    end
    
%相关计算   
    Ave_length=zeros(1,n);
    for i=1:n
        Ave_length(i)=length(num2str(Huff_code(i)));
    end
    Ave_length=sum(Ave_length.*A1);
    H1=log2(Num);
    H=-Num*(H1');
    yita=H/Ave_length;
    
end
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43633720/article/details/104075508

智能推荐

alienware 15 r2 linux驱动下载,外星人笔记本驱动-外星人Alienware驱动下载 官方版-下载啦..._沈仙君的博客-程序员ITS203

外星人笔记本驱动是戴尔外星人笔记本中的全套驱动合集,包括主板芯片、串行设备、有线网卡驱动、声卡驱动和集显驱动等,分为win7、win8和win10等多个版本,解决个别功能无法使用的问题,需要的朋友赶快下载吧!使用方法考虑到很多人去官网不会下载驱动,整理了一份驱动供大家下载,驱动都是戴尔官网新安装系统要下载全部驱动,记得要从1开始按顺序装,如果是只需要个别的,找到对应驱动下载就行最新动态戴尔宣布20...

OpenCL API 调用,基础知识详解_Chhjnavy的博客-程序员ITS203_opencl api

1.获取指定系统上可用的计算平台,使用函数:cl_intclGetPlatformIDs( cl_uintnum_entries, cl_platform_id*platforms, cl_uint*num_platforms) eg: cl_int err; cl_uint nPlatform; cl_platfo...

emf java_每个Eclipse开发人员都应该了解EMF_weixin_39616348的博客-程序员ITS203

This tutorial is an introduction to EMF and explains the basics of EMF. We start by showing you how to build a very simple data-centric application, including the UI, based on EMF. We explain how to d...

TCP的可靠性传输的实现_wyn126的博客-程序员ITS203

1确认应答(ACK)机制 TCP将每个字节的数据都进行了编号,即为序列号。确认序号=序号+1 每个ACK都有对应的确认序列号,意思是告诉发送者已经收到了数据,下一个数据应该从哪里开始发送。 2.超时重传机制 超时重传的两种情况 (1)如果主机A发送给主机B的报文,主机B在规定的时间内没有及时收到主机A发送的报文,我们可以认为是ACK丢了,这时就需要触发超时重传机制。 (2)如果...

网站模拟登录总结_SpiderLQF的博客-程序员ITS203

目录                                          网站模拟登录总结一、环境二、简介三、模拟登录网站1、拉勾网模拟登录2、CSDN模拟登录3、微博模拟登录                                          网站模拟登录总结一、环境    window7系统    python3语...

2021Bootstrap框架入门(最新)_杰瑞同学的博客-程序员ITS203

Bootstrap入门背景传统方式是使用div+css实现响应式布局,为了适配各种设备,会写大量的css代码,导致开发效率降低,顺应时代诞生了bootstrap概念bootstrap是一个能够快速搭建响应式布局的前端ui框架特点内置了很多的组件,比如轮播图、标签页、分页、表单等等,用户可以直接使用bootstrap提供了一套用于构建响应式布局的栅格系统,用于快速搭建一个适应性良好的页面布局bootstrap有一些内置组件不易修改,本身用了JavaScript来实现,比如轮播图版

随便推点

Contos7 ulimit修改系统打开文件限制_weixin_33786077的博客-程序员ITS203

ulimit -a 用来查看系统对用户的各种资源限制(ulimit 是linux上的一个命令).1.先查看系统内核允许文件打开数量的上限:#sysctl -n -e fs.file-max在Centos7上默认值为5864432.使用ulimit -a可以查看当前的最大打开文件数.Centos7默认值是:当服务器负载较大时,很容易出现"too many open files"的错误.然后调高此值就...

Unity - Timeline 之 Muting tracks(屏蔽轨道)_Jave.Lin的博客-程序员ITS203_timeline怎么mute

目录:Unity - Timeline 知识汇总原味:https://docs.unity3d.com/Packages/[email protected]/manual/trk_mute.html翻译时Timeline版本:Timeline 1.2.11Muting tracks屏蔽轨道如果你的Timeline实例中有许多的轨道,你也可屏蔽部分轨道,先编辑其他轨道上的动画,等...

乔托Giotto (1267-1337)_iteye_2060的博客-程序员ITS203

乔托Giotto (1267-1337) 乔托是意大利文艺复兴时期杰出的雕刻家和建筑师,被尊称为“意大利绘画之父”。乔托性格开朗、活泼、机智、幽默。他出生在佛罗伦萨附近韦斯皮亚诺的农村,父亲是贫苦的农民。乔托从小上山放羊,后来在画坊当过学徒和帮工。他是画家契马布埃的学生。少年时代的乔托非常喜欢画画。他一边牧羊,一边用石头或小木棍在地上画些自然景物或由放牧的那些小山...

DOS远程桌面连接命令_lukedd的博客-程序员ITS203

DOS远程桌面连接命令 mstsc /v: 192.168.1.250 /consolecmd 运行 command删除文件 rd 文件名/S创建文件 MD 文件名 1. net user admin godmour /add 新建一个用户名为 admin 密码为 godmour 默认为user组成员2. ...

controller-method接参数[email protected]_jupiter_888的博客-程序员ITS203

@GetMapping("/get01") public String get01(String name, Integer id) { String resp = "name &gt;&gt;&gt; " + name + "; " + " id &gt;&gt;&gt; " + id; return resp; }...

转载:网页左右两列等高布局的5种实现方法_竹青墨颜的博客-程序员ITS203_网页布局 两边同高

在布局中,通常会要求页面中的左右两列(或多列)高度相等,方法有很多,看到一篇不错的博文,特此转载: 网页左右两列等高布局的5种实现方法

推荐文章

热门文章

相关标签