百度文库1 《信息论课程设计》———实现香农编码、费诺编码信计 0801 班杨兴勃 0808060121 百度文库2 目录百度文库3 香农编码一、课题描述:对于给定的信源的概率分布,按照香农编码的方法进行计算机实现。二、课程设计目的:(1)进一步熟悉香农编码算法;(2)掌握程序设计和调试技术中数值的进制转换、数值愈字符串之间的转换等技术。三、课程设计要求:(1)输入:信源符号个数q 、信源的概率分布P ;(2)输出:每一个信源符号对应的香农编码码字。四、算法分析:2.1、数据结构分别用数组p、q、 k 存放输入的概率,累加概率、码字长度;2.2 、算法基本原理给定某个信源符号的概率分布,通过以下的步骤进行香农编码:1)信源符号按概率从大到小排列;2)对信源符号求累加和,表达式: P i=Pi-1 +p(x i) ;3)求自信息量,确定码字长度。自信息量I(xi)=-log(p(xi)); 码字长度取大于等于自信息量的最小整数;4)将累加和用二进制表示,并取小数点后码字的长度的码。百度文库4 五、香农编码流程图:六、程序设计代码:#include #include #include #include 开始输入符号个数N和相应概率X[i] 按概率由大到小排序按公式求码长求出对应位的概率累加和按乘 2 取余法则, 将累加概率转换为二进制结合求得的对应码长, 将二进制的累加概率取对应长度的作为相应码字输出信源、概率、累加概率、 码长和码字结束百度文库5 using namespace std; void bubble(double *p,int n)//排序{ for(int i=0;i=-log(p[i])/log(2) ) k[i]=j; } double I=-log(p[i])/log(2); int temp=int(I); if(I-temp==0) k[i]=temp; else k[i]=temp+1; } } void code(int *k,double *pa,string *str,int n)//求编码{ for(int i=0;i=1) { str[i]+="1"; s=s-1; } e...