【问题标题】:How to analyse complexity of algorithm?如何分析算法的复杂度?
【发布时间】:2013-06-03 14:27:01
【问题描述】:

我有几个我目前坚持的例子。非常感谢您的建议以及如何做到这一点。这些例子的最佳和最坏情况是什么?

  • 示例 1

  • 示例 2

  • 示例 3

【问题讨论】:

  • 如果您在作业方面需要帮助,最好将图像转换为文本,以便我们可以复制、粘贴和添加 cmets。懒惰...
  • 对不起,我对堆栈溢出有点陌生。不知道会有帮助。将立即编辑。
  • 例如,在示例 1 中,您可以编写该程序;改变 n 并将其与 k 进行对比,这应该会给你这个想法

标签: algorithm complexity-theory time-complexity


【解决方案1】:

我不会给你答案。但这里有一个示例,说明我将如何使用 cmets 来处理它。

for(int i = 0; i < N; i++) //This line is executed N times

    for(int j = i; j < N; j++) // This line is executed (N - i) times, for every N

         doSomeWorkOn(i, j);  //This can add complexity as well, but let's assume we're trying to figure out how many times this is called.

所以请注意,每次我们运行第一个循环时,我们在第二个循环中所做的工作量都会减少。这使事情复杂化。如果我们的内部循环读取

for(int j = 0; ......) 

那么答案很简单,就是N * N。N次,我们需要做N量的工作。在这种情况下,我们拥有的是

N + (N-1) + (N-2)....(N-N) 如果你再谷歌数学系列,你会发现这简化为 (N(N+1))/2。

编辑:

请注意,如果您与我的操作相反,则可能会更容易找到该系列,这意味着

0+1+2+...(N) = N + (N-1) + (N-2) ... (0) = (N(N+1))/2  

第一种方法是最常见的。我有反向做的习惯,因为我记住了系列表,并且看到它与 N 的关系对我来说更有意义,但是从初学者的角度来看,你可能更容易从低端开始,因为这就是大多数帮助页面/教科书/教授将如何呈现它。然而,它是相同的。无论哪种方式对您来说都是最简单的。

【讨论】:

    【解决方案2】:

    对我来说,这看起来像是算法课的作业,但要分析迭代算法,您需要使用求和规则。 Introduction to the Design and Analysis of Algorithms Anany Levitin 是一本值得拥有的好书。

    并同意 ChrisCM 所说的 -

    取自书中:

    有用的规则:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2011-11-28
      • 2013-09-23
      • 1970-01-01
      相关资源
      最近更新 更多