资源简介
游程编码(信息论课程设计)
代码片段和文件信息
#include“iostream.h“
#include
#include“stdlib.h“
#include“vector“
#include“algorithm“
#include“math.h“
using namespace std;
struct data
{//用于存储码字及其编码结果
int mz;
vector code;
};
struct rle
{//用于存储每个码字及其个数
int length;
int mz;
};
int get_gd(int n)
{//用于求出编码的长度
int i=0;
int j=n-1;
while(j>0)
{
j=(j-j%2)/2;
i++;
}
return i;
}
void Creadmz(int hdvector& vdint hs)
{//用于构建码字
int w=0;
int ws=get_gd(hd);
for(int i=0;i {
data d;
d.mz=i+hs;
w=i;
while(w>0)
{
if(w % 2 == 1)
d.code.push_back(‘1‘);
else d.code.push_back(‘0‘);
w=(w-w%2)/2.0;
}
for(int m = d.code.size();m d.code.push_back(‘0‘);
vd.push_back(d);
}
}
void print( vectorvd)
{//用于输出编码结果表明
for(int i=0;i {
cout< for(int j=vd[i].code.size()-1;j>=0;j--)
cout< cout< }
}
void print1( vector re)
{//输出码及其个数的组合
for(int i=0;i {
cout<<“<“<“<<“ “;
}
}
template
void print2(vector cdint n)
{//输出编解码结果
int num=0;
for(int i=0;i {
cout< num++;
if(num%n==0) cout< }
cout< }
bool read(vector &vrint hdint & corint &rows)
{//读入要编码的灰度矩阵
int rowacr;
rle re;
cout<<“请输入矩阵的行列数:“< cin>>row;
cin>>acr;
cor=acr;
rows=row;
cout<<“请输入灰度值矩阵:“< for(int i=0;i
{
int n;
n=re.mz=0;
if(n==re.mz)
{
cin>>n;
if(n>=hd){vr.clear(); return false;}
}
for(int j=1;j {
re.mz=n;
re.length=0;
while(n==re.mz&&j {
re.length++;
j++;
cin>>n;
if(n>=hd){vr.clear(); return false;}
}
if(n!=re.mz)
{
vr.push_back(re);
if(j==acr)
{
re.mz=n;
re.length=1;
vr.push_back(re);
}
}
else if(j==acr)
{
if(n==re.mz)
{
re.length++;
vr.push_back(re);
}
else {
re.mz=n;
re.length=1;
vr.push_back(re);
}
}
else vr.push_back(re);
}
}return true;
}
bool read1(vector & vcint num)
{//用于读取要解码的序列
cout<<“请输入你要解码的序列(以‘#‘号结束):“< char ch;
cin>>ch;
while(ch!=‘#‘)
{
vc.push_back(ch);
cin>>ch;
if(ch!=‘0‘&&ch!=‘1‘&&ch!=‘#‘) {
cout<<“你输入的码序列不正确请较正后rr再输入。“;
vc.clear();
return false;
}
}
if(vc.size()%num!=0)
{
cout<<“你输入的码序列不正确请较正后再输入。“;
vc.clear();
return false;
}
return true;
}
int find(vector vdint x)
{//用于查找要编码的灰度值是否在灰度级范围内如果在反回相应码在编码序列中的位置
int low=0;
int high=vd.size()-1;
int mid=0;
while(low<=high)
{
mid = (low + high)/2;
if(vd[mid].mz==x) return mid;
else if(x else low = mid +1;
}
cout<<“the element ‘“< return -1;
}
void Encode(vector vrvector vdvector vhvector &cd)
{//
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 270394 2007-07-05 23:08 RunLength_finsh\Debug\RunLength.exe
文件 116566 2007-07-05 23:08 RunLength_finsh\Debug\RunLength.obj
文件 771072 2007-07-05 23:08 RunLength_finsh\Debug\RunLength.pdb
文件 115712 2007-07-06 10:05 RunLength_finsh\Debug\vc60.idb
文件 110592 2007-07-05 23:08 RunLength_finsh\Debug\vc60.pdb
文件 5512 2007-07-05 23:08 RunLength_finsh\RunLength.cpp
文件 3437 2007-06-03 16:14 RunLength_finsh\RunLength.dsp
文件 541 2007-06-03 16:14 RunLength_finsh\RunLength.dsw
文件 50176 2007-07-06 10:22 RunLength_finsh\RunLength.ncb
文件 48640 2007-07-06 10:22 RunLength_finsh\RunLength.opt
文件 252 2007-07-06 10:04 RunLength_finsh\RunLength.plg
文件 93696 2007-07-06 10:21 RunLength_finsh\游程编码.doc
目录 0 2007-11-07 16:11 RunLength_finsh\Debug
目录 0 2008-06-25 17:12 RunLength_finsh
----------- --------- ---------- ----- ----
1586590 14
评论
共有 条评论