java递归分治算法
来源:互联网 发布:加湿器 超声波 知乎 编辑:程序博客网 时间:2024/05/21 09:33
java递归分治算法线性选择
- * 递归分治算法之线性选择
- */
- package 递归分治;
- /*
- * 线性选择算法
- * 给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素
- * 在最坏情况下,算法randomizedSelect需要O(n2)计算时间,
- * 可以证明,算法randomizedSelect可以在O(n)平均时间内找出n个输入元素中的第k小元素。
- */
- import java.util.Random;
- public class randomizedSelectTest {
- private static int randomizedPartition(int[] a,int p,int r){
- int i=random(p,r);
- swap(a,i,p);//交换枢纽元素到区间左端
- return partition(a,p,r);
- }
- /**
- * 线性选择指定数组中第k小的元素
- * @param a 指定数组
- * @param p 区间左端
- * @param r 区间右端
- * @param k 数组的大小位置
- * @return 返回指定数组中第k小的元素
- */
- @SuppressWarnings("unused")
- private static int randomizedSelect(int[] a,int p,int r,int k){
- if(p==r)return a[p];
- int i=randomizedPartition(a,p,r);
- int j=i-p+1;//左端元素个数
- //第k小的元素在左端
- if(k<=j)return randomizedSelect(a,p,i,k);
- else//第k小的元素在右端,并且左端已经有j个比它小的元素
- //所以只要找右端中的第k-j小的元素就可以
- return randomizedSelect(a,i+1,r,k-j);
- }
- private static int random(int i,int j){
- Random r=new Random();
- return r.nextInt(j-i)+i;
- }
- private static int partition(int[] a,int p,int r){
- int i=p,j=r+1;
- int x=a[p];
- while(true){
- while(a[++i]<x&&i<r);
- while(a[--j]>x);
- if(i>=j)break;
- swap(a,i,j);
- }
- a[p]=a[j];
- a[j]=x;
- return j;
- }
- private static void swap(int[] a,int i,int j){
- int temp=a[i];
- a[i]=a[j];
- a[j]=temp;
- }
- public static void main(String[] args){
- }
- }
- 详细可看http://www.digku.com/a/s_programming/java/2012/1128/276.html
http://www.cnblogs.com/blfwenwu/
- java递归分治算法
- 分治与递归算法
- 递归与分治算法
- 递归分治算法之二分搜索(Java版本)
- 递归分治算法之棋盘分割问题(Java版本)
- 递归分治算法之全排列问题(Java版本)
- 递归分治算法之整数划分问题(Java版本)
- 递归分治算法之N皇后问题(Java版本)
- 递归分治算法之矩阵链问题(Java版本)
- 递归分治算法之合并排序(Java版本)
- 递归分治算法之随机快速排序(Java版本)
- 递归分治算法之比赛日程表(Java版本)
- 递归分治算法之线性选择(Java版本)
- 递归分析和分治算法
- 算法--递归与分治策略
- 分治+递归:归并排序的递归算法
- 递归分治算法之合并排序算法2(Java版本)
- java算法:分治法
- NHibernate与EF(Entity Framework)的区别
- Linux下Mercurial (hg)配置说明
- 不可不学的摄影技巧.1—构图
- ubuntu server 12.04激活root账号
- Android模拟器访问Tomcat和IIS7
- java递归分治算法
- 做10年Windows程序员与做10年Linux程序员的区别
- 【技术直通车】使用FME Extension for ArcGIS读取ArcPad AXF文件
- 不可不学的摄影技巧.2——美姿
- linux配置IP的方法
- C#构造函数的运用
- android手势操作滑动效果触摸屏事件处理
- hdu 2045 LELE的RPG难题
- 不可不学的摄影技巧.3——摄影小窍门