【问题标题】:Can someone check if I'm determine the the correct run time, please有人可以检查我是否确定正确的运行时间吗?
【发布时间】:2021-09-24 02:16:22
【问题描述】:

在我的作业中,我被要求通过计算它执行的大致操作数来确定以下方法的大 O 运行时间。我不太确定我的答案,有人可以检查我是否做得正确吗?

【问题讨论】:

  • 你给出这些数字没有任何解释,我们无法检查你的工作。而且常数 c 只出现在最里面的指令中看起来很奇怪。
  • “multiply loops together”不是获得准确界限的有效方法,尽管它通常在简单的情况下有效,这就是为什么你看到很多人使用它的原因。 Yves 的回答提供了一个有效的方法。

标签: algorithm runtime big-o


【解决方案1】:

内层循环(while)被执行O(Log(i))次,因为j,初始化为i,被减半的次数越多越好,循环体占用的时间是恒定的。

由于在[0,n) 范围内为i 执行此循环,因此总运行时间为O(ΣLog(i)) = O(Log(n!)) = O(n Log(n))。 (在i上从0n-1求和,最终表达式取自斯特林公式。

没有必要详细说明所有说明。

【讨论】:

  • 感谢您的意见! while 循环在 for 循环内部,因为 for 循环执行 (n) 次,而 while 循环本身执行 (log n) 次,我们不应该将它们相乘吗?这就是我得到 (n log n) 的方式。
  • @VictoriaM.: 否 while 循环不会执行 log(n) 次。花点时间阅读我的答案。
猜你喜欢
  • 2013-01-12
  • 2020-09-08
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多