一个算法的复杂度可以说也就是一个算法的效率,一般来说分为时间复杂度和空间复杂度。。。 注意接下来说的均是比较YY的,适用与ACM等不需严格分析只需要大致范围的地方,至于严格的算法复杂度分析的那些数学证明,主定理什么的在《算法导论》这本书上有十分详细的讲解,网上应该也会有人写过,这里就不多说了(...
分类:
编程语言 时间:
2015-10-10 23:02:24
阅读次数:
370
今天看算导,看到主定理这一块各种渐进、多项式大于小于什么的让我拙计,现在分享一下。 所谓主定理,就是用来解递归方程的一种方法,此方法可以用来求解大多数递归方程。 设递归方程为T(n)=aT(n/b)+f(n) (其中a≥1,b>1) 主定理: (1)如果存在常数ε>...
分类:
其他好文 时间:
2015-09-03 21:43:19
阅读次数:
175
时间复杂度(渐近时间复杂度的严格定义,NP问题,时间复杂度的分析方法,主定理)排序算法(平方排序算法的应用,Shell排序,快速排序,归并排序,时间复杂度下界,三种线性时间排序,外部排序)数论(整除,集合论,关系,素数,进位制,辗转相除,扩展的辗转相除,同余运算,解线性同余方程,中国剩余定理)指针(...
分类:
其他好文 时间:
2015-09-01 21:16:57
阅读次数:
241
其中?为问题规模, ????????为递推的子问题数量, ????????为每个子问题的规模(假设每个子问题的规模基本一样) ????????O(n^d)为除了递归以外的其他计算量. 例子:ht...
分类:
其他好文 时间:
2015-08-25 21:58:34
阅读次数:
141
merge sort 是一种采用分治策略的排序方法。其最坏时间复杂度为 O(nlgn) (对数以2为底)可以先列出递归式,然后画递归树来证明. 也可以用master theorem (主定理)来证明.总之,最关键的就是要列出分治过程中的递归式merge sort的递归式为:C++ 代码如下所示:/*...
分类:
其他好文 时间:
2015-04-26 21:08:00
阅读次数:
171
1. 基本算法1.1 算法原理快速排序是一种分治排序算法。它将数组划分为左右两个部分,然后分别对这两部分排序。关键在划分的过程中,它将重排数组,使的以下条件成立:
对于某个划分元素指针 i ,a[i]将处于排序后数组的最终的位置上
a[l],……,a[i-1] 中的元素都比a[i]小
a[i+1],……,a[r] 中的元素都比a[i]大
我们通过划分完成排序,然后递归的调用该方法处理子文件,每一次划...
分类:
编程语言 时间:
2015-03-18 18:10:44
阅读次数:
220
Implement pow(x,n).直接把x自乘n-1次很容易实现,时间复杂度O(n).实际上,x^n = x^(n/2) * x^(n/2), 这样只需要求一次x^(n/2),再做一次乘操作即可,T(n) = T(n/2) + c, T(n) = lbn. (参见 CLRS 主定理)同时要注意两...
分类:
其他好文 时间:
2014-11-14 19:30:22
阅读次数:
216
主定理
主定理最早出现在《算法导论》中,提供了分治方法带来的递归表达式的渐近复杂度分析。
规模为n的问题通过分治,得到a个规模为n/b的问题,每次递归带来的额外计算为c(n^d)
T(n) <= aT(n/b)+c(n^d)
那么就可以得到问题的复杂度为:...
分类:
其他好文 时间:
2014-04-30 22:44:38
阅读次数:
435