/* fi表示第i行的最左最小元素的列小标,则有f0<f1<f2<...<fn-1
  取数组的偶数行,组成新的子数组,递归求解最左最小元素的列下表,利用偶数项限定奇数项的范围,再求奇数项
*/
#include<iostream>
#include<vector>
using namespace std;
void findOddMin(vector<vector<int>> &a, int m, int n, vector<int> &r)
{
int len = r.size();
vector<int> tmp;
for (int i = 0; i < m; ++i){
int b = 0, e = n - 1;
if (i % 2 == 0){
if (i / 2>0) b = r[i / 2 - 1];
if (i / 2 < len) e = r[i / 2];
int k = b;
for (int j = b + 1; j <= e; ++j)
if (a[i][j] < a[i][k]) k = j;
tmp.push_back(k);
}
else tmp.push_back(r[i / 2]);
}
r = tmp;
}
void findMin(vector<vector<int>> &a, int m, int n, vector<int> &r)
{
if (m == 1){
int k = 0;
for (int i = 1; i < n; ++i)
if (a[0][i] < a[0][k]) k = i;
r.push_back(k);
return;
}
vector<vector<int>> b;
for (int i = 0; i < m; ++i)
if (i % 2 == 1) b.push_back(a[i]);
findMin(b, m / 2, n, r);
findOddMin(a, m, n, r);
} int main()
{
//vector<vector<int>> a = { { 10, 13, 23 }, { 17, 16, 23 }, { 45, 32, 23 } };
vector<vector<int>> a = { { 37, 23, 22, 32 }, { 21, 6, 5, 10 }, { 53, 34, 30, 31 }, { 32, 13, 9, 6 }, { 43, 21, 15, 8 } };
vector<int> r;
findMin(a, 5,4, r);
for (auto i : r)
cout << i << ' ';
cout << endl;
}

  

第4章 分治策略 monge阵列的更多相关文章

  1. 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第4章 分治策略

    分治策略有一种“大事化小,小事化了”的境界,它的思想是将原问题分解成两个子问题,两个子问题的性质和原问题相同,因此这两个子问题可以再用分治策略求解,最终将两个子问题的解合并成原问题的解.有时,我们会有 ...

  2. 第四章 分治策略 4.2 矩阵乘法的Strassen算法

    package chap04_Divide_And_Conquer; import static org.junit.Assert.*; import java.util.Arrays; import ...

  3. 【从零学习经典算法系列】分治策略实例——高速排序(QuickSort)

    在前面的博文(http://blog.csdn.net/jasonding1354/article/details/37736555)中介绍了作为分治策略的经典实例,即归并排序.并给出了递归形式和循环 ...

  4. 递归与分治策略之循环赛日程表Java实现

    递归与分治策略之循环赛日程表 一.问题描述 设有n=2^k个运动员要进行网球循环赛.现要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次: (2)每个选手一天只能参赛一 ...

  5. 递归与分治策略之棋盘覆盖Java实现

    递归与分治策略之棋盘覆盖 一.问题描述 二.过程详解 1.棋盘如下图,其中有一特殊方格:16*16 . 2.第一个分割结果:8*8 3.第二次分割结果:4*4 4.第三次分割结果:2*2 5.第四次分 ...

  6. 小旭讲解 LeetCode 53. Maximum Subarray 动态规划 分治策略

    原题 Given an integer array nums, find the contiguous subarray (containing at least one number) which ...

  7. C++分治策略实现二分搜索

    问题描述: 给定已排好序的n个元素组成的数组,现要利用二分搜索算法判断特定元素x是否在该有序数组中. 细节须知: (1)由于可能需要对分治策略实现二分搜索的算法效率进行评估,故使用大量的随机数对算法进 ...

  8. [图解算法] 归并排序MergeSort——<递归与分治策略>

    #include"iostream.h" void Merge(int c[],int d[],int l,int m,int r){ ,k=l; while((i<=m)& ...

  9. 动态规划VS分治策略

    •在用分治法解决问题时,由于子问题的数目往往是问题规模的指数函数,因此对时间的消耗太大. •动态规划的思想在于,如果各个子问题不是独立的,不同的子问题的个数只是多项式量级,而我们能够保存已经解决的子问 ...

随机推荐

  1. 利用java生成带有干扰线的网页验证码图片

    package imageCreate; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import j ...

  2. iOS集成微信支付

    微信支付的开发 前言:之前听说过微信支付有很多坑,其实没有想象的那么坑,整体感觉很容易上手,按照它的流程来不会有错!PS:官方的流程看的TMD烦,好啦,废话有点多,进入开发.(ps:每个微信的版本一直 ...

  3. asp.net 两个页面之前传递数据

    .在两个表单之间传递数据 看下面的代码: 对于WebForm1: private void Page_Load(object sender, System.EventArgs e) { ArrayLi ...

  4. Linux下安装jdk1.8

    相信码农们绝对禁不住linux系统的诱惑,同样在linux的世界里少不了java,下面笔者就和大家分享一下我的jdk1.8安装过程吧,新接触linux的童鞋们完全可以按照我提供的图片中的命令来安装哦- ...

  5. Android WebView 小结

    1.设置网页的缩放比例的时候,可以使用以下属性: mWebview.setInitialScale(25);//为25%,最小缩放等级 WebSettings setting = mWebview.g ...

  6. Jsoup小Demo

    Jsoup小Demo public class JsoupUtil { public void parseWangYi() { Document doc = null; try { //eg1:解析百 ...

  7. PHP常用类型判断函数总结

    1.gettype():获取变量类型 2.is_array():判断变量类型是否为数组类型 3.is_double():判断变量类型是否为倍浮点类型 4.is_float():判断变量类型是否为浮点类 ...

  8. 分支-15. 日K蜡烛图

    /* * Main.c * 分支-15. 日K蜡烛图 * Created on: 2014年6月18日 * Author: Boomkeeper ****测试通过***** */ #include & ...

  9. [Django 1.5] Django 开发学习资源链接

    jQuery : jQuery API introduction:http://api.jquery.com/ jQuery plugins: http://benalman.com/projects ...

  10. SSM整合中遇到的不能扫描注解的bug

    我的开发环境为: ubuntu14.04LTS 64bit; Spring Tool Suite  3.5.0.RELEASE Maven 3.2.3 SSM整合中遇到的不能扫描注解的bug 最终解决 ...