分治策略 Divide and Conquer
2018-07-20 11:53
363 查看
分治策略
最简单的分治算法应用
1.计算阶乘
public static int factorial(int n) { assert(n >= 0);// pre-condition if (n == 0) return 1; else return n * factorial(n-1); // post-condition: returns n! }
二分搜索
需要O(log n)次比较,花费对数时间复杂度O(log n),花费常数O(1)空间。
快速排序
排序n个元素平均需要O(nlog n)次比较,最坏情况需要O(n2n2)次比较,可以在数组就地操作,使用较少的额外空间/内存。
不是一个稳定排序,相等元素的相关顺序没被保留。
合并排序
排序n个元素需要花费O(nlog n)时间,使用O(n)额外空间。
是一个稳定排序,在排序输出中相等元素的输入顺序被保留。
最近点对问题
在固定维度的欧几里德空间或LpLp空间,这个问题可以在O(nlog n)时间被解决。
Strassen算法
算法使用O(n2.8974n2.8974)时间实现矩阵相乘。
Cooley–Tukey FFT算法
最常见的FFT(快速傅里叶转换)算法,花费O(nlog n)时间。
Karatsuba算法
总体上,两个n位数相乘最多需要nlog23nlog23次单数位相乘(尤其在n为2的幂时就等于nlog23nlog23)。
阅读更多相关文章推荐
- 漫谈算法(四)分治算法 Divide and Conquer Algorithm
- 归并排序(mergeSort) 与 分而治之策略(divide and conquer)
- 漫谈算法(四)分治算法 Divide and Conquer Algorithm
- [TreeDivideAndConquer]点分治
- 分治 Divide and Conquer
- 分治 Divide and Conquer
- 分治 Divide and Conquer 局部最小值 local optimal 棋盘问题
- 新鲜出炉 --分治排序 (Divide-and-conquer)
- 漫谈算法(四)分治算法 Divide and Conquer Algorithm
- 【Divide and Conquer】169. Majority Element(easy)
- 169. Majority Element (divide and conquer)
- LeetCode 169.Majority Element--Divide and Conquer(分治法)
- leetCode刷题归纳-Divide and Conquer(241. Different Ways to Add Parentheses)
- 327. Count of Range Sum(Divide and Conquer)
- some math problems solved by Recursion & divide and conquer
- [hackerrank]Unique Divide And Conquer
- arraymethodDivide and Conquer
- leetcode-Divide and Conquer
- 215. Kth Largest Element in an Array(divide and conquer)
- LeetCode 218. The Skyline Problem--Divide and Conquer(分治法)