1)问题描述
2)基本思路
3)代码实现
import java.util.Scanner;
public class example {
/**
*
* @param n 图像灰度数组的大小
* @param p 图像灰度数组
* @param s s[i]表示从0到i压缩为一共占多少存储空间
* @param l l代表length
* @param b b代表bits
*/1
public void Compress(int n, int[] p, int[] s, int[] l, int[] b) {
int Lmax = 256;
int header = 11;
s[0] = 0;
for (int i = 1; i <= n; i++) {
b[i] = length(p[i]);// 计算像素点p需要的存储位数
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;
}