分治--分而治之, 把大的问题分成n个小的问题,分别处理,然后汇总小问题的结果。

具体介绍可以参考这位大哥的blog:
  https://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html

思考的地方,分治是思想还是算法,递归是思想还是什么??

-- 个人理解分治是算法的思想,递归是一种实现的思想吧

example:

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 一般解法:
int maxSubArray(int* nums, int numsSize) {
int i = ;
int j = ;
int iSum = ;
int iMax = nums[]; for (; i < numsSize; iSum = , i++)
{
for (j = i; j< numsSize; j++)
{
iSum += nums[j];
if (iMax < iSum) iMax = iSum;
}
}
return iMax;
}
分治解法:
#define MAX_INT(a, b)  ((a > b) ? a : b)
int GetMidMax(int* nums, int iS, int iE)
{
int iMid = ;
int iMax = ;
int iSum = ;
int i = ; iMid = (iS + iE) / ;
iSum = iMax = nums[iMid] + nums[iMid + ]; /* for pre */
for (i = iMid - ; i >= ; i--)
{
iSum += nums[i];
if (iSum > iMax) iMax = iSum;
} /* for after */
for (i = iMid + ; i <= iE; i++)
{
iSum += nums[i];
if (iSum > iMax) iMax = iSum;
} return iMax;
} int GetMaxSubRe(int* nums, int iS, int iE)
{
int iMaxLeft = ;
int iMaxRight = ;
int iMaxMid = ;
int iMid = ; if (iS == iE)
{
return ((nums[iS] > ) ? nums[iS] : );
} iMid = (iS + iE) / ; /* mid pos */ iMaxLeft = GetMaxSubRe (nums, iS, iMid);
iMaxRight = GetMaxSubRe (nums, iMid + , iE);
iMaxMid = GetMidMax(nums, iS, iE); return MAX_INT(MAX_INT(iMaxRight, iMaxLeft), iMaxMid); } int maxSubArray(int* nums, int numsSize) {
int iRet = ;
iRet = GetMaxSubRe(nums, , numsSize - ); return iRet;
}
总结:
  看了运行结果统计,效率没什么提升,和个人理解的不一样,应该是test case的原因。分治的时间效率应该比穷举法好,o(nlogn) < o(n^2)

												

alg--分治法的更多相关文章

  1. 分治法求解最近对问题(c++)

    #include"stdafx.h" #include<iostream> #include<cmath> #define TRUE 1 #define F ...

  2. 分治法避免定义多个递归函数,应该使用ResultType

    总结:对二叉树应用分治法时,应避免定义多个递归函数,当出现需要递归求解多种的结果时,尽量使用ResultType来让一次递归返回多种结果. 题目:Binary Tree Maximum Path Su ...

  3. ACM/ICPC 之 分治法入门(画图模拟:POJ 2083)

    题意:大致就是要求画出这个有规律的Fractal图形了= = 例如 1 对应 X 2 对应 X  X   X    X  X 这个题是个理解分治法很典型的例子(详情请参见Code) 分治法:不断缩小规 ...

  4. 分治法(一)(zt)

    这篇文章将讨论: 1) 分治策略的思想和理论 2) 几个分治策略的例子:合并排序,快速排序,折半查找,二叉遍历树及其相关特性. 说明:这几个例子在前面都写过了,这里又拿出来,从算法设计的策略的角度把它 ...

  5. 分治法求一个N个元素数组的逆序数

    背景  逆序数:也就是说,对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时, ...

  6. 《github一天一道算法题》:分治法求数组最大连续子序列和

    看书.思考.写代码. /*************************************** * copyright@hustyangju * blog: http://blog.csdn. ...

  7. 用分治法解决最近点对问题:python实现

    最近点对问题:给定平面上n个点,找其中的一对点,使得在n个点的所有点对中,该点对的距离最小.需要说明的是理论上最近点对并不止一对,但是无论是寻找全部还是仅寻找其中之一,其原理没有区别,仅需略作改造即可 ...

  8. C语言实现快速排序法(分治法)

    title: 快速排序法(quick sort) tags: 分治法(divide and conquer method) grammar_cjkRuby: true --- 算法原理 分治法的基本思 ...

  9. p1257 平面上最接近点对---(分治法)

    首先就是一维最接近点的情况... #include<iostream> #include<cstdio> #include<cstring> #include< ...

  10. (分治法 快速幂)51nod1046 A^B Mod C

    1046 A^B Mod C   给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^5 Mod 8 = 3. 收起   输入 3个正整数A B C,中间用空格分隔.(1 < ...

随机推荐

  1. mysql 易错误理解

    MySQL作为数据库的一大主力军,到处存在于我们各种系统中,相信大家都不陌生!但是,你知道你能用不代表你知道细节,那我们就来盘点盘点其中一些我们平时不太注意的地方,一来为了有趣,二来为了不让自己踩坑. ...

  2. Javascript中的原型继承具体解释

    js中的继承,是面向对象的知识,由于js没有类的概念.所以继承是通过对象实现的.谈到继承.就必须说到prototype,就不得不先说下new的过程. 一个小小的列子: <script type= ...

  3. [React] Update Application State with React Apollo ApolloConsumer Component

    In this lesson I refactor some code that utilizes the Mutation component to update client-side cache ...

  4. [React Native] Target both iPhone and iPad with React Native

    By default, React Native only targets iPhone - so if you run on an iPad, it will show up as a scaled ...

  5. 2016.04.07,英语,《Vocabulary Builder》Unit 11

    cant, from the Latin verbs canere and cantare, meaning 'sing'. by way of French, add an h to the roo ...

  6. POJ1151 Atlantis 扫描线算法

    题目大意 给出几个矩形对角端点坐标,求这些矩形整体覆盖的面积. 扫描线算法 整个平面被每个矩形的水平边所在直线(以后简称“水平线”)分成了几个部分,而整体覆盖面积则为每相邻的两个水平线间夹的长度(以后 ...

  7. bzoj2958: 序列染色&&3269: 序列染色

    DP这种东西,考场上就只能看命了.. #include<cstdio> #include<iostream> #include<cstring> #include& ...

  8. [IOI 2008] Island

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1791 [算法] 不难看出,要求的是这个基环树森林中每棵基环树的直径之和 [代码] # ...

  9. [Plugin] WEB版一次选择多个文件进行批量上传(swfupload)的解决方案

    URL:http://www.cnblogs.com/chillsrc/archive/2010/02/21/1670594.html 说明:功能完全支持ie和firefox浏览器! 一般的WEB方式 ...

  10. Endnote导入共享数据

    Endnote导入共享数据 Endnote是我们经常使用的参考文献管理工具.但是,在云计算还不是很普及的今天,往往每台电脑上都有自己的endnote数据库.这样,换了电脑,要使用同样的参考文献数据时, ...