算法设计之分治法
来源:互联网 发布:超星尔雅网络登录页面 编辑:程序博客网 时间:2024/05/16 12:42
当问题满足以下条件时,可以使用分治法解决问题:
1.问题可以分解为规模更小、问题类似的子问题;
2.可以直接得到子问题的解;
3.合并子问题的解可以得到原问题的解。
为了熟悉分治法的使用,编码解决以下问题:
一、分治法求最大最小值:
package algrithom;import java.util.Arrays;public class maxmin { public static void main(String[] args) { int arr[] = { -2, -9, 0, 5, 2 }; int result[] = new int[2]; result = minMax(arr, 0, arr.length - 1); System.out.println(Arrays.toString(result)); } public static int[] minMax(int[] arr, int l, int r) { int min = 0; int max = 0; if (l == r) { min = arr[l]; max = arr[l]; } else if (l + 1 == r) { if (arr[l] < arr[r]) { min = arr[l]; max = arr[r]; } else { min = arr[r]; max = arr[l]; } } else { int mid = (l + r) / 2; int[] preHalf = minMax(arr, l, mid); int[] postHalf = minMax(arr, mid + 1, r); min = preHalf[0] < postHalf[0] ? preHalf[0] : postHalf[0]; max = preHalf[1] > postHalf[1] ? preHalf[1] : postHalf[1]; } return new int[] { min, max }; }}时间复杂度为T(n)=3n/2-2。
二、分治法之二分搜索
package algrithom;public class Findkeywords {/** * 二分查找 * @param array * @param left * @param right * @param key * @return */public static int find(int[] array,int left,int right,int key){//int n=array.length;int mid;if(left<=right){mid=(right+left)/2;if(key==array[mid]) return mid;else if(key<array[mid]) return find(array, left, mid, key);else if(key>array[mid]) return find(array, mid, right, key);}return -1;}public static void maxmin(){}public static void main(String args[]){int[] array={1,2,3,4,5,6,7,8,9};int key=9;Findkeywords fk=new Findkeywords();int result=find(array, 1, 9, key);System.out.print(result);}}
0 0
- 算法设计之分治法
- 设计算法之分治法
- 算法设计之分治
- 常用算法设计方法之分治法
- 算法设计之分治法、减治法
- 设计算法之分治法(补充)
- 算法导论笔记一:算法设计之分治法
- 算法之分治法
- 算法之分治法
- 分治法 - 合并算法设计
- 算法设计与分析之分治思想
- 算法基础之分治法
- 基本算法之分治法
- 排序算法之分治法
- 算法之分治法小结
- 算法导论之分治法
- 算法导论之分治法
- 基础算法之分治法
- HDU1317( 负权处理)
- 新的开始
- php进阶笔记之数组
- servlet的几种匹配方式
- Lucene.net站内搜索1——SEO优化
- 算法设计之分治法
- Matlab资料汇总暨MATLAB中文论坛帖子整理(一)
- 类std::iterator的类型成员
- design_pattern_factory
- 互联网协议入门(一)
- 64位操作系统同时装32位和64位的eclipse方法
- 20150304 new semester kick off meeting by Prof. Wang---summary
- Oracle数据库数据导出XML,Blob字段处理
- C语言中的位运算