• 大小: 272KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: 其他
  • 标签: 游程编码  

资源简介

游程编码(信息论课程设计)

资源截图

代码片段和文件信息

#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


评论

共有 条评论