在算法导论4.1最大子数组问题中首先提出的是暴力求解方法即计算所有子数组的组合,然后求其和,寻找最大值。这种方法运行时间为Ω(n^2)。然后提出有没有更好的方法。使用分治策略的求解方法:寻找子数组A[low..high]的最大子数组,使用分治技术意味着要将子数组划分为两个规模尽量相等的子数组。也就是...
分类:
编程语言 时间:
2014-12-24 16:06:36
阅读次数:
307
在第四章分治策略(Divider and Conquer)4.1节提出了最大子数组问题。其转化就是求数组a={1, -2, 3, 10, -4, 7 , 2, -5}中连续子数组的最大和。对于这个问题,很容想到一种暴力求解的方法:简单地尝试对所有可能的的组合进行求和。对数组为n存在n*(n-1)/2...
分类:
编程语言 时间:
2014-12-23 12:05:21
阅读次数:
306
本文详细介绍了最大连续子序列之和的5种算法,从低效到高效,从蛮力穷举到分治策略,再到动态规划。还给出了此问题的一个扩展:求j组最大连续子序列之和。内容较多,欢迎关注。...
分类:
编程语言 时间:
2014-12-10 10:54:31
阅读次数:
276
1.基本思想 快速排序利用了分治策略。分治策略可以分为3个步骤: 分解:将问题划分为一些子问题,子问题的形式与原问题一样,只是规模更小。 解决:递归的求解出子问题。如果子问题的规模足够小,则停止递归,直接求解。 合并:将子问题的解组合成原问题的解。 对一个典型的子数组A[p..r]进行快速排序的分治...
分类:
编程语言 时间:
2014-11-27 18:21:34
阅读次数:
260
合并排序算法在结构上是递归的,采用分治策略:就是将原有的问题划分为 n 个规模较小但结构与原问题相似的子问题,递归地解决这些子问题,然后合并其结果,就得到原问题的解。 合并排序的模式一般如下: 1.分解:将 n 个元素分解为各含 n/2 个元素的两个序列; 2.解决:用分治排序法对两个子序...
分类:
编程语言 时间:
2014-11-25 20:13:40
阅读次数:
263
采用分治策略找出第K小的元素!要求程序的时间复杂度为线性函数。
#include
#include
#include
#include
#include
using namespace std;
/*
*选择问题(线性时间复杂度)
*在beg和end之间查找第k个元素
*/
int Fast_find(vector &vec,int beg,int end,int k)
{
if(k>end...
分类:
其他好文 时间:
2014-11-20 13:42:08
阅读次数:
234
最大子数组问题方法一:暴力求解方法我们可以很容易地设计出一个暴力方法来求解本问题:简单地尝试没对可能的子数组,共有O(n2)种#includeusing namespace std;#define INT_MIN 0x80000000int main(){ int arr[10]={9,8,-...
分类:
编程语言 时间:
2014-11-01 21:45:16
阅读次数:
296
分治策略中,我们递归地求解了一个问题,在每层递归都应用了三步1.分解,将问题划分为一些子问题,子问题的形式与原问题一样,只是规模更小2.解决,递归地求解出子问题,如果子问题的规模足够小,则停止递归,直接求解3.合并,把子问题的解给合并为原问题的解当子问题足够大的时候,需要递归,那就是递归情况当问题足...
分类:
编程语言 时间:
2014-10-14 19:40:09
阅读次数:
165
1:合并排序 合并排序算法使用分治策略实现对n个元素进行排序的算法。其基本思想是:将待排序元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最后总将排好序的子集合合并成所要求的排好序的集合。算法描述如下:void MergeSort(Typr a[],int left,int right....
分类:
其他好文 时间:
2014-09-16 12:15:50
阅读次数:
163