美文网首页
AlgorithmComplexity

AlgorithmComplexity

作者: 世界上的一道风 | 来源:发表于2019-08-10 10:26 被阅读0次

前言:函数的增长

  • 算法的渐进效率:我们关心当输入规模无限增加时,算法的运行时间如何随着输入规模的变大而增加。例子:输入规模n增大,最坏情况运行时间为\Theta(n\lg n)的归并排序战胜最坏情况运行时间为\Theta(n^2)的插入排序;

  • 我们设最坏情况运行时间函数为T(n)

  • 算法分析的种类:
    最坏情况(Worst Case):任意输入规模的最大运行时间。(Usually)
    平均情况(Average Case):任意输入规模的期待运行时间。(Sometimes)
    最佳情况(Best Case):通常最佳情况不会出现。(Bogus)

渐近记号(Asymptotic Notation)

  • 渐进记号是应用于函数上的记号。

  • 渐进记号刻画算法的运行时间,为了全面性(综合覆盖所有输入),提出了不同的渐进符号。

  • 通常有 OΘΩ 记号法。Θ 记号渐进地给出了一个函数的上界和下界,当只有渐近上界时使用 O 记号,当只有渐近下界时使用 Ω 记号。尽管技术上 Θ 记号较为准确,但通常仍然使用 O记号表示。

  • 使用 O 记号法(Big O Notation)表示最坏运行情况的上界。

  • 如下的函数f(n)都是渐进非负的,也就是当n足够大,f(n)非负。

  • 渐进记号出现在公式中,出现在等式右边,可以视为某一个不关心的匿名函数,如:
    T(n) =T(n/2) + \Theta(n)
    出现在等式左边,表示左边无论是什么匿名函数,右边总有一个匿名函数使得等式成立,例如:
    2n^2+3n + 1=2n^2+\Theta(n) =\Theta(n^2)

前示

image.png

\Theta记号

  • 定义:\Theta(g (n))=\{f(n) :存在正常量c_1,c_2,n_0使得对所有n\ge n_0,有0 \le c_1g(n) \le f(n) \le c_2g(n)\}

  • \Theta(g (n)) 表示一个函数集合, f(n)\in \Theta(g (n))

  • g(n)f(n)的渐进紧确界。

O记号

  • 定义:O(g (n))=\{f(n) :存在正常量c,n_0使得对所有n\ge n_0,有0\le f(n) \le c g(n)\}

  • 只有一个渐进上界时,使用O记号。

  • f(n)=O(g(n))代表f(n)\in O(g(n)),因此\Theta是一个比O更强的概念,有\Theta(g(n)) \subseteq O(g(n));

\Omega记号

  • 定义:\Omega(g (n))=\{f(n) :存在正常量c,n_0使得对所有n\ge n_0,有0\le c g(n) \le f(n) \}

  • 只有一个渐进下界时,使用\Omega记号。

o记号

  • 是一个非渐进紧确的上界。

  • 定义:o(g (n))=\{f(n) :存在正常量 c,存在常量n_0,使得对所有n\ge n_0,有0 \le f(n) < cg(n) \}

  • 也就是说当n趋于无穷时, g(n)f(n)大至少一个数量级。

  • 引入的原因:O提供的渐进上界可能是也可能不是渐进紧确的。例子:
    2n=O(n^2)不是渐进紧确的。

\omega记号

  • 是一个非渐进紧确的下界。

  • 定义:\omega(g (n))=\{f(n) :存在正常量 c,存在常量n_0,使得对所有n\ge n_0,有0\le cg(n) < f(n) \}

  • 也就是说当n趋于无穷时, f(n)g(n)大至少一个数量级。

[图片上传中...(image.png-114a48-1565404116808-0)]

comlexity table

相关文章

  • AlgorithmComplexity

    前言:函数的增长 算法的渐进效率:我们关心当输入规模无限增加时,算法的运行时间如何随着输入规模的变大而增加。例子:...

网友评论

      本文标题:AlgorithmComplexity

      本文链接:https://www.haomeiwen.com/subject/nqyljctx.html