⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 图像压缩问题.cpp

📁 一个用C++编写的图像压缩问题的简单代码
💻 CPP
字号:
//图像压缩问题

#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#define N 100
int s[N], l[N], b[N];

int length(int n)
{
	int k=0;
	while(n>0)
	{
		k++;
		n/=2;
	}
	return k;
}

void Compress(int n, int p[])
{
	int Lmax=256,header=11;
	s[0]=0;
	for(int i=1; i<=n; i++)
	{
		b[i]=length(p[i]);
		int bmax=b[i];
		s[i]=s[i-1]+bmax;
		l[i]=1;
		for(int j=2; j<=i && j<=Lmax; j++)
		{
			if(bmax<b[i-j+1]) bmax=b[i-j+1];
			if(s[i]>s[i-j]+j*bmax)
			{
				s[i]=s[i-j]+j*bmax;
				l[i]=j;
			}
		}
		s[i]+=header;
	}
}

void Traceback(int n, int &i)
{
	if (n==0) return;
	Traceback(n-l[n], i);
	s[i++]=n-l[n];
}

void Output(int n)
{
	cout<<"The optimal value is "<<s[n]<<endl;
	int m=0;
	Traceback(n, m);
	s[m]=n;
	cout<<"Decompose into "<<m<<" segments:"<<endl;
	for(int j=1; j<=m; j++)
	{
		l[j]=l[s[j]];
		b[j]=b[s[j]];
	}
	for(j=1; j<=m; j++) cout<<l[j]<<'\t'<<b[j]<<endl;
}

void main()
{
	srand(time(0));
	int i, p[N];
	for(i=0; i<N; i++) p[i]=rand()%256;
	Compress(N, p);
	Output(N);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -