【问题标题】:complexity class of functions复杂性函数类
【发布时间】:2018-08-22 07:54:10
【问题描述】:
如果f(n) 和g(n) 是自然数上的函数,这些语句意味着什么?
-
g(n) 在Θ(f(n)) 中。
和
- 算法属于复杂度类
Θ(f(n))。
【问题讨论】:
标签:
function
math
complexity-theory
notation
【解决方案1】:
g(n) 被a.f(n) 和b.f(n) 括起来(其中a<b 是两个常数),以保证足够大的n。
算法运行时间顺序为Θ(f(n))。
【解决方案2】:
如果g(n) 在Θ(f(n))) 中,则存在大于零的实常数a 和b 和大于零的整数常数n0,这样对于所有n > n0、a * f(n) <= g(n) <= b * f(n)。例如,函数g(n) = (1 + sin(n)) * n^2 是O(n^2),因为我们可以选择a = 1、b = 2 和n0 = 1 并验证不等式是否成立。
如果算法属于复杂度类Θ(f(n)),则关系G 将大小为n 的输入映射到在某些隐含计算机上处理该输入的操作数m 具有以下属性:
-
min({m | G(n, m)}) 和 max({m | G(n, m)}) 均已定义。
- 函数
g(n) = min({m | G(n, m)})在Θ(f(n))中。
- 函数
h(n) = max({m | G(n, m)})在Θ(f(n))中。
【解决方案3】:
有关大 Θ 符号的正式定义,请查看 Wikipedia。
更详细的解释您可以找到here。
对于算法n 是输入数据的大小(例如列表/数组/...中的元素数量),您将获得算法增加n 的“成本”的估计值.
成本通常是指基本运算(算术运算、比较、条件)的数量。
“算法”的简单示例:访问大小为 n 的容器中的任意元素:
- 对于数组,您可以直接访问每个元素。所以成本是不变的,在你的符号中意味着
f(n) = 1
- 对于链接列表,您从头开始遍历列表。因此,平均而言,您必须通过列表的一半:
f(n) = n/2(或等效的f(n) = n)。