注意:我是算法分析的超级新手,所以不要将我的任何肯定作为绝对真理,我所说的任何(或一切)都可能是错误的。
嗨,我正在阅读有关算法分析和“Big-O-Notation”的内容,我对某些事情感到困惑。
假设要求您打印 char 数组的所有排列,对于 [a,b,c],它们将是 ab、ac、ba、bc、ca 和 cb。
一种方法是(在Java中):
for(int i = 0; i < arr.length; i++)
for(int q = 0; q < arr.length; q++)
if(i != q)
System.out.println(arr[i] + " " + arr[q]);
如果我是正确的,这个算法有一个O(n 2 )的符号。
我想到了其他方法:
for(int i = 0; i < arr.length; i++)
for(int q = i+1; q < arr.length; q++)
{
System.out.println(arr[i] + " " + arr[q]);
System.out.println(arr[q] + " " + arr[i]);
}
现在这个算法的速度是原来的两倍,但除非我错了,否则对于大 O 表示法它也是O( 2 )
它是否正确?可能不是,所以我会改写:我哪里错了?