【问题标题】:What is the complexity of function f(n) with n=f(n).log(f(n))n=f(n).log(f(n)) 的函数 f(n) 的复杂度是多少
【发布时间】:2015-02-12 07:23:11
【问题描述】:

函数f(n)的复杂度是多少,最好是Big-O记法,f(n)满足条件n = f(n).log(f(n)),f(n) > 1 .假设登录base 2。

我试图将 f(n) 与条件隔离,但无法完成。 使用excel得到函数f(n)的图形后。 似乎 f(n) = O(n^2) 但我不知道怎么弄出来?

【问题讨论】:

  • n = f.log(f)? WTH 是什么意思?
  • f(n) 是 n = f(n) 的 n 的函数。日志(f(n))。就像我们说的 x = ylogy
  • 您意识到这个条件定义了一组特定的数字n,它与f 的复杂性无关
  • @Rerito 不,这是我的练习。问题是我们无法将 f 与条件隔离,所以我正在寻求帮助。
  • 然后让自己清晰(从数学上讲)!像f 这样的句子满足n = f(n).log(f(n)) 任何(真实)数字n

标签: algorithm math big-o complexity-theory logarithm


【解决方案1】:

我认为复杂度甚至低于O(n)——即O(n/ln(n))。半证明:

(用 n/ln(n) 代替 f(n))

RHS = n/ln(n) * ln(n/ln(n)) = n/ln(n) * (ln(n) -ln(ln(n))) = = n - n * ln(ln(n))/ln(n) = n * (1-ln(ln(n))/ln(n)) = n*Theta(1) = Theta(n) = LHS

为了清楚起见,我几乎在所有地方都跳过了 Theta 符号。

【讨论】:

  • 我不买半样张。你能澄清一下:n * (1-ln(ln(n))/ln(n)) = n*Theta(1)。很明显 n * (1-ln(ln(n))/ln(n)) = O(n),但 theta 不正确。现在如果你取 n * (1-ln(ln(n))/ln(n)) = O(n),那么你所展示的实际上是 n/log(n) = O(f(n) )。我们知道 g = O(h) 并不一定意味着 h = O(g)。事实上,f 实际上比 n/log(n) 增长得更快。你可以用数字检查它,但它也可以显示出来…… f 是次线性的。确切的函​​数是 e^W(n),其中 W 是 Lambert W。也许有人可以在 e^W(n) 和 n 之间想出一个聪明的函数。
  • 嗯,Theta 符号的定义需要两个常量:c1,c2,这样f*c1<g<f*c2 就可以得到足够大的参数。如果我采用c1=0.5c2=2,我们得到:0.5*(1-ln(ln(n))/ln(n))<1<2*(1-ln(ln(n))/ln(n)),这对于n 的大值是正确的,因为ln(ln(n))/ln(n) 趋于零。
  • 我同意复杂度甚至低于o(n),实际上f(n) = theta(n/log(n))。证明:*对于下界:我们需要找到 c1 和 n1 使得 f(n) >= c1。 f(n)。 log(f(n))/log(f(n).log(f(n))) 其中 n > n1 => log(f(n)) + log(log(f(n)) >= c1。 log(f(n)) => log(log(f(n))) >= (c1 - 1) log(f(n)) 让 n1 > 2 并且 c1 = 1 然后 LHS = log(log(f (n)) > RHS = 0 *对于上限:取 n2 > 2 和 c2 > 2 然后 LHS = log(log(f(n))
【解决方案2】:

评论越来越长,所以这里有一个证明的草图。这可能是家庭作业,所以请确保你学到了一些东西,而不是简单地抄下来。

为了证明f是O(n),你必须证明存在一个M和n1,其中f(n) n1。

我们知道 n = f(n) log(f(n)),所以 M |n| = M |f(n)| |对数(f(n))|。

所以我们试图找到的是一个 M 和 n1

  f(n) < M |n| = M |f(n)| |log(f(n))|

对于 n > n1。

n、f 和 log f 都是正数,所以我们可以去掉 |.|得到

  f(n) < M f(n) log(f(n)) = M |n|

我们的目标是找到一个 M 和 n1

  f(n) < M f(n) log(f(n)) = M |n|

对所有 n > n1 都成立。选择 M = 1,n1 = 10,然后

  f(n) < f(n) log(f(10)) <= f(n) log(f(n)) = |n|  (where M is now set to 1)

对于 n > n1。 f(n) log(f(10)) n1 是单调的(家庭作业:证明这是真的) . f(n) 1。

这表明 f(n) 是 O(n)。

【讨论】:

  • Pick M = 1, n1 = 10, then f(n) &lt; f(n) log(f(10)) &lt;= f(n) log(f(n)) = |n| (where M is now set to 1) for n &gt; n1. f(n) log(f(10)) &lt;= f(n) log(f(n)) is true because log(f(n)) is monotonic for n&gt;n1 (homework exercise: show that this is true). 对我来说毫无意义!!!!!!
  • 谢谢@thang。我现在明白了。只是让它更清楚。选择 M=1,我们的目标是找到 n1 使得 f(n) n1。我们需要确保 log(f(n)) = n/f(n) > 1 并考虑 f(n) > 1 作为给定条件。所以我们可以取 n1 > 1 的任何值,然后 n/f(n) = log(f(n)) >1,因此 f(n) n1
  • 因为您的解决方案首先尝试猜测 g(n),然后我们证明它是满足条件的。我想知道我们是否可以找到满足 f(n) = theta(g(n)) 的 g(n)。我们也能猜到吗?
猜你喜欢
  • 2022-01-20
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 2010-10-18
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多