图像压缩动态规划

对图形学不了解,看到这个题目挺懵的/** 首先,要知道:像素点存储的位数(bit)=log2(像素点的个数)+1。1<=像素点的个数<=255。其中log(像素点的个数)向下取整* 例:将像素序列表示成数组p[n]={10,9,12,40,50,35,15,12,8,10,9,15,11,130,160,240}。* 像素点存储的最大位数=log2(255)+1=8。(优先选取最大的位数为其他像素点个数存储的基准)* 因此可以选择都用8bit存储,这样一共消耗16*8=128bit的空
摘要由CSDN通过智能技术生成

对图形学不了解,看到这个题目挺懵的

/*
* 首先,要知道:像素点存储的位数(bit)=log2(像素点的个数)+1。1<=像素点的个数<=255。其中log(像素点的个数)向下取整
* 例:将像素序列表示成数组p[n]={10,9,12,40,50,35,15,12,8,10,9,15,11,130,160,240}。
* 像素点存储的最大位数=log2(255)+1=8。(优先选取最大的位数为其他像素点个数存储的基准)
* 因此可以选择都用8bit存储,这样一共消耗16*8=128bit的空间
* 观察p[1]=10,log2(10)+1=4;p[2]=log2(9)+1=4;p[3]=log2(12)+1=4......p[16]=log2(16)+1=8。
* 可以构造新的数组q[n]={4,4,4,6,6,6,4,4,4,4,4,4,4,8,8,8}记录每个位置像素点存储所需要的最少bit。
* 直接都按8bit存储虽然消耗更多的空间在,但在计算机内部指令之间的转换不需要做的查找位置的操作。
* 这里,如果这样划分	4 4 4|6 6 6|4 4 4 4 4 4 4|8 8 8,并不是说消耗的空间就是4*3+6*3+4*7+8*3=82bit。
* 就像从中文翻译成英文,可以直接翻译,一个中文对应的一个英文单词。但是从英文翻译成中文,如果对英语单词陌生,并且该单词一词多义,
* 就会出现错误翻译的情况。这里缺少相关的位置信息,因此并不能做到在A和B之间的相互转化。
* 因此需要额外消耗空间去记录相关的信息。
* 题目已经给出提示了,可以用b[j]表示划分的某一段中像素点的位数,l[j]表示划分的这一段的长度。
* 还是按	4 4 4|6 6 6|4 4 4 4 4 4 4|8 8 8划分,可以得到
*			 4 3 | 6 3 |     4 7     | 8 3 
* 题目规定1<=b[j]<=3,1<=l[j]<=8,因此最大消耗额外的记录信息的空间是3+8=11,把这个作为固定值。(我也不太懂为什么这么规定)
* 因此这样划分所占的空间为(11+4*3)+(11+6*3)+(11+4*7)+(11+8*3)=126bit。
* 但是这并不是最优解。
* 最优的划分方案为	4 4 4 6 6 6|4 4 4 4 4 4 4|8 8 8
*                     6(6>4,所以选择6) 6|4 7  | 8 3
* 所占的空间为(11+6*6)+(11+4*7)+(11+8*3)=121bit
* 
* 设计转移方程:f[i]表示考虑从第1个像素点到第i个像素点所消耗最少的bit。
* 当不进行划分时,f[i]=max[q[1],q[i]*i]+11。
* 当1<=k<i时,f[k]已经是考虑过的最优解了,需要将剩下的k+1到i,即i-k个像素点划分为一类,这一部分消耗的内存为max[q[k+1],q[i]]*(i-k)+11。
* [q[k+1],q[i]]表示区间。因此f[i]=f[k]+max[q[k+1],q[i]]*(i-k)。题目要求每个分段长度不得超过256,f[0]=0
* 因此f[i]=min(f[k]+max[q[k+1],q[i]]*(i-k)),0<=k<min{i,256}。
*/
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
using UI = unsigned int;
UI log2(UI num)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值