【分治法】中位数问题,C++
采用分治法完成如下任务:
中位数问题
问题描述
设X[ 0 : n - 1]和Y[ 0 : n – 1 ]为两个数组,每个数组中含有n个已排好序的数。找出X和Y的2n个数的中位数。
编程任务
利用分治策略试设计一个O (log n)时间的算法求出这2n个数的中位数。
数据输入
由文件input.txt提供输入数据。文件的第1行中有1个正整数n(n<=200),表示每个数组有n个数。接下来的两行分别是X,Y数组的元素。
结果输出
程序运行结束时,将计算出的中位数输出到文件output.txt中。
输入文件示例
input.txt
3
5 15 18
3 14 21
输出文件示例
output.txt
14
实现提示
比较两个序列的中位数大小,如果两个数相等,则该数为整个2n个数据的中位数,否则通过比较,分别减少两个序列的查找范围,确定查找的起止位置,继续查找。
#include<iostream>
using namespace std;int getMedian(int X[], int Y[], int XLow, int XHigh, int YLow, int YHigh);int main() {int size, i;if (freopen("input.txt", "r", stdin) == NULL)cout << "输入文件打开失败" << endl;cin >> size;int *X = new int[size];int *Y = new int[size];for (i = 0; i < size; i++)cin >> X[i];for (i = 0; i < size; i++)cin >> Y[i];if (freopen("output.txt", "w", stdout) == NULL)cout << "输出文件打开失败" << endl;cout << getMedian(X, Y, 0, size - 1, 0, size - 1) << endl;delete[]X;delete[]Y;fclose(stdin);fclose(stdout);return 0;
}int getMedian(int X[], int Y[], int XLow, int XHigh, int YLow, int YHigh) {if (XLow == XHigh) return X[XLow];else if (YLow == YHigh)return Y[YLow];int XMid, YMid; XMid = (XLow + XHigh) / 2; YMid = (YLow + YHigh) / 2; if (X[XMid] > Y[YMid]) {XHigh = XMid; YLow = YMid; }else if (X[XMid] < Y[YMid]) {XLow = XMid; YHigh = YMid; } else return X[XMid]; getMedian(X, Y, XLow, XHigh, YLow, YHigh);
}
【分治法】中位数问题,C++相关推荐
- 利用分治法求两个有序数组的中位数
也是看了一篇很好的博客,思路很清晰,只是有些地方感觉博主没有详细解释,后来理解了,做了一个小总结.原博客链接:点击打开链接 题目还是昨天的那道题目: 给定两个大小为 m 和 n 的有序数组 nums1 ...
- 【分治法】解决中位数问题、格雷码问题以及分治法直接折半存在的问题讨论————武汉理工大学算法分析实验1
AlgorithmExperiment 算法分析课实验 分治法的核心思想是将问题分为若干子问题去,使规模一步步缩小,最终分到一步就能得出结果.要注意每个子问题需要性质相同而且相互不重复. 采用分治法完 ...
- 算法设计思想(4)— 分治法
1. 分治法概念 分治,顾名思义,分而治之. 具体来说,它先将一个难以直接解决的大问题,分割成一些可以直接解决的小问题.如果分割后的问题仍然无法直接解决,那么就继续递归地分割,直到每个小问题都可解. ...
- Java实现算法导论中最近点对问题分治法
最近点对问题:给定平面上的N个点,找出距离最近的两个点.分治法: 1 )如果数组长度(即点的个数,一般≤3)在一定范围内时直接求出最近点,蛮力求解,递归退出条件: ...
- 算法分析与设计——分治法最近点对
分治法最近点对 分治法 分治法将一个难以直接解决的大问题划分成一些规模较小的子问题,分别求解各个子问题,再合并子问题的解得到原问题的解. 一般来说,分治法的求解过程由以下三个阶段组成: 划分:把规模为 ...
- java最接近对点及距离_最接近点对问题_分治法
一.问题描述 给定平面上的n个点,找其中的一对点,使得在n个点组成的所有点对中该点对间的距离最小. 二.解题思路及所选算法策略的可行性分析 思路:利用分治法来解决问题.递归子结构求最接近点对总体可分为 ...
- 分治法在求解“最近对”问题中的应用(JAVA)
分治法在求解"最近对"问题中的应用 最近对问题在蛮力法中有过讲解,时间复杂度为O(n^2),下面将会采用分治法讲解这类问题,时间复杂度会降到O(nlogn) 我们将笛卡尔平面上n& ...
- 分治法在排序算法中的应用(JAVA)--快速排序(Lomuto划分、Hoare划分、随机化快排)
分治法在排序算法中的应用--快速排序 时间复杂度:平均O(nlogn),最坏O(n^2) 如果说归并排序是按照元素在数组中的位置划分的话,那么快速排序就是按照元素的值进行划分.划分方法由两种,本节将主 ...
- 程序员的算法课(13)-分治法
一.什么是分治 [百度百科]分治法((Divide and Conquer))可以通俗的解释为:把一片领土分解,分解为若干块小部分,然后一块块地占领征服,被分解的可以是不同的政治派别或是其他什么,然后 ...
最新文章
- Hdu 1072 【广搜】.cpp
- Java中的注解以及应用 @Deprecated @SupressWarning @Override
- LeetCode 226. 翻转二叉树(DFS BFS)
- 北交大计算机学院复试经验,2014考研复试:过来人考研复试经验谈-北交大计算机系...
- 【转载】Android之用PopupWindow实现弹出菜单
- 浙大学霸本科生顶会研究!只需20分钟音频,AI就能逼真模仿你的声音
- 领域驱动设计DDD之读书笔记
- Oracle在线撤销表空间,Oracle创建、管理撤销表空间
- Java自学要多久?
- 【软件资源】MATLAB 7.0 安装教程
- 一个简单的品优购项目----html+css
- Typora图片上传失败问题
- 安装nodejs遇到的坑
- 2023考研路上,恭祝诸君只争朝夕,不负韶华
- 上twitter_如何在Twitter上找到重大新闻
- 第7章概率和样本:样本均值的分布
- 高逼格技能教你玩转Excel
- 三维激光扫描技术知识检测----选择、判断
- 《区块链技术进阶与实践》之积分系统示例讲解
- ngro_k服务器搭建(本地电脑与微信交互)
热门文章
- VUEJS项目实践六之No PostCSS Config found in
- java学习第12天
- Picasso之图片缓存机制二ListView篇
- 阿里云的云安全防护产品有哪些?都有什么作用?
- word快捷键粘贴不能用
- Openvswitch手册(4): Mirror
- 奇兔recovery卡刷教程_奇兔Recovery(安卓手机刷机助手)V8.2.1.4 最新版
- 计算机应用基础精品课程申报表,计算机应用基础精品课程申报书.doc
- 全藏字【藏文字】的生成算法设计
- 龙芯3a5000部署nacos 1.4低版本方法