参考
- 算法复杂度及渐进符号open in new window
- 函数的渐近的界open in new window
- 函数的渐近的界&阶的比较open in new window
- 函数渐近界及渐近符号介绍open in new window
- 程序算法艺术与实践:基础知识之函数的渐近的界open in new window
- 渐近记号、算法复杂度与主定理open in new window
- 大 O 记号及算法的时间复杂度open in new window
- 算法复杂性分析及运算规则证明(二)open in new window
- 算法导论------递归算法的时间复杂度求解open in new window
- 递归方程的求解(代入、递归树和主方法)open in new window
- 递归式求解——代入法、递归树与主定理open in new window
- 递归树: 如何借助树来求解递归算法的时间复杂度open in new window
- 算法导论------递归算法的时间复杂度求解open in new window
基本概念
一个算法问题的规约(Specification)主要包括两部分:
- 输入: 明确规定了算法接受的所有合法输入.
- 输出: 明确规定了对于每一个合法的输入值, 相应的输出值应该是什么.
算法是为了解决某个问题的一系列运算或操作.
问题的实例(Instance)是计算该问题解所必须的(满足问题陈述中强加的各种约束的)输入组成.
若把问题P的任何实例作为算法A的输入, A能够在有限步后停机, 并输出该实例正确的解, 我们称这个过程为算法A解决问题P.
算法的五大重要特征:
- 有穷性
- 确定性
- 可行性
- 输入
- 输出
通常设计一个好的算法应当考虑到如下目标:
- 正确性
- 可读性
- 健壮性
- 高效率与低存储量需求
计算复杂性
针对任何输入规模n, 任意一个算法都必然要消耗一段时间才能得出解. 这自然会区分出算法计算速度的快与慢, 资源使用效率的高与低, 性能发挥的优与劣. 为了能够系统性地, 科学性地衡量一个算法, 我们就产生了一系列的衡量, 这些衡量有着共同的数学概念与模型: 函数渐近的界.
函数渐近的界有六种:渐近上界、非渐近紧确上界、渐近下界、非渐近紧确下界、渐近紧确界。
※渐近上界:设f和g是定义域为自然数集N上的函数。若存在C,n0∈R+,使得对一切n≥n0有0≤f(n)≤Cg(n)成立,则称f(n)的渐近上界是g(n),记作f(n)=O(g(n))。
非渐近紧确上界:设f和g是定义域为自然数集N上的函数。若∀C∈R+,∃n0∈R+,使得对一切n≥n0有0≤f(n)≤Cg(n)成立,则称f(n)的非渐近紧确上界是g(n),记作f(n)=o(g(n))。
渐近下界:设f和g是定义域为自然数集N上的函数。若存在C,n0∈R+,使得对一切n≥n0有0≤Cg(n)≤f(n)成立,则称f(n)的渐近下界是g(n),记作f(n)=Ω(g(n))。
非渐近紧确下界:设f和g是定义域为自然数集N上的函数。若∀C∈R+,∃n0∈R+,使得对一切n≥n0有0≤Cg(n)≤f(n)成立,则称f(n)的非渐近紧确上界是g(n),记作f(n)=ω(g(n))。
渐近紧确界:若f(n)=O(g(n))且f(n)=Ω(g(n)),则记作f(n)=Θ(g(n))「注意:对于前面有限个n值可以不满足条件。」
在数据结构与算法中我们一般使用上面用※标记的渐近上界。
非重点知识
函数渐近的界相关的数学性质:
传递性:
- f(n)=Θ(g(n))和g(n)=Θ(h(n))⇒f(n)=Θ(h(n))
- f(n)=O(g(n))和g(n)=O(h(n))⇒f(n)=O(h(n))
- f(n)=Ω(g(n))和g(n)=Ω(h(n))⇒f(n)=Ω(h(n))
- f(n)=o(g(n))和g(n)=o(h(n))⇒f(n)=o(h(n))
- f(n)=ω(g(n))和g(n)=ω(h(n))⇒f(n)=ω(h(n))
自反性:
- f(n)=Θ(f(n))
- f(n)=O(f(n))
- f(n)=Ω(f(n))
对称性:
- f(n)=Θ(g(n))当且仅当g(n)=Θ(f(n))
转置对称性:
- f(n)=O(g(n))当且仅当g(n)=Ω(f(n))
- f(n)=o(g(n))当且仅当g(n)=ω(f(n))