您的位置:首页 > 产品设计 > UI/UE

分治策略 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)。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: