与“找出具有给定差异的一对”中的时间复杂性混淆

时间:2015-07-02 22:21:47

标签: arrays algorithm big-o time-complexity

我正在尝试用算法学习时间复杂度。我发现这个问题很有意思,它说:“找出具有给定差异的对”。我理解这个问题并缩小到两个方法:

for( i = 0; i < nimages; i++ )
{
    for( j = 0; j < boardSize.height; j++ )
    {
        for( k = 0; k < boardSize.width; k++ )
        {
            objectPoints[i].push_back(Point3f(k*squareSize, j*squareSize, 0));
        }
    }
}

请有人解释哪一个更好实施。谢谢。

如果是参考,我指的是这个问题: http://www.geeksforgeeks.org/count-pairs-difference-equal-k/

1 个答案:

答案 0 :(得分:2)

  

请有人解释哪一个更好实施。

这是一个设计解决方案,并没有明确的答案。每种解决方案都有其优点和缺点,并选择&#34;正确的&#34;一个取决于实际需要。
一些例子考虑因素:

  1. 如果您的内存非常有限,或者元素流非常大(比如它的大小为10GB),则散列解决方案变得不可行,因为您无法将其存储在内存中,并且排序解决方案+二元搜索变得更具吸引力。
  2. 如果您希望大型阵列的平均时间最快,并且您拥有尽可能多的内存 - 由于O(n)平均时间复杂度,散列解决方案会变得更具吸引力。
  3. 如果您的应用程序是实时运行的,而且您负担不起,则无论如何都会花费O(n^2)时间,无论它有多低 - 它会破坏您的公司。由于散列解决方案在最坏的情况下衰减到O(n^2)(极少数情况下),你会想要避免它,再次 - 排序变得更有吸引力。
  4. 由于两者都相对有效,并且如果没有真正的限制(可能是99%的情况),那么更容易实施和维护的是你应该更喜欢的那个。