分治--分而治之, 把大的问题分成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. 1103 N的倍数

    1103 N的倍数  题目来源: Ural 1302 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 一个长度为N的数组A,从A中选出若干个数,使得 ...

  2. 获取Class对象方式

    在java中,每个class都有一个相应的Class对象,当编写好一个类,编译完成后,在生成的.class文件中,就产生一个Class对象,用来表示这个类的类型信息.获得Class实例的三种方式: 1 ...

  3. caffe中ConvolutionLayer的前向和反向传播解析及源码阅读

    一.前向传播 在caffe中,卷积层做卷积的过程被转化成了由卷积核的参数组成的权重矩阵weights(简记为W)和feature map中的元素组成的输入矩阵(简记为Cin)的矩阵乘积W * Cin. ...

  4. HDU 5186

    easy !! #include <iostream> #include <cstdio> #include <algorithm> #define LL __in ...

  5. 时序图与状态图(Rose) - Windows XP经典软件系列

    以CAN转UART(串口)为例. 功能简单介绍: 当主程序收到CAN口的数据后:依据按键的不同来选择是使用CAN口发送,还是使用UART口发送. 一.图片 时序图 watermark/2/text/a ...

  6. C++关键知识

    <精通MFC>第一章节整理复习 //c++编程技术要点 /* //1.虚函数及多态的实现 //演示多态技术 #include <iostream> using namespac ...

  7. Scrapy源代码分析-经常使用的爬虫类-CrawlSpider(三)

    CrawlSpider classscrapy.contrib.spiders.CrawlSpider 爬取一般站点经常使用的spider.其定义了一些规则(rule)来提供跟进link的方便的机制. ...

  8. luogu1955 [NOI2015] 程序自动分析

    题目大意 假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足.i, ...

  9. redis配置文件参数详解

    配置文件参数说明: 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时,Redis默认会把pi ...

  10. 关于Html基础语法学习

    晚上做完初赛,好像有点颓,就来学了学html,毕竟博客里面会用到嘛. 首先贴出我所学习的教程 http://www.w3school.com.cn/html/index.asp 我觉得吧,可能以我的记 ...