图片压缩算法--动态规划
来源:互联网 发布:桃源网络硬盘安装 编辑:程序博客网 时间:2024/05/22 06:02
#include <iostream>#include <memory.h>#define N 100using namespace std;int p[N+1] , s[N+1] , l[N+1] , b[N+1];//像素点集 ,每段所需长度 ,每段像素个数 , 每段的像素点位数/*-----------计算像素的位数*/int length(int i){ int k = 1; i = i/2; while(i > 0){ k++; i = i/2; } return k;}/*------------动态规划--计算最优存储*/void Compress(int n , int p[] , int s[] , int l[] , int b[]){ int Lmax = 256 , header = 11; s[0] = 0; for(int i = 1 ; i <= n ; i++){ b[i] = length(p[i]);//---计算像素位数 例 : 2 --->>10 所占位数为2位 1*2^1+0*2^0 = 2 , 256--->>10000000 所占位数为8位 1*2^8+0*2^7.....0*2^0 = 256 int bmax = b[i];//初始化最大位数 s[i] = s[i-1]+bmax;//初始化第i段所需空间 l[i] = 1;//初始化第i段像素个数 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){//如果按最大位数存储,从第i-j个到第i个所需存储空间小于原空间 s[i] = s[i-j]+j*bmax; l[i] = j; } } s[i] += header;//加入头 1<=l[i] <=256-->2^8 1<=b[i]<=8 -->2^3 所需存储空间为 8+3 = 11 }}void Traceback(int n , int &i , int s[] , int l[]){ if(n == 0) return ; Traceback(n-l[n] , i , s , l); s[i++] = n-l[n];//重新为s[]数组赋值,用来存储分段位置}void Output(int s[] , int l[] , int b[] , int n){ //在输出s[n]存储位数后,s[]数组则被重新赋值,用来存储分段的位置 cout<<"压缩所需存储空间: "<<s[n]<<endl; int m = 0; Traceback(n , m , s , l); s[m] = n; cout<<"将原灰度段分成: "<<m<<" 段存储。"<<endl; for(int j = 1 ; j <= m ; j++){ l[j] = l[s[j]]; b[j] = b[s[j]]; } for(int j = 1 ; j <= m ; j++) cout<<"段长度:"<<l[j]<<"\t压缩存储位数:"<<b[j]<<endl;}int main(){ int n; memset(s , 0 , sizeof(s)); cout<<"请输入像素的个数:"<<endl; cin>>n; cout<<"请输入 "<<n<<" 个像素点的像素"<<endl; for(int i = 1 ; i <= n ; i++) cin>>p[i]; Compress(n , p , s , l , b); Output(s , l , b , n); return 0;}/*请输入像素的个数:6请输入 6 个像素点的像素10 12 15 255 1 2压缩所需存储空间: 57将原灰度段分成: 3 段存储。段长度:3 压缩存储位数:4段长度:1 压缩存储位数:8段长度:2 压缩存储位数:2Process returned 0 (0x0) execution time : 18.252 sPress any key to continue.*/
0 0
- 图片压缩算法--动态规划
- 动态规划 --压缩算法
- 算法_动态规划_图像压缩
- 动态规划之图像压缩算法
- 状态压缩动态规划
- 状态压缩动态规划
- 状态压缩动态规划
- 状态压缩动态规划
- 状态压缩动态规划
- 动态规划!状态压缩
- 状态压缩动态规划
- 0016算法笔记——【动态规划】图像压缩问题
- 0016算法笔记——【动态规划】图像压缩问题
- 0016算法笔记——【动态规划】图像压缩问题
- 动态规划专题:算法合集之《基于连通性状态压缩动态规划问题》
- 算法--动态规划算法
- 动态规划法压缩矩阵
- 【状态压缩】【动态规划】电子竞技
- Jump Game II--LeetCode
- 母函数
- 关于cocos2dx widget窗口中的关闭按钮 删除自身 的时候崩溃bug
- iOS App 自动登录的安全性分析
- 笨方法求Convert Sorted List to Binary Search Tree
- 图片压缩算法--动态规划
- 蓝桥杯 三角螺旋阵
- 每月自评之十一:2015年2-3月
- 前端工具库
- srm 305 div2 1050(bfs中级)
- WebService创建、发布及在IIS上部署
- 数组的简单学习
- BNU 斩(超级大水题)
- SharedPreferences(保存用户偏好参数)