1.描述:找出数组A的和最大的非空连续子数组,我们称这样的连续子数组为最大子数组。 2. 用分治策略来求解。 a. 假设我们要求A的子数组A[low, high]的最大子数组。根据分治策略,我们先将A[low,high] 平分 b. 那么 A[low,highj]的子数组A[i,j]只有三种可能 a ...
分类:
编程语言 时间:
2018-09-02 20:20:33
阅读次数:
186
只有当数组中包含负数时,最大子数组问题才有意义。如果所有元素都是非负的,最大子数组问题没有任何意义,因为整个数组和肯定是最大的 ...
分类:
编程语言 时间:
2018-08-12 17:33:42
阅读次数:
128
二分查找 概念: 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求 线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 算法复杂度: 二分查找法也称为折半查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况 下用O(log n) ...
分类:
其他好文 时间:
2018-08-03 23:13:55
阅读次数:
297
快速排序使用分治策略(Divide and Conquer)来把一个序列分为两个子序列。步骤为: 1)设置两个变量i、j,排序开始的时候:i=0,j=N-1; 2)以第一个数组元素作为关键数据,赋值给key,即key=A[0]; 3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于ke ...
分类:
编程语言 时间:
2018-07-25 22:07:44
阅读次数:
120
/ 斐波那契数列是 f(0)=0 n=0 f(1)=1 n=1 f(n 1)+f(n 2) n 1 如果采用递归求数列,有很多数字需要重复计算多次,采用分治法可以避免重复计算, 使计算的时间复杂段由指数级变为线性的O(n) / public int fibonacci(int n){ int rs ...
分类:
其他好文 时间:
2018-07-25 20:45:34
阅读次数:
212
二分法是分治算法的一种特殊形式,利用分治策略求解时,所需时间取决于分解后子问题的个数、子问题的规模大小等因素,而二分法,由于其划分的简单和均匀的特点,是查找数据时经常采用的一种有效的方法。 快速排序的实质也是二分法,下面就写一个快速排序+二分法查找的栗子🌰: 运行结果为: ...
分类:
编程语言 时间:
2018-06-15 21:46:22
阅读次数:
135
二分搜索法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法运算终止。 前提是:有序数组 步骤 给予一个包含n个带值元素的数组A或是记录A ...
分类:
其他好文 时间:
2018-05-02 16:19:24
阅读次数:
118
在前面的随笔中其实谈到了一些递归分治的算法,也以为自己写上去了,今天在看到没有写。下面就来补上。 递归分治是算法中比较重要的思想。在之前也聊到了递归和递推的区别。递归这里就不再详细讲述了。下面讲一讲分治。分治其实很简单,就是将一个比较大的问题分解为很多的小问题,解决小问题的最优解比解决大问题的最优解 ...
分类:
其他好文 时间:
2018-04-11 00:22:40
阅读次数:
186
分治策略:将原问题划分成n个规模较小而结构与原问题相似的子问题,然后递归地解决这些子问题,最后再合并其结果,就可以得到原问题的解。 它需要三个步骤: 通过分治策略和分治步骤,可以简单地默出归并算法。 对于merge函数中的合并过程,有必要也用循环不变式来分析一下: 循环中不变的量是a[left... ...
分类:
编程语言 时间:
2018-01-21 01:16:35
阅读次数:
243
高级篇算法,包括 快速排序和希尔排序。首先介绍快速排序。 1. quicksort,C.A.R.Hoare (1934~)Turing Award,1980 2. 分治策略,分而治之 quicksort VS. mergesort (1) 将序列分为两个子序列:S = S1 + S2 规模缩小,彼此 ...
分类:
编程语言 时间:
2017-11-19 12:32:42
阅读次数:
240