1、原理 分为三个阶段: -Divide:整个问题划分成多个子问题 -Conquer:求解各子问题的解 -Merge:合并子问题的解,形成原始问题的解 2、示例 (1)整数乘法 输入:n位二进制整数X,Y 输出:X、Y的乘积 通常计算X*Y时间复杂性是O(n2),现给出一个时间复杂性为O(n1.59 ...
分类:
编程语言 时间:
2019-03-16 16:52:21
阅读次数:
258
1.分治思想快速排序 https://www.cnblogs.com/feichangnice/p/5334195.html 算法导论上的快速排序采用分治算法,步骤如下: 1.选取一个数字作为基准,可选取末位数字 2.将数列第一位开始,依次与此数字比较,如果小于此数,将小数交换到左边,最后达到小于基 ...
分类:
编程语言 时间:
2019-02-11 12:23:07
阅读次数:
270
1.1 数据与数据结构 1.1.1 数据及其类型 基本数据类型:char, short, long, string, bool, int, float, double 1.2 算法 1.2.1 算法的概念 算法所具有的特征:有穷性,确定性,可行性,正确性 算法的类型:贪婪算法,分治算法,动态规划,回 ...
分类:
编程语言 时间:
2019-01-20 18:48:58
阅读次数:
215
快速幂 顾名思义,快速幂算法是对幂运算的一个加速优化,其算法框架基于分治算法(二分)之上。 接下来,介绍两种优化方法。 ·基本快速幂算法 首先,给出传统求幂的代码: #include<iostream>using namespace std; int main(){ unsigned long lo ...
分类:
其他好文 时间:
2019-01-20 17:31:43
阅读次数:
242
冒泡排序(交换排序):大的数右移交换,优化成鸡尾酒排序;演变成快速排序插入排序:从第二个元素往左比较,插入到小于他的数后面希尔排序选择排序:选择最小的放在最左侧,以此类推归并排序:基于分治算法快速排序(交换排序):基于分治算法堆排序和优先级队列,基于二叉堆计数排序:小范围内的整数超级快速桶排序基数排序-桶排序的扩展两种交换排序算法1.冒泡排序->优化成鸡尾酒排序2.快速排序两种基于分治算法的
分类:
编程语言 时间:
2019-01-16 16:36:27
阅读次数:
155
五大常用算法之一:分治算法https://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html五种常用算法之二:动态规划算法https://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741374.html五大常用算法之三贪心算法https://www.cnblogs.com/stev
分类:
编程语言 时间:
2019-01-16 10:25:37
阅读次数:
214
归并排序 概念:归并排序是一种分治算法。其思想是将原始数组切分成较小的数组,直到每个小数组只有一个位置,接着将小数组归并成较大的数组,直到最后只有一个排序完毕的大数组。 代码实现 举例:[8,7,6,5,4,3,2,1] ...
分类:
编程语言 时间:
2019-01-14 18:51:12
阅读次数:
176
归并排序(Merge Sort)算法完全依照了分治模式 分解:将 n 个元素分成各含 n/2 个元素的子序列; 解决:对两个子序列递归地排序; 合并:合并两个已排序地子序列以得到排序结果;和快速排序不同的是 归并的划分比较随意,快排重点就是划分 归并的重点就是合并,快排不需要合并 代码: 结果: ...
分类:
编程语言 时间:
2019-01-13 23:24:45
阅读次数:
231
分治法 分治法(divide and conquer,D&C):将原问题划分成若干个规模较小而结构与原问题一致的子问题 ;递归地解决这些子问题,然后再合并其结果,就得到原问题的解。 容易确定运行时间,是分治算法的优点之一。 分支模式在每一层递归上都有三个步骤: --分解(Divide):将原问题分解 ...
分类:
编程语言 时间:
2019-01-13 19:16:07
阅读次数:
174
归并排序算法是一个非常经典的分治算法,和快速排序有些类似,都是将问题分解成规模更小的子问题,分别解决。但是快速排序的子问题求解完成之后就是最优解,无需进行处理。归并算法需要对分别排序完成的子序列进行合并操作。 合并操作非常简单,定义如下:每次取数组a和b第一个元素中较小者放入新的队列,直到有个队列为 ...
分类:
编程语言 时间:
2018-12-30 22:09:16
阅读次数:
214