费诺码描述

信源符号以概率递减的次序排列,排列好的信源符号划分为两大组,使这两组的概率和近于相同,并各赋于一个二元码符号 0 和 1 ,重复这个过程,直至每一个小组只剩下一个信源符号为止。最终的信源符号序列就是所对应的编码码字。

实验需求:

输入:信源符号个数,每个信源符号的概率分布
输出:每个信源符号对应的费诺编码的码字

代码如下:

#include<bits/stdc++.h>
using namespace std;
int main(){void Fenocode(double p[],int a ,int b,string c); // 函数声明 printf("请输入信源符号数:");int count;scanf("%d",&count);double p[count];printf("请按顺序输入每个信源符号的概率:"); // 按顺序输入 可从小到大 亦可从大到小 for(int i = 0 ; i<count ; i++){scanf("%lf",&p[i]);}string feno = ""; // 费诺编码结果 Fenocode(p,0,count-1,feno); return 0;
}
int cnt = 1; // 个数
void Fenocode(double p[],int begin ,int end,string fenocode){double getSum(double p[],int a,int b); // 函数声明 // 边界条件 if(begin >= end){// 输出结果 cout<<"第";cout<<cnt;cout<<"个费诺编码为:"+fenocode<<endl; cnt++;return;}// 找到分界值double sum = getSum(p,begin,end);int index = -1; // 初值设定 double minNum = sum; // 设定最小值 double tempSum = 0; // 前几个的和 for(int i = begin ; i <= end ; i++){tempSum += p[i];if(abs(sum-2*tempSum) < minNum){ index = i; // 记录当前最小的值minNum = abs(sum-2*tempSum); // 更新最小值 }}// 递归左边部分 Fenocode(p,begin,index,fenocode+'0'); // 左边添加0// 递归右边部分 Fenocode(p,index+1,end,fenocode+'1'); //右边添加1
}
double getSum(double p[] , int begin , int end){double sum = 0;for(int i = begin ; i <= end ; i++){sum += p[i];}return sum;
}

结果如下:

C/C++ 费诺编码实现相关推荐

  1. 费诺码设计matlab,费诺编码的matlab实现.doc

    费诺编码的matlab实现.doc 多媒体技术实验报告学院:城南学院 姓名:学号:指导老师:尹波时间:2015年11月25日 教师评语:成绩 评阅教师 日期 实验一:费诺编码的matlab实现1实验目 ...

  2. 信源编码算法(费诺编码哈夫曼编码)

    信源编码算法 费诺编码 Fano coding 哈夫曼编码 Huffman coding 费诺编码 编码步骤 将信源符号按照其概率大小,从大到小排列: 将这一组信源符号分成概率之和尽可能接近或者相等的 ...

  3. 信源编码的代码实现 (香农编码、费诺编码、哈夫曼编码、游程编码、算术编码)

    文章目录 香农编码 费诺编码 哈夫曼编码 C++版 C语言版 游程编码 算术编码 香农编码 (1) 将信源消息符号按其出现的概率大小依次排列 p1 ≥ p2 ≥ - ≥ pn (2) 确定满足下列不等 ...

  4. 信息论与编码-python实现三种编码(香农编码,费诺编码,赫夫曼编码)

    香农编码,费诺编码,赫夫曼编码(python实现) 开始参考了网上其他人的代码,但后来都发现要么代码有错误,要么输出结果不符合自己的预期,于是就重新实现了一下,代码仍存在一些小问题,但是能够满足作业要 ...

  5. 2022P02014139杨智关于香农编码、哈夫曼编码和费诺编码的比较

    注:以下三种编码比较都是在二进制下讨论的,其它进制下的编码情况可以与二进制下的情况类比. 1香农编码 概念: 香农编码是是采用信源符号的累计概率分布函数来分配字码的.香农编码是根据香农第一定理直接得出 ...

  6. 基于Python实现的费诺编码

    目录 基于Python实现的费诺编码 (一)费诺编码原理及过程 1.原理 2.过程 Talk is cheap. Show me the code. 测试结果 前言:学习信息论与编码时想实现费诺编码, ...

  7. 香农费诺编码 c语言实现,信息论课程设计(香农、费诺编码)

    <信息论课程设计(香农.费诺编码)>由会员分享,可在线阅读,更多相关<信息论课程设计(香农.费诺编码)(34页珍藏版)>请在人人文库网上搜索. 1.华北科技学院信息论基础课程设 ...

  8. java费诺编码_费诺编码的分析与实现.doc

    费诺编码的分析与实现 吉林建筑大学 电气与电子信息工程学院 设计题目: 费诺编码的分析与实现 专业班级: 电子信息工程 111 学生姓名: 马 超 学 号: 指导教师: 吕卅 王超 设计时间: 201 ...

  9. 用MATLAB实现费诺编码

    一.简述 <信息论与编码>是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充.其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能, ...

  10. java实现.费诺编码_使用递归算法编写的费诺编码

    内容与设计思想 按照教材方式建立数据成员变量.设有离散无记忆信源X,P(X).二进制费诺编码为:1.将信源符号按概率从大到小的顺序排列2.将信源分成两组――按两组概率之差为最小分.3.上面一组编码为0 ...

最新文章

  1. 智慧停车产业链市场全透析
  2. DDoS高防服务如何选择?
  3. Android网络编程使用HttpClient访问web站点
  4. java 8 语法糖_Java8的lamada算是一种语法糖吗?
  5. 链表应用——多项式相加
  6. 亚马逊正式发布关系型数据库Amazon Aurora
  7. 【渝粤教育】国家开放大学2018年春季 8659-22T计算机平面设计(1)(2) 参考试题
  8. mysql常见问题记录
  9. toj 4319 盒子游戏
  10. Leetcode每日一题:16.3sum-closest(最接近的三数之和)
  11. element ui html编辑器,Vue + Element UI使用富文本编辑器
  12. Hibernate错误记录
  13. 标准数独解题之旅(用一道数独题讲解最基本的5种解题技巧)
  14. HTML常用标签总结 [建议收藏]
  15. 小程序之校园交流平台
  16. 父母生命末期,是在医院昂贵痛苦地治疗,还是接老人回家亲情陪伴
  17. 建筑业减碳绝非一招鲜 专家建议加强改造农村建筑
  18. spark history server内存不足服务自动挂掉
  19. 如何使用sz命令下载较大文件到本地
  20. bss段,data段、text段、堆heap和栈stack

热门文章

  1. java mvn命令行_Maven命令行使用:mvn clean package(打包)
  2. PS 学习笔记 18-加深工具组
  3. XP SP3 IIS 5.1版本安装包下载地址和XP SP3 IIS 5.1版本安装方法
  4. /etc/hosts.allow和/etc/hosts.deny的讲解
  5. VMware Workstation 12Pro安装步骤
  6. Linux的公平调度
  7. OA附件不能直接打开PDF文件
  8. Nginx 启停方法
  9. 承先启后 - 2021 年开源社顾问委员会年度会议圆满结束
  10. 【Web_接口爬虫_Python3_豆瓣电影TOP50_threadingrequests】(豆瓣)电影TOP-50,多线程接口爬虫电影名称和地址,自动化测试案例