用R语言实现霍夫曼编码的示例代码

 更新时间:2021年03月17日 15:59:21   作者:fanshunxing  
这篇文章主要介绍了用R语言实现霍夫曼编码的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

可读性极低,而且其实也没必要用R语言写,图个乐罢了 

p=c(0.4,0.2,0.2,0.1,0.1)###输入形如c(0.4,0.2,0.2,0.1,0.1)的概率向量,即每个待编码消息的发生概率
p1=p###将概率向量另存,最后计算编码效率要用
mazijuzhen=matrix(,nrow=length(p),ncol=length(p)-1)###码字矩阵:第i行对应向量p的第i个分量所对应的那个待编码消息的编码后的码字
group=matrix(c(1:length(p),rep(NA,length(p)*(length(p)-1))),nrow=length(p),ncol=length(p))###初始分组:每一行代表一组,每个行向量的所有分量代表此组的所有元素,初始时,有多少个待编码消息就分多少个组,每组只有一个待编码消息,以整数i代表向量p的第i个分量所对应的那个待编码消息
i=1###开始编码
for(i in 1:(length(p)-1))
{
 orderp=order(p,decreasing = FALSE)###orderp的分量依次是:p的最小分量的下标,p的第二小分量的下标。。。
 mazijuzhen[group[orderp[1],],i]=0###给概率最小的两个消息组编上0和1
 mazijuzhen[group[orderp[2],],i]=1
 group[min(c(orderp[1],orderp[2])),]=c(na.omit(group[min(c(orderp[1],orderp[2])),]),na.omit(group[max(c(orderp[1],orderp[2])),]),rep(NA,length(p)-length(c(na.omit(group[min(c(orderp[1],orderp[2])),]),na.omit(group[max(c(orderp[1],orderp[2])),])))))###把此次迭代的两个消息组中组编号较大的分到组编号较小的组里去。
 group[max(c(orderp[1],orderp[2])),]=NA###删除组编号较大的组
 p[min(c(orderp[1],orderp[2]))]=p[orderp[1]]+p[orderp[2]]###计算本次迭代得到的新的消息组的发生概率
 p[max(c(orderp[1],orderp[2]))]=NA###由于组编号较大的组被删除,所以相应删除它所对应的概率
 print("当前迭代次数")###本次迭代的结果总结
 print(i)
 print("概率向量")
 print(p)
 print("分组矩阵")
 print(group)
 print("码字矩阵")
 print(mazijuzhen)
}
i=1###由霍夫曼编码的特性,将所有编码倒转得到最终编码
for (i in 1:length(p)) 
{
 mazijuzhen[i,]=rev(mazijuzhen[i,]) 
}
i=1###构建码长向量
machang=c()
for (i in 1:length(p))
{
 
 machang=c(machang,length(na.omit(mazijuzhen[i,])))
}
xiaolv=-p1%*%log(p1,2)/mean(machang)###计算编码效率
print("最终的码字矩阵和编码效率")
mazijuzhen
xiaolv

到此这篇关于用R语言实现霍夫曼编码的示例代码的文章就介绍到这了,更多相关R语言 霍夫曼编码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • R语言ggplot2 title设置教程(main,axis和legend titles)

    R语言ggplot2 title设置教程(main,axis和legend titles)

    ggplot2是一个强大的作图工具,它可以让你不受现有图形类型的限制,创造出任何有助于解决你所遇到问题的图形,下面这篇文章主要给大家介绍了关于R语言ggplot2 title设置(main,axis和legend titles)的相关资料,需要的朋友可以参考下
    2023-02-02
  • R语言学习之基础绘图详解

    R语言学习之基础绘图详解

    这篇文章主要为大家详细介绍了R语言中基础绘图的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2023-03-03
  • R语言-修改(替换)因子变量的元素操作

    R语言-修改(替换)因子变量的元素操作

    这篇文章主要介绍了R语言-修改(替换)因子变量的元素操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • R语言通过parallel包实现多线程运行方式

    R语言通过parallel包实现多线程运行方式

    这篇文章主要介绍了R语言通过parallel包实现多线程运行方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 如何使用R语言做逻辑回归详解

    如何使用R语言做逻辑回归详解

    逻辑回归属于概率统计的分类算法模型的算法,是根据一个或者多个特征进行类别标号预测,下面这篇文章主要给大家介绍了关于如何使用R语言做逻辑回归的相关资料,需要的朋友可以参考下
    2022-07-07
  • R语言泊松(Poisson)分布实例详解

    R语言泊松(Poisson)分布实例详解

    Poisson分布是一种统计与概率学里常见到的离散概率分布,下面这篇文章主要给大家介绍了关于R语言泊松(Poisson)分布的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • R语言作图之density plot(密度图)的制作步骤

    R语言作图之density plot(密度图)的制作步骤

    这篇文章主要介绍了R语言作图之density plot(密度图)的制作步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • R语言UpSet包实现集合可视化示例详解

    R语言UpSet包实现集合可视化示例详解

    这篇文章主要为大家介绍了R语言UpSet包实现集合可视化示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • R语言之xlsx包读写Excel数据的操作

    R语言之xlsx包读写Excel数据的操作

    这篇文章主要介绍了R语言之xlsx包读写Excel数据的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • R语言 如何保留大于或小于特定数值的行

    R语言 如何保留大于或小于特定数值的行

    这篇文章主要介绍了R语言实现保留大于或小于特定数值的行操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04

最新评论