【问题标题】:(log n)^k = O(n)? For k greater or equal to 1(log n)^k = O(n)?对于 k 大于或等于 1
【发布时间】:2023-08-21 21:03:02
【问题描述】:

(log n)^k = O(n)? For k greater or equal to 1.

我的教授在课堂上向我们展示了这个陈述,但是我不确定时间复杂度为 O(n) 的函数意味着什么。即使像n^2 = O(n^2) 这样的东西,函数 f(x) 怎么会有运行时复杂度?

至于语句如何等于O(n)而不是O((logn)^k)?

【问题讨论】:

  • 来自常见问题解答:“你的问题应该有合理的范围。如果你能想象一本书可以回答你的问题,那你就问得太多了。”

标签: big-o notation logarithm proof


【解决方案1】:

(log n)^k = O(n)?

是的。 big-Oh 的定义是,如果存在正常数 N 和 c,则函数 f 在 O(g(n)) 中,因此对于所有 n > Nf(n) <= c*g(n)。在这种情况下,f(n)(log n)^kg(n)n,所以如果我们将其插入到定义中,我们会得到:“存在常量 N 和 c,这样对于所有 n > N(log n)^k <= c*n” .这是真的,所以(log n)^k 在 O(n) 中。

函数 f(x) 如何具有运行时复杂度

它没有。 big-Oh 表示法没有什么是特定于运行时复杂性的。 Big-Oh 是一种对函数增长进行分类的符号。我们谈论的函数通常衡量某些算法的运行时间,但我们可以使用 big-Oh 来谈论任意函数。

【讨论】:

    【解决方案2】:

    f(x) = O(g(x)) 表示f(x) 增长较慢或与g(x) 相当。

    从技术上讲,这被解释为“我们可以找到一个 xx_0 和一个比例因子 M,因此 f(x) 的大小超过 x_0 小于g(x)。”或数学:

    |f(x)| < M |g(x)| for all x > x_0.

    所以对于你的问题:

    log(x)^k = O(x)? 正在询问:是否存在 x_0 和 M 使得 log(x)^k < M x for all x>x_0.

    这种Mx_0 的存在可以使用各种极限结果来完成,并且使用L'Hopitals 规则相对简单.. 但是它可以在没有微积分的情况下完成。


    我能想出的不依赖 L'Hopitals 规则的最简单证明使用泰勒级数

    e^z = 1 + z + z^2/2 + ... = sum z^m / m!
    

    使用z = (N! x)^(1/N)我们可以看到

    e^(x^(1/N)) = 1 + (N! x)^(1/N) + (N! x)^(2/N)/2 + ... (N! x)^(N/N)/N! + ...
    

    对于 x>0,所有项都是正数,所以只保留我们得到的第 N 个项

    e^((N! x)^(1/N)) = N! x / N! + (...) 
                     = x + (...)
                     > x  for x > 0
    

    取两边的对数(因为log是单调递增的),然后升到N次方(也是从N>0单调递增的)

    (N! x)^(1/N) > log x  for x > 0
    N! x > (log x)^n      for x > 0
    

    这正是我们需要的结果,(log x)^N < M x 用于一些 M 和所有 x > x_0M = N!x_0=0

    【讨论】: