理解算法分析-渐近分析思想
2018-04-28 00:36
190 查看
写在前面
如果读者已经熟练理解、掌握了算法渐近分析方法,那么以下内容将不会对读者有任何的价值,如果十分珍惜自己的时间请务必跳过。说明
文中 alg 都表示算法(algorithms);文中 n 都表示问题规模;
渐近分析的基本思想
忽略掉依赖于机器的常量;不去检查alg的实际运行时间,而是关注随着问题规模的增长,运行时间的增长率;
增长率展示了规律,问题规模n,与alg运行时间T(n)的函数关系。如果取多次运行时间的平均值来进行比较并不能说明问题,统计的思想在算法分析方面并不是十分适用。
渐近符号
O(big-oh) : 称为 上界 (上限界限)Ω (big-omege): 称为 下界 (下限界限)
Θ (big-theta) : 称为 精确界
o (little-oh) : 称为 非渐近紧确上界
ω (little-omege) : 称为 非渐近紧确下界
渐近符号数学定义
O (big-oh)定义 : 设f(n) 和 g(n) 是定义域为自然数集上的函数。如果存在 c , n0 (c ≥ 0 , n0 ≥ 0 ) , 使得对于一切的 n ≥ n0 都有 0 ≤ f(n) ≤ g(n) 成立 , 则称 f(n) 渐近的上界是 g(n) , 记作 f(n) = O(g(n)) 。在 n ≥ n0 成立时,函数 f(n) 的阶不会高于函数 g(n) 的阶。当 n 在 0 <= n <= n0 这个范围内时, f(n) 是不一定会小于 g(n) 的 , 但是当 n > n0 后,f(n) 将永远不会再超越 g(n) 。
Θ (big-theta)定义 : 设f(n) 和 g(n) 是定义域为自然数集上的函数。如果 lim(n -> ∞) f(n) / g(n) 存在 , 并且等于某个常数 c (c > 0) , 那么 f(n) = [b]Θ(g(n)) . [/b]
存在大于 0 的常量 c1 , c2 , n0 , 使得对于所有的 n > n0 , 都有 0 ≤ c1g(n) ≤ f(n) ≤ c2g(n) 。 f(n) 属于集合 Θ(g(n)) 。
Ω (big-omege) : 设f(n) 和 g(n) 是定义域为自然数集上的函数。如果存在 c , n0 (c ≥ 0 , n0 ≥ 0 ) , 使得一切 n ≥ n0 都有 0 ≤ g(n) ≤ f(n) 成立,则称 f(n) 的渐近下界是 g(n) , 记作 f(n) = Ω(g(n))
o (little-oh) : 设 f(n) 和 g(n) 是定义域为自然数集N上的函数。若对于任意正数 c 都存在n0,使得对一切 n ≥ n0 都有 0 ≤ f(n) < cg(n) 成立,则称 f(n) 的渐进的非紧确上界是 g(n),记作f(n)=o(g(n)) 。通俗的说n满足一定条件范围内,函数f(n) 的阶低于函数g(n) 。
ω (little-omege) : 设 f(n) 和 g(n) 是定义域为自然数集N上的函数。若对于任意正数 c 都存在n0,使得对一切 n ≥ n0 都有 0 ≤ cg(n) < f(n) 成立,则称 f(n) 的渐进的非紧确下界是 g(n),记作f(n)=ω(g(n)) 。通俗的说n满足一定条件范围内,函数f(n) 的阶高于函数g(n) 。
相关文章推荐
- 算法设计与分析之分治思想
- 深入理解JVM03--判断对象是否存活(引用计数算法、可达性分析算法,最终判定),Eclipse设置GC日志输出,引用
- 对Python中文分词模块结巴分词算法过程的理解和分析
- 对KLT,主成分分析(PCA)算法的理解
- 对Python中文分词模块结巴分词算法过程的理解和分析
- 算法分析—渐近符号
- 算法分析之渐近分析(Asymptotic Analysis)
- 浅谈对主成分分析(PCA)算法的理解
- 对Python中文分词模块结巴分词算法过程的理解和分析
- 深入浅出算法分析(上)——如何进行算法分析&渐近符号介绍
- 贪心算法思想分析及应用
- 算法复杂性渐近阶的分析
- 简单理解算法篇--摊还分析
- C++高级编程资料汇总(参考手册+电子书+编程思想+算法分析) ...
- Python中文分词模块结巴分词算法过程的理解和分析
- 数组插入算法的分析与理解
- 深入理解JVM--第三章--判断对象是否存活(引用计数算法、可达性分析算法,最终判定)
- C++高级编程资料汇总(参考手册+电子书+编程思想+算法分析)
- 经典算法 | n皇后问题易理解算法和最高效率算法分析
- Raft算法分析与理解