用R語(yǔ)言實(shí)現(xiàn)霍夫曼編碼的示例代碼
可讀性極低,而且其實(shí)也沒(méi)必要用R語(yǔ)言寫(xiě),圖個(gè)樂(lè)罷了
p=c(0.4,0.2,0.2,0.1,0.1)###輸入形如c(0.4,0.2,0.2,0.1,0.1)的概率向量,即每個(gè)待編碼消息的發(fā)生概率
p1=p###將概率向量另存,最后計(jì)算編碼效率要用
mazijuzhen=matrix(,nrow=length(p),ncol=length(p)-1)###碼字矩陣:第i行對(duì)應(yīng)向量p的第i個(gè)分量所對(duì)應(yīng)的那個(gè)待編碼消息的編碼后的碼字
group=matrix(c(1:length(p),rep(NA,length(p)*(length(p)-1))),nrow=length(p),ncol=length(p))###初始分組:每一行代表一組,每個(gè)行向量的所有分量代表此組的所有元素,初始時(shí),有多少個(gè)待編碼消息就分多少個(gè)組,每組只有一個(gè)待編碼消息,以整數(shù)i代表向量p的第i個(gè)分量所對(duì)應(yīng)的那個(gè)待編碼消息
i=1###開(kāi)始編碼
for(i in 1:(length(p)-1))
{
orderp=order(p,decreasing = FALSE)###orderp的分量依次是:p的最小分量的下標(biāo),p的第二小分量的下標(biāo)。。。
mazijuzhen[group[orderp[1],],i]=0###給概率最小的兩個(gè)消息組編上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])),])))))###把此次迭代的兩個(gè)消息組中組編號(hào)較大的分到組編號(hào)較小的組里去。
group[max(c(orderp[1],orderp[2])),]=NA###刪除組編號(hào)較大的組
p[min(c(orderp[1],orderp[2]))]=p[orderp[1]]+p[orderp[2]]###計(jì)算本次迭代得到的新的消息組的發(fā)生概率
p[max(c(orderp[1],orderp[2]))]=NA###由于組編號(hào)較大的組被刪除,所以相應(yīng)刪除它所對(duì)應(yīng)的概率
print("當(dāng)前迭代次數(shù)")###本次迭代的結(jié)果總結(jié)
print(i)
print("概率向量")
print(p)
print("分組矩陣")
print(group)
print("碼字矩陣")
print(mazijuzhen)
}
i=1###由霍夫曼編碼的特性,將所有編碼倒轉(zhuǎn)得到最終編碼
for (i in 1:length(p))
{
mazijuzhen[i,]=rev(mazijuzhen[i,])
}
i=1###構(gòu)建碼長(zhǎng)向量
machang=c()
for (i in 1:length(p))
{
machang=c(machang,length(na.omit(mazijuzhen[i,])))
}
xiaolv=-p1%*%log(p1,2)/mean(machang)###計(jì)算編碼效率
print("最終的碼字矩陣和編碼效率")
mazijuzhen
xiaolv
到此這篇關(guān)于用R語(yǔ)言實(shí)現(xiàn)霍夫曼編碼的示例代碼的文章就介紹到這了,更多相關(guān)R語(yǔ)言 霍夫曼編碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
R包制作后出現(xiàn)not available for錯(cuò)誤問(wèn)題解決解決
這篇文章主要為大家介紹了R包制作后出現(xiàn)not available for...錯(cuò)誤的問(wèn)題解決方式,有需要的朋友,可以借鑒參考下,希望能夠有所幫助2021-11-11
R語(yǔ)言中其它對(duì)象知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家分享的是一篇關(guān)于R語(yǔ)言中其它對(duì)象知識(shí)點(diǎn)總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2021-03-03
R繪制漂亮的中國(guó)地圖的實(shí)現(xiàn)示例
本文主要介紹了R繪制漂亮的中國(guó)地圖的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
R語(yǔ)言中assign函數(shù)和get函數(shù)的用法
這篇文章主要介紹了R語(yǔ)言中assign函數(shù)和get函數(shù)的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
R語(yǔ)言使用gganimate創(chuàng)建可視化動(dòng)圖
這篇文章主要為大家介紹了R語(yǔ)言使用gganimate創(chuàng)建可視化動(dòng)圖的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
R語(yǔ)言數(shù)組實(shí)例用法及知識(shí)點(diǎn)總結(jié)
在本文里,我們給大家整理的是關(guān)于R語(yǔ)言數(shù)組的相關(guān)知識(shí)點(diǎn),有興趣的朋友們可以跟著學(xué)習(xí)參考下。2021-04-04

