【计算理论】时间复杂性

概述
参考《计算理论导引》(Michael Sipser,第三版)第七章。
本文考虑如何度量时间复杂性,并且定义了一些方便起见的概念以便使用。
本文作为参考书阅读笔记,需要你至少能阅读前六章的内容。

复杂性的记法

  • \(M\)是对所有输入停机的确定型图灵机。
  • \(f(n)\)是在所有长度为\(n\)的输入上\(M\)运行的最大步数。
  • 则称\(M\)在时间\(f(n)\)内运行,\(M\)\(f(n)\)时间图灵机。

上面这种记法讨论了算法的最坏情况分析(worst-case analysis),还有讨论运行平均步数的平均情况分析(average-case analysis)。

由于精确的运行时间讨论起来相当复杂,同时不具有普遍性,因此只需要估计其趋势和级别即可。
为此,只需要考虑算法运行时间的最高次项(随着n的增长增长最快的项)即可,这种方法被称为渐进分析(asymptolic analysis)。
给出形式化的定义:

\(f,\ g:\mathbb{N}\to\mathbb{R}^+\),如果存在正整数\(c,\ n_0\),使得所有\(n\geqslant n_0\)

\[f(n) \leqslant cg(n) \]

\(g(n)\)\(f(n)\)的渐进上界,记作\(f(n)=O(g(n))\)

\(g(n)\)是一个多项式时,我们称这个界是一个多项式界(polunomial bound);是一个指数函数时称其是指数界(exponential bound)
另外,还有一种更严格的记法:

\(f,\ g:\mathbb{N}\to\mathbb{R}^+\),如果存在正整数\(c,\ n_0\),使得所有\(n\geqslant n_0\)

\[f(n) < cg(n) \]

记作\(f(n)=o(g(n))\)

语言的复杂性

使用时间复杂性可以给语言分类:

\(t:\mathbb{N}\to\mathbb{R}^+\)是一个函数,定义时间复杂性类(time complexity class)TIME(\(t(n)\)) 为由\(O(t(n))\)时间的图灵机判定的所有语言的集合。

posted @ 2021-11-30 00:06  ParallelParadox  阅读(52)  评论(0编辑  收藏  举报