注:私はアルゴリズム分析の超初心者なので、私の断言を絶対的な真実と見なさないでください。私が述べていることは何でも(またはすべて)間違っている可能性があります.
こんにちは、アルゴリズム分析と「Big-O-Notation」について読んでいて、何かに戸惑いました。
char 配列のすべての順列を出力するように求められたとします。[a,b,c] の場合、それらは ab、ac、ba、bc、ca、および cb になります。
それを行う1つの方法は次のとおりです(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]);
}
現在、このアルゴリズムは元の よりも 2 倍高速ですが、私が間違っていない限り、big-O 表記ではO( 2 )でもあります。
これは正しいです?おそらくそうではないので、言い換えます: どこが間違っていますか??