Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 对于大O复杂性,是否有不止一个答案?_Algorithm_Big O_Analysis - Fatal编程技术网

Algorithm 对于大O复杂性,是否有不止一个答案?

Algorithm 对于大O复杂性,是否有不止一个答案?,algorithm,big-o,analysis,Algorithm,Big O,Analysis,您如何从大O复杂性的角度来讨论以下函数 for (int i = 0; i < n; i++) { for (int j = 0; j < n && j < 10; j++) { //do something in constant time } } for(int i=0;i

您如何从大O复杂性的角度来讨论以下函数

for (int i = 0; i < n; i++) {
  for (int j = 0; j < n && j < 10; j++) {
    //do something in constant time
  }
}
for(int i=0;i
在这种情况下,我会看到最坏的情况是O(n),我可以安全地忽略值小于10的情况是O(n^2),因为它远离“最坏”情况

为了更真实的体验。让我们讨论一下查找两个字符串是否是彼此的置换的大小复杂性。实现这一点的简单方法是对所有字符值(ascii字符为128)采用整数数组

现在,如果您切换到向量或hashmap(我会说只使用整数数组,但有人使用的示例是hashmap),您可以输入多达128个字符的可变大小

我们讨论了尺寸的复杂性,我只是说它是O(1),因为在最坏的情况下,你会得到128。另一个人自信地说,它是O(n),最多128个字符,并且成为O(1)的限制。我们没有一个明确的答案


我从来没有听说过在处理大O时使用“限制”。那么在这种情况下哪个是正确的呢?判断大O的正确复杂性只有在n“足够大”时才被考虑,这是对的吗?或者,在其他情况下,是否有其他答案?

您的帖子中有几个问题。而且,它们不是真正的编程问题。我将尝试一个有用的答案:

循环既在
O(n)
中,也在
O(n^2)
中(请阅读关于Big Oh的定义,例如维基百科)。如果需要,循环也可以是
O(n^3)
O(n^4)
。但是,我们的想法是找到可能的“最低的”
O(f(n))
,在您的例子中是
O(n)
,更准确地说是
O(10*n)
,它实际上与
O(n)
相同

算法的增长顺序(或者复杂度,如果你愿意)是其输入大小的函数。那么在你的例子中,两个字符串是相互排列的吗?这取决于字符串的大小。假设最小字符串的大小为
n
,并且您必须读取决策问题的整个输入,您至少有
n
步骤(这表明它不能是
O(1)

哈希映射数组的有限大小是算法内存的增长顺序(空间复杂度),如果只使用ASCII集,那么我可以看到它也是
O(1)

答案可以不止一个吗

是的,大O表示法表示“更小或相等”,所以如果你的努力是在O(n)中,它也在O(n logn)或O(n^2)中。然而,人们通常对紧束缚感兴趣

让我们讨论一下,如果两个字符串是彼此的排列,那么查找它们的大小复杂性


字符串中可能的字符集是有限的,因此大小复杂度为O(1)。根据我之前所说的,它也在O(n)中;但是更紧的界限是O(1)。

可能的复制IMHO的内环只是O(1)。同样地,对于像for(inti=0;i<(n<1000?pow(10,n):10);i++)
这样的循环也是如此,它的迭代次数从不超过10^1000次……OP询问的是检测置换的空间复杂度,而不是时间复杂度。不确定我是否理解了注释,我感到相当困惑。最后一句不是关于空间复杂性吗?第三段不是关于时间复杂性吗?我现在明白你的意思了。我使用了算法的内存而不是空间复杂度。我的措辞可能很不幸。我希望通过这一评论,它现在更清楚了。为了补充答案,有时编码大小的描述会有所不同。矩阵乘法算法的运行时复杂性通常在
n
中说明,而输入的大小为
n*n
,这可能会造成混淆。更具体地说,使用该定义的简单矩阵乘法将产生
O(n^3)
,但这意味着运行时间是
n
中的立方,而不是输入的大小,即
n*n
。因此,在输入大小中,运行时间将是
O(n^1.5)