算法_动态规划_图像压缩
来源:互联网 发布:数据误删恢复软件 编辑:程序博客网 时间:2024/05/08 14:40
import java.util.Scanner;public class Main { private static int n;//像素点总个数 private static int[] p;//像素点灰度值序列 private static int[] s;//s[i]:像素序列{p1,p2,...,pk}的最优分段所需的存储位数 private static int[] next;//每一个连续像素段的最后像素点对应的下标 /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub init(); compress(); print(); } private static void print(){ System.out.println("存储整个像素序列所需的最少存储位数为"+s[n]); int k=n; //通过next[]数组找到每个连续像素段的最后像素点对应的下标,也就是分段工作 while(k!=0){ System.out.println("p"+(next[k]+1)+"--->p"+k+" 需要的存储位数为:"+(s[k]-s[next[k]])); k=next[k]; } } //计算s[1],s[2],...,s[n](动态规划的主要思想在这里体现) private static void compress(){ for(int i=1;i<=n;i++){ s[i]=Integer.MAX_VALUE; for(int k=1;k<=Math.min(i,256);k++){ int temp=s[i-k]+k*bMax(i-k+1,i)+11; if(temp<s[i]){ s[i]=temp; next[i]=i-k; } } } } //初始化先前定义的各项参数 private static void init(){ Scanner sc=new Scanner(System.in); n=sc.nextInt(); p=new int[n+1]; s=new int[n+1]; next=new int[n+1]; for(int i=1;i<=n;i++){ p[i]=sc.nextInt(); } } //求存储p[i],p[i+1],...,p[j]中的最大值所需的最少位数(也即这个连续段中每个像素点所需的存储位数) private static int bMax(int i,int j){ int pMax=-1; for(int k=i;k<=j;k++){ if(p[k]>pMax){ pMax=p[k]; } } return (int)Math.ceil(Math.log(pMax+1)/Math.log(2)); }}
0 0
- 算法_动态规划_图像压缩
- 算法_动态规划_货币兑换
- 算法_动态规划_电路布线
- 算法_动态规划_流水作业调度
- 算法_动态规划_漂亮打印
- 算法_动态规划总结
- 算法设计_动态规划
- 四、算法_动态规划
- 算法学习_分治算法、动态规划
- 动态规划之图像压缩算法
- 算法之道_流水线装配问题_动态规划
- 蓝桥杯_算法提高_金属采集(树形动态规划)
- 蓝桥杯_算法提高_概率计算(动态规划)
- 算法_动态规划_最长单调递增子序列
- 算法_动态规划_矩阵路径最大和
- 算法_动态规划_整数线性规划问题
- 算法_动态规划_二维01背包问题
- 算法_动态规划_独立任务最优调度问题
- Razor 标签语法(1-11) Label,Text,Hidden,Password,Radio,CheckBox,DropdownList,Href,Img,Css,JS
- http请求
- Android LayoutInflater源码分析及使用(二)
- 字符串反转
- Struts2+Jquery实现ajax并返回json类型数据
- 算法_动态规划_图像压缩
- declaration(声明)与definition(定义)
- 1.PHP 预定义接口 --- ArrayAccess(数组式访问)接口
- 使用markdown
- HDU 4585 平衡树Treap
- 运用cocoaPods 在项目中找不到头文件的解决办法
- 个人机房重构——下机与职责链的结合
- (六)ExtJs小例子之窗体组件(Window)
- 微交互怎么玩?一份简单实用的微交互设计指南(超多案例)