【问题标题】:Does the number of comparisons in the same for loop affect time complexity?同一个for循环中的比较次数会影响时间复杂度吗?
【发布时间】:2017-12-14 03:35:35
【问题描述】:

在一个示例练习中,我要检查数组中的所有元素是否彼此相同。这个问题不是关于最有效的方法。相反,它是关于这两种解决方案的。

 for(var i=0; i < set.length-1; i++)
  {
    if (set[i] != set[i+1]) // could have compared all elements to the firstelement instead of switching
    {
     isTrue=false;
    }

  }

上述算法将每个索引与之后的索引进行比较。

var firstIndex=set[0];
for(var i=0; i < set.length-1; i++)
{
  if(set[i] != firstIndex)
    {
        isTrue=false;
    }
 }

虽然此算法将当前索引与第一个索引进行比较。尽管这些算法至少是 O(N)。比较的差异会影响时间/空间复杂度吗?

【问题讨论】:

  • 如果条件是i &lt; set.length-1 &amp;&amp; isTrue,这将有助于提高效率,因此它会在遇到第一个非重复项时停止。
  • 我正在准备面试,我只是想了解如何根据给定的代码计算复杂度。无论哪种情况,大 O 都是线性的吗?

标签: javascript algorithm performance time-complexity


【解决方案1】:

让我们把事情弄清楚

它们的时间复杂度都是O(n)。空间复杂度为O(1)

数组索引访问等对 Big-O 时间复杂度没有影响。

虽然这些算法至少是 O(N)。

至少这些是O(n)

您可以通过像

这样的操作来提高运行时间而不是时间复杂度
if(set[i] != firstIndex)
{
    isTrue=false;
    break; 
}

【讨论】:

  • 啊!好的,从stackoverflow.com/questions/4915842/…,我了解到大多数算法通常不知道运行时。关于扩展到更大的输入,运行时是否重要?
  • 对于缩放,运行时间很重要——但你也知道你将拥有的变化将成线性比例。如果您将此算法扩展到较大的n,则任何更改都将是线性的。不确定您是否在问这个问题 - 但对于运行时 ofc,n 存在差异,但对于复杂性,它们属于同一类。@NithinMoorthy
【解决方案2】:

空间复杂度:没有变化,因为您没有使用任何额外的变量/数据结构(第二个 sn-p 中的firstIndex 不考虑,因为它占用恒定空间)。

时间复杂度:很少或没有变化。在这两个 sn-ps 中,您都在进行单个比较,但第一个 sn-p 会慢一些,因为与直接变量访问相比,数组访问速度较慢。

【讨论】:

  • 好的,这正是我想知道的。重复访问数组会导致任何变化。谢谢!你知道为什么这个问题被否决了吗?
  • 另外,大O在这两种情况下都是线性的吗?
  • Big O 在这两种情况下都是线性的,因为数组访问通常不考虑时间复杂度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-05
  • 2021-03-20
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多