【问题标题】:What is the complexity of this while loop?这个 while 循环的复杂性是什么?
【发布时间】:2019-02-27 00:10:04
【问题描述】:

设 m 为数组 A 的大小,n 为数组 B 的大小。下面的 while 循环的复杂度是多少?

while (i<n && j<m){ if (some condition) i++ else j++}
  • 数组示例:A=[1,2,3,4] B=[1,2,3,4] while 循环最多执行 5+4 次 O(m+n)。
  • 数组示例:A=[1,2,3,4,7,8,9,10] B=[1,2,3,4] while 循环最多执行 4 次 O(n) .

我无法弄清楚如何表示 while 循环的复杂性。

【问题讨论】:

  • Codn的定义或价值是什么?似乎缺少一些上下文,我们无法判断输入与nm 变量的关系以及Codn 的值如何变化以影响运行时
  • 已编辑以使问题更清晰
  • 看起来很简单:O(n+m)。这还不足以描述问题吗?
  • @user10458501 它并没有使问题/问题更清楚。我们仍然不知道为什么案例 1 执行 5+4 次,案例 2 - 4 次。
  • 我认为,如果您进一步解释“某些条件”是什么,我们可以为您的算法推导出复杂性......也许这个细节就是为什么不清楚为什么在每种情况下它会执行如此不同的次

标签: algorithm loops while-loop time-complexity


【解决方案1】:

一种常见的方法是描述最坏情况的时间复杂度。在您的示例中,最坏情况的时间复杂度是 O(m + n),因为无论 some condition 在给定期间是什么循环迭代,循环迭代的总次数最多为m + n

如果强调时间复杂度在某些情况下具有较小的上限很重要,那么您需要弄清楚这些情况是什么,并找到表达它们的方法。 (例如,如果给定算法采用大小为 n 的数组,并且最坏情况 O(n2) 时间,也可以将其描述为 "O(mn) 时间,其中 m 的个数数组中的不同值”——当然,前提是这是真的——我们引入了一个额外的变量 m 来让我们捕捉更多与更少对性能的影响重复值。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    相关资源
    最近更新 更多