找中位数问题——分治法
来源:互联网 发布:免费动画视频制作软件 编辑:程序博客网 时间:2024/06/03 09:29
题目:设A和B都是从小到大已经排好序的n个不等的整数构成的数组, 如果把A与B合并后的数组记作C,设计一个算法找出C的中位数。
解题思路:
思路一:
对将A和B合并数组成C,并且进行排序,然后直接输出中位数。
该算法的时间复杂度为:O(nlogn),空间复杂度为:O(n)。
思路二:
利用分治法。
假定A[0,……,n-1] 和 B[0,……,n-1] 是输入数组,令k = [n/2] (向下取整),取A[k] 和 B[k]比较。
- 如果A[k] == B[k],则A[k]就是所求的中位数,直接输出,算法结束;
- 如果A[k] < B[k],则A[0,……,k-1] 和 B[k+1,……,n-1] 不含有C的中位数,直接舍弃,下一步递归查找的子问题是A[k,……,n-1] 和 B[0,……,k](注:C中位数必定在这个区间之内);
- 如果A[k] > B[k],则A[k+1,……n-1] 和 B[0,……,k-1]不含有C的中位数,直接舍弃,下一步递归查找的子问题是A[0,……,k] 和 B[k,……,n-1].
- 当n == 1,A和B中都只剩下一个数,那么取中位数mid = (A[1] + B[1])/2,算法结束;
该算法每次将子问题减半(至多差常数1)。
时间复杂度满足方程:
W(n) = W(n/2) + 1
W(1) = 1
解该方程得:W(n) = O(logn),即时间复杂度为:O(logn)
0 0
- 找中位数问题——分治法
- 初识分治法,动态规划——中位数,Gray码与零钱问题
- hlg1398邮局问题【找中位数】
- hlg1398邮局问题【找中位数】
- 【leetcode4】用分治算法计算中位数问题
- 分治法找假币
- 分治法找假币
- 找中位数
- 找中位数
- 主元素,中位数以及快速排序问题(分治法问题)
- 算法实验之分治法求中位数
- 算法实验之分治法求中位数
- 分治法找最大值最小值
- 分治法——循环赛日程安排问题
- 分治法——最接近点问题
- 分治法——棋盘覆盖问题
- 分治法——棋盘覆盖问题
- 分治策略 求两同长数组的中位数问题
- HBase连接池 -- HTablePool被Deprecated之后
- shell grep详解
- 面试题4:替换空格 和清除空格
- Magento的订单相关的SQL(订单编号、创建时间、总金额、收货人、收货人地址、收货人城市、州或省(简称)、收货邮编、收货人电话、付款人邮箱)
- 判别二叉树T是否为完全二叉树
- 找中位数问题——分治法
- 蜀中猿从学oracle,02,时间2015-5-15
- HEVC学习---开篇
- nodejs代码修改记录
- IOS Quartz 各种绘制图形用法
- 2015谷歌I/O大会综述:Android M、Android Studio、云端测试工具
- 佳澜夏天补水美白面膜
- jasperserver 创建带查询的报表
- 泛型初探2