def MaxCrossSubarray(num,mid,low,high): leftsum=0 leftmax=-1000000 rightsum=0 rightmax=-1000000 for i in range(mid,low-1,-1): leftsum=leftsum+num[i] i... ...
分类:
编程语言 时间:
2017-05-18 13:31:35
阅读次数:
224
合并排序,顾名思义,就是通过将两个有序的序列合并为一个大的有序的序列的方式来实现排序。合并排序是一种典型的分治算法:首先将序列分为两部分,然后对每一部分进行循环递归的排序,然后逐个将结果进行合并。 合并排序最大的优点是它的时间复杂度为O(nlgn),这个是我们之前的选择排序和插入排序所达不到的。他还 ...
分类:
编程语言 时间:
2017-05-11 15:14:02
阅读次数:
273
斐波那契数列问题是算法学习者必定接触到的问题。作为经典问题,首次接触时通常是作为递归算法的案例教程。 然而递归解决斐波那契。其效率低的令人发指,有人算出其时间复杂度为O(2^n)。指数级时间复杂度。 假设面试的时候面试官问你斐波那契的求解方法,你来一个递归求解,基本上能够说,你已经game over ...
分类:
编程语言 时间:
2017-04-25 11:49:25
阅读次数:
177
【分治法的设计思想】 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 最后把每个小问题的解答组合起来,可得到原问题的答案。 【分治法的适用条件】 该问题的规模缩小到一定的程度就可以容易地解决;该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;利 ...
分类:
编程语言 时间:
2017-04-16 22:23:34
阅读次数:
223
分析递归算法三种方法替换法、迭代法、通用法(mastermethod)作用:分析递归算法的运行时间分治算法将一个问题分解为与原问题相似但规模更小的若干子问题,递归地解这些子问题,然后将这些子问题的解结合起来构成原问题的解。这种方法在每层递归上均包括三个步骤:divide(分..
分类:
编程语言 时间:
2017-04-14 10:16:47
阅读次数:
248
合并排序算法: public class MergeSort { public static void MergeSort(int A[],int low,int high){ if(low<high){ int middle=(low+high)/2; MergeSort(A,low,middle ...
分类:
编程语言 时间:
2017-04-08 20:53:09
阅读次数:
227
分治算法 一、大话分治 分治算法,Divide-and-Conquer Method,我给他它的字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。也正对应着它的单词Devi ...
分类:
编程语言 时间:
2017-04-03 15:30:35
阅读次数:
263
归并排序是分治思想的一个很典型的应用,它将待排序数组A[0...n-1]划分为A[0...m]和A[m+1...n]两个部分(其中m=(n-1)/2),然后对两个子数组分别排序,并以较小的时间代价将合并 一.算法 1.归并排序算法 2.合并排好序的子数组 二.归并排序算法的效率(假设n是2的冥) 设 ...
分类:
编程语言 时间:
2017-03-29 01:08:00
阅读次数:
257
分治算法在树的路径问题中的应用 一、树的分治算法 树的分治算法是分治思想在树型结构上的体现。 任一个具有n个节点的连通路,它的任何一棵树的树枝数为n-1 分治:除去树中的某些对象,使原树被分解成若干互不相交的部分。 分治算法分为两种:一种是点的分治,一种是边的分治 1.基于点的分治 1.选取一个点将 ...
分类:
其他好文 时间:
2017-03-24 20:29:34
阅读次数:
177
归并排序是一个分治算法。归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个有序的子序列,再把有序的子序列合并为整体有序序列。merg() 函数是用来合并两个已有序的数组. 是整个算法的关键。看下面的描述对mergeSort函数的描述: 下图来自维基百科 ...
分类:
编程语言 时间:
2017-03-24 18:54:51
阅读次数:
230