分治算法大家都很熟悉,很多时候(比如ACM竞赛)当我们判断出一个问题可以用分治算法来解决的时候,却往往因为具体的问题的复杂性,难以很快理清思路,迅速正确地写出问题的分治算法。 因此,要想快速正确的写出分治算法的实现代码,就必须足够的认识分治算法。直接看结论 一、认识分治 在分治策略中,我们递归地解决 ...
分类:
编程语言 时间:
2017-11-04 16:30:06
阅读次数:
247
快速排序是一种时间复杂度不太稳定的排序算法,也是一种可运用分治策略的排序算法。 这篇就谈一下随机化版本的快速排序的问题,所以快排就给个代码,表示学过了: 随机化版本的快速排序,我比较迷惑的是产生随机数代码的地方,先看看代码(注释的部分): 这个小问题让我郁闷了一会儿,因为不这么写,随机化快排就不正确 ...
分类:
编程语言 时间:
2017-10-27 19:56:46
阅读次数:
193
1 #include"iostream.h" 2 3 int BinarySearch(int a[],int left,int right,const int& x) 4 { 5 if(left<right) 6 { 7 int middle = (left+right)/2; 8 if(x==a ...
分类:
其他好文 时间:
2017-10-22 22:02:19
阅读次数:
139
归并排序(Merge Sort) (1)算法思想 归并排序采用了分治策略(divide-and-conquer),就是将原问题分解为一些规模较小的相似子问题,然后递归解决这些子问题,最后合并其结果作为原问题的解。 归并排序将待排序数组A[1..n]分成两个各含n/2个元素的子序列,然后对这个两个子序 ...
分类:
编程语言 时间:
2017-10-12 19:17:47
阅读次数:
272
1.最大子段和问题的描述 2.分治策略的求解思路 用分治法求解这个问题 。 在数组的 center = (right-left)/2+left 位置处分开。形成两个子数组。 那么,最大子段和 可能出现在三个位置: a.可能出现在 左 子数组 b. 可能出现在 右子数组 c.可能出现在 过center ...
分类:
编程语言 时间:
2017-10-05 17:18:52
阅读次数:
224
第一部分 基础知识 第1章 算法在计算中的作用 第2章 算法基础 第3章 函数的增长 第4章 分治策略 第5章 概率分析和随机算法 第二部分 排序和顺序统计量 第6章 堆排序 第7章 快速排序 第8章 线性时间排序 第9章 中位数和顺序统计量 第三部分 数据结构 第10章 基本数据结构 第11章 散 ...
分类:
编程语言 时间:
2017-09-27 10:07:45
阅读次数:
541
自开始学习算法起,我感觉就是跪着把《算法导论》的代码看一遍、理解一遍然后敲一遍...说实话自己来写并且要求时间复杂度达到要求,我肯定是不能做到的,但我想前辈们辛苦积累的研究成果贡献出来也是为了让后人少走一些弯路,所以我的作用就是把前辈们的成果学习之后加以理解,然后积累经验,领悟到他们解决问题时的思路 ...
分类:
其他好文 时间:
2017-09-18 22:22:30
阅读次数:
333
快速排序是目前平均性能最好的排序方式,被作为数组排序首选。 基本思想:将一个数组分为左右两部分以q为界,左部分小于q,右部分大于q;接下来分治策略,将左右两部分继续按照这个规则划分,直至不能划分,该数组便排序完毕。 关键:如何划分左右部分?q该取哪个值?(恕我愚钝,算法导论上的做法没看懂,于是逼着自 ...
分类:
编程语言 时间:
2017-08-25 01:05:37
阅读次数:
164
J48原理:本来名称为C4.8,由于是Java实现的算法,再加上C4.8为商业收费算法。 其实J48是自上而下的,递归的分治策略,选择某个属性放置在根节点,为每个可能的属性值产生一个分支,将实例分成多个子集,每个子集对应一个根节点的分支,然后在每个分支上递归地重复这个过程。当所有实例有相同的分类时, ...
分类:
编程语言 时间:
2017-07-25 18:10:33
阅读次数:
298
採用分治策略找出第K小的元素!要求程序的时间复杂度为线性函数。 #include<iostream> #include<iterator> #include<algorithm> #include<time.h> #include<vector> using namespace std; /* *选 ...
分类:
其他好文 时间:
2017-06-23 10:39:54
阅读次数:
189