我保证没有抄袭他人作业!.doc

我保证没有抄袭他人作业!.doc

我保证没有抄袭他人作业! 计算机系04级 李思宇 9.1 (《学习指导》第224页习题7.12) 设A,B是长为n的数表,已经按照非降顺序排好。如果将这2n个数全体排序,处于第n个位置的数称为中位数。设计一个最坏情况下O(log n)时间的算法求A和B的中位数。 (1) 描述算法的设计思想; (2) 证明算法的时间复杂性。 答:(1)这道题可以采用递归算法,而且用了类似二分查找的方法,因为A,B已经按照非降顺序排好,整体的中位数一般在某一部分数组中也在比较靠近中间的位置,所以每次从中间位置找起。先比较A[i]、B[n - i -1](i的初值为n/2,即A[i]为A的中位数): 若两者相等,则这个数就为全体数的中位数(这里指C[n],C为合并并且排序后的新数组)。 若A[i] B[j],又需要分类讨论: 若B[j+1] = A[i],则在C中,A[i]后面恰有(n – i ) +(n - ( j+1) ) = (n – i ) +(n - (n – i -1+1) )= n 个元素(包括A[i]自己),因此C[n]= A[i]。 若B[j+1] A[i], 则B[j+1]在B[j]与A[i]的中间,又因为B已经按照非降顺序排好,所以B[j+1]紧跟着B[j],同时,如果B[j] A[i-1],则与情况类似,B[j]前面恰有n 个元素(包括B[

文档评论(0)

1亿VIP精品文档

相关文档