Shannon 编码
1.实验目的
(1)进一步熟悉Shannon 编码过程;
(2)掌握C语言程序设计和调试过程中数值的进制转换,数值与字符串之间的转换等技术。
2.实验要求
(1)输入:信源符号个数 ,每个信源符号的概率分布P从键盘输入
(2)输出:每个信源符号对应的Shannon 编码的码字
(3)源程序格式整齐清晰,注释简单明了。
3.c++程序
#include<iostream>
#include<vector>
#include<string>
#include <math.h>
using namespace std;
int main(){
cout<<"请输入信源符号个数:"<<endl;
int n;
cin>>n;
cout<<"请输入符号分布概率"<<endl;
vector<float> p,p1;
vector<int> l;
float s=0;
for(int i=0;i<n;i++){
p1.push_back (s);
float a;
cin>>a;
double b=-log(a)/log(2);
l.push_back((int)b+1);
p.push_back(a);
s+=a;
}
for(int j=0;j<n;j++){
string str="";
float c=p1[j];
for(int k=0;k<l[j];k++){
if(c*2<1){
str+="0";
c=c*2;
}else{
str+="1";
c=c*2-1;
}
}
cout<<"第"<<i<<"个信源符号的二元码是:"<<str<<endl;
}
return 0;
}
4.运行截图