算法 上机 第四题
来源:互联网 发布:天下手游激活码淘宝 编辑:程序博客网 时间:2024/05/18 00:59
题目:
Give a divide and conquer algorithm for the following problem: you are given two sorted lists of size m and n, and are allowed unit time access to the ith element of each list. Give an O(lg m + lgn) time algorithm for computing the kth largest element in the union of the two lists. (For simplicity, you can assume that the elements of the two lists are distinct).
分析://本题的主要思想是 分治,首先 是数学 上的推导。(假设 数组 都是 有序 且 从大到小排列)// A B 数组,各有 m,n,个元素。x,y分别是 中点元素 把 AB 分成 俩 部分。A[x] 前面 x 个 元素,假如 A[x]<B[y];//那么 A[x] 前面 至少有x+y+1 个元素 比她大,如果 要查询的kth largest <=x+y+1;可以肯定的是 A[x]后面的元素 不在 考虑范围之内//则把 范围 缩小为A数组的一半,如果k>x+y+1 ,由于 B[y]后面的元素至少 为n-y-1+m-y-1+1=m+n-(x+y+1) 可知 B[y]前面的元素//至多为x+y+1;那么 B[y] 前面的元素 是不在考虑范围之内的,同样可以 删除,从而达到减小查询范围的目的。注意 当 把 前面的大数减少之后 // k值 也相应 的变化。举例:若满足条件A[x]<B[y],且 k> x+y+1, 第一次递归应该是(al,ar,bm+1,br,k-(bm-bl+1));
public class Work4 {public static int find_kth(int[] a,int[] b,int al,int bl,int ar,int br,int k){int am=(al+ar)/2;int bm=(bl+br)/2;if(al>ar){return b[bl+k-1];}if(bl>br){return a[al+k-1];}if(a[am]>b[bm]){if(k<=am-al+bm-bl+1){return find_kth(a, b, al, bl, ar, bm-1, k);}else{return find_kth(a, b, am+1, bl, ar, br, k-(am-al+1));}} else{if(k<=am-al+bm-bl+1){return find_kth(a, b, al, bl, am-1, br, k);}else{return find_kth(a, b, al, bm+1, ar, br, k-(bm-bl+1));}}}public static void main(String[] args){int[] a=new int[]{4,3,2};int[] b=new int[]{7,6,5,4,3,2,1};for(int i=1;i<10;i++){System.out.println(find_kth(a, b, 0, 0, 2, 6, i));}}}
- 算法 上机 第四题
- //Dijkstra算法大连理工大学数据结构上机第四章
- Floyed算法大连理工大学数据结构上机第四章
- BIT2009年上机题第四题
- ZJU 09 复试上机 第四题
- 数值分析第四章上机实习题
- 再接再厉 第四次上机
- 第四次上机实验
- 第四次上机实验
- 第四次上机实验
- 第四次上机报告
- 第四次上机作业
- 第四次上机作业
- 第四次上机实验
- 第四次上机作业
- 第四次上机实验
- 第四次上机实验
- 第四次上机实验
- zoj3953 贪心 training 3
- Boost---在Windows上的入门(1)
- LeetCode Algorithms 5. Longest Palindromic Substring
- Android一整套图片解决方案
- caffe学习(7)------网络迭代时间测试
- 算法 上机 第四题
- 题目1085:求root(N, k)
- 使用C3P0连接池
- DAY1——腾讯训练营
- 进程调度算法--时间片轮转算法
- HTML5-canvas
- 小程序,大技巧
- 编辑,修改chm帮助文档,无需修改繁琐的html文件,可以直接编辑修改chm
- 欢迎使用CSDN-markdown编辑器