采用分治法完成如下任务:
中位数问题
问题描述
设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++相关推荐

  1. 利用分治法求两个有序数组的中位数

    也是看了一篇很好的博客,思路很清晰,只是有些地方感觉博主没有详细解释,后来理解了,做了一个小总结.原博客链接:点击打开链接 题目还是昨天的那道题目: 给定两个大小为 m 和 n 的有序数组 nums1 ...

  2. 【分治法】解决中位数问题、格雷码问题以及分治法直接折半存在的问题讨论————武汉理工大学算法分析实验1

    AlgorithmExperiment 算法分析课实验 分治法的核心思想是将问题分为若干子问题去,使规模一步步缩小,最终分到一步就能得出结果.要注意每个子问题需要性质相同而且相互不重复. 采用分治法完 ...

  3. 算法设计思想(4)— 分治法

    1. 分治法概念 分治,顾名思义,分而治之. 具体来说,它先将一个难以直接解决的大问题,分割成一些可以直接解决的小问题.如果分割后的问题仍然无法直接解决,那么就继续递归地分割,直到每个小问题都可解. ...

  4. Java实现算法导论中最近点对问题分治法

    最近点对问题:给定平面上的N个点,找出距离最近的两个点.分治法:              1 )如果数组长度(即点的个数,一般≤3)在一定范围内时直接求出最近点,蛮力求解,递归退出条件:       ...

  5. 算法分析与设计——分治法最近点对

    分治法最近点对 分治法 分治法将一个难以直接解决的大问题划分成一些规模较小的子问题,分别求解各个子问题,再合并子问题的解得到原问题的解. 一般来说,分治法的求解过程由以下三个阶段组成: 划分:把规模为 ...

  6. java最接近对点及距离_最接近点对问题_分治法

    一.问题描述 给定平面上的n个点,找其中的一对点,使得在n个点组成的所有点对中该点对间的距离最小. 二.解题思路及所选算法策略的可行性分析 思路:利用分治法来解决问题.递归子结构求最接近点对总体可分为 ...

  7. 分治法在求解“最近对”问题中的应用(JAVA)

    分治法在求解"最近对"问题中的应用 最近对问题在蛮力法中有过讲解,时间复杂度为O(n^2),下面将会采用分治法讲解这类问题,时间复杂度会降到O(nlogn) 我们将笛卡尔平面上n& ...

  8. 分治法在排序算法中的应用(JAVA)--快速排序(Lomuto划分、Hoare划分、随机化快排)

    分治法在排序算法中的应用--快速排序 时间复杂度:平均O(nlogn),最坏O(n^2) 如果说归并排序是按照元素在数组中的位置划分的话,那么快速排序就是按照元素的值进行划分.划分方法由两种,本节将主 ...

  9. 程序员的算法课(13)-分治法

    一.什么是分治 [百度百科]分治法((Divide and Conquer))可以通俗的解释为:把一片领土分解,分解为若干块小部分,然后一块块地占领征服,被分解的可以是不同的政治派别或是其他什么,然后 ...

最新文章

  1. Hdu 1072 【广搜】.cpp
  2. Java中的注解以及应用 @Deprecated @SupressWarning @Override
  3. LeetCode 226. 翻转二叉树(DFS BFS)
  4. 北交大计算机学院复试经验,2014考研复试:过来人考研复试经验谈-北交大计算机系...
  5. 【转载】Android之用PopupWindow实现弹出菜单
  6. 浙大学霸本科生顶会研究!只需20分钟音频,AI就能逼真模仿你的声音
  7. 领域驱动设计DDD之读书笔记
  8. Oracle在线撤销表空间,Oracle创建、管理撤销表空间
  9. Java自学要多久?
  10. 【软件资源】MATLAB 7.0 安装教程
  11. 一个简单的品优购项目----html+css
  12. Typora图片上传失败问题
  13. 安装nodejs遇到的坑
  14. 2023考研路上,恭祝诸君只争朝夕,不负韶华
  15. 上twitter_如何在Twitter上找到重大新闻
  16. 第7章概率和样本:样本均值的分布
  17. 高逼格技能教你玩转Excel
  18. 三维激光扫描技术知识检测----选择、判断
  19. 《区块链技术进阶与实践》之积分系统示例讲解
  20. ngro_k服务器搭建(本地电脑与微信交互)

热门文章

  1. VUEJS项目实践六之No PostCSS Config found in
  2. java学习第12天
  3. Picasso之图片缓存机制二ListView篇
  4. 阿里云的云安全防护产品有哪些?都有什么作用?
  5. word快捷键粘贴不能用
  6. Openvswitch手册(4): Mirror
  7. 奇兔recovery卡刷教程_奇兔Recovery(安卓手机刷机助手)V8.2.1.4 最新版
  8. 计算机应用基础精品课程申报表,计算机应用基础精品课程申报书.doc
  9. 全藏字【藏文字】的生成算法设计
  10. 龙芯3a5000部署nacos 1.4低版本方法