/* 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. Android中view的事件

    view:top.left.right.bottom,相对于parent的位置参数,获取通过get*()来获取.width=right-left.height=bottom-top.x=left+tr ...

  2. SQLServer 2012 已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时。

    楼主用SQL Server 2012 在连接其他电脑的实例时,一直提示“已成功与服务器建立连接,但是在登录前的握手期间发生错误. (provider: SSL Provider, error: 0 - ...

  3. eclipse最有用快捷键整理(转)

    eclipse最有用快捷键整理 可以通过菜单栏中Window–>Preferences–>General–>Keys来修改快捷键绑定. 编辑 Ctrl+1 快速修复(最经典的快捷键, ...

  4. HTML2列表表单框架

    HTML——Hyper Text Markup Language <html>,<head>,<body> 一.基本标签: (一)格式标签:——模型:word工具栏 ...

  5. .NET自动更新

    asp.net b/s就是布置在服务器的.你这个是要单机版的更新机制,博客园里面好几篇文章说这事呢. http://www.cnblogs.com/cnsharp/archive/2013/04/11 ...

  6. web2py官方文档翻译01

    第一章:介绍 介绍 web2py(web2py)是一个免费的开源web框架的敏捷开发安全的数据库驱动的web应用程序,这是用Python编写的Python(Python)和可编程.web2py是一个完 ...

  7. iOS把一个简单的图形变成一个圆

    push是定义的一个button push.layer.masksToBounds = YES; push.layer.cornerRadius = 100; push.layer.borderWid ...

  8. J2SE知识点摘记(四)

    1.        抽象类(abstract) 抽象类和抽象方法都必须用abstract关键字来修饰. 抽象类不能被直接实例化,也就是不能直接用new关键字去产生对象. 抽象方法只需声明,而不需实现. ...

  9. Android Notivation的使用

    官方帮助文档:http://wear.techbrood.com/guide/topics/ui/notifiers/notifications.html 博文推荐:http://blog.csdn. ...

  10. Error occured processing XML &#39;Cannot find class [springmvc.extention.BeanArgumentResolver]&#39;.

    <Description Resource Path Location Type Error occured processing XML 'Cannot find class [springm ...