本文共 1076 字,大约阅读时间需要 3 分钟。
对某一离散无记忆信源实现费诺编码,输出消息符号及其对应的码字。
设离散无记忆信源编码过程如下:
1、将信源发出的N个消息符号按其概率的递减次序依次排列。
2、将依次排列的信源符号依概率分成两组,使两个组的概率和近于相同,并对各组赋予一个二进制代码符号“0”和“1”(编m进制 码就分成m组)。
3、将每一个大组的信源符号进一步再分成两组,使划分后的两个组的概率和近于相同,并又分别赋予两组一个二进制符号“0”和“1”
4、如此重复,直至每组值只剩下一个信源符号为止
5、信源符号所对应的码符号序列即为费诺码
Dev
#include#include float sum1=0,sum2=0,num[100]= { 0}, a[100]= { 0},sum=0,temp,code[100]= { 0},H=0,k=0;int i,j,cnt,num1=0,codeside=0,ks[100]= { 0},zj[100]= { 0},zh[100]= { 0},s[100][100]= { 0},K[100]= { 0};int findPoint(int curPoint,int cnt) { //找出分界点 int index=curPoint; for(i=curPoint; i 1) { Final(ks[codeside-1],zj[codeside-1]); } if((zh[codeside-1]-zj[codeside-1])>1) { Final(zj[codeside-1],zh[codeside-1]); } codeside--;}int main() { printf("请输入信源个数:\n"); scanf("%d",&cnt); for(i=0; i 1.0001||sum<0.9999) { printf("您输入的数据不正确,请重新输入\n"); sum=0; return 0; } else { //冒泡排序 for(i=0; i a[j]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } //求出-lb(p(ai)) for(i=0; i
转载地址:http://fmfki.baihongyu.com/