确定复杂性

时间:2017-06-08 16:19:54

标签: algorithm time-complexity complexity-theory

假设我已经给出了一个算法X,它将整数n作为输入。

现在考虑所有输入n的X需求小于xx是固定的任意自然数)  O(n 2 )步骤。但是对于每个输入n > x,它需要n步。

问题: X的(最坏情况)运行时复杂性是什么?

答案: X的(最坏情况)运行时复杂度为O(n)。对于每个固定的x,我们可以找到数n,使得n>(x 2 )和所有n的(最坏情况)运行时n>(x 2 )是上)。我不确定我的答案是否正确。

修改:为了更好地理解 T(n, x) \in if n <= x then O(n^2)其他O(n)。什么是最坏的运行时复杂性?

2 个答案:

答案 0 :(得分:1)

根据定义,对于Big-Oh(或任何复杂性约束)而言重要的是所有n值超过某个固定边界的行为。您的算法最终在n中是线性的,因此运行时由O(n)绑定。

请注意,如果您的算法接受n的输入,那实际上意味着在某个数字系统中接受n的表示。在典型的计算机上,这将是2位(二进制)表示。 base-k(k-ary)表示将采用log_k(n)数字,向上舍入。因此,如果您在二进制系统中并且数字为9,则表示为1001且需要4位(9的基数2大于3但小于2,因此为4位)。

鉴于此,您的输入大小实际上不是n而是log_2(n)(假设为二进制),如果您的算法需要时间n,则运行时w.r.t.输入大小实际上是指数的(因为n = 2 ^(log_2 n))。

这是一个小小的挑剔,但可能会让你以不同的方式思考算法。如果不是取一个数字而是取一个包含n元素的列表,这种区别就会消失。

答案 1 :(得分:1)

算法X的运行时复杂性与成本函数(统一成本标准)T(n, x)O(n^2)时是n <= x的成员,否则是O(n)的成员,即:T(n, x) \in if n <= x then O(n^2) else O(n),如果我们将x \in Nat修改为您所说的任意数字,O(n)

这种情况是因为一旦x被修复,并且假设自然数没有约束,那么总会有n >= x^2,因此在处理渐近性时我们可以忽略O(n^2)算法。

因此,R(n) = T(n, x) \in O(n)

我发现你的理由是合理的。