博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验八 费诺编码
阅读量:3969 次
发布时间:2019-05-24

本文共 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/

你可能感兴趣的文章
深入探讨C++中的引用
查看>>
assert用法
查看>>
assert用法
查看>>
堆与栈有什么区别?
查看>>
堆与栈有什么区别?
查看>>
操作系统:进程/线程同步的方式和…
查看>>
操作系统:进程/线程同步的方式和…
查看>>
Makefile的编写
查看>>
Makefile的编写
查看>>
C语言常用算法
查看>>
Samba文件服务器的配置
查看>>
Linux文件查找命令find,xargs详述
查看>>
Linux文件查找命令find,xargs详述
查看>>
写给Linux内核新手-关于Linux内核…
查看>>
写给Linux内核新手-关于Linux内核…
查看>>
牛人比较全面的内核学习建议
查看>>
牛人比较全面的内核学习建议
查看>>
实战linux内核编译
查看>>
实战linux内核编译
查看>>
Linux&nbsp;USB驱动框架分析(一)
查看>>