先生は私に彼の平均複雑さを見つけるために以下のコードを与えた:平均複雑さは
int function(int a[], int n)
{
int k=0;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
k=k+((a[i]*a[i]+a[j]*a[j])%5==0)
return k;
}
void main()
{
int vector={0,1,2,3,4,5,6,7,8,9}
int a=function(vector, 10);
printf("%d\n", a);
}
私はコードがn*(n+1)/2
回を実行し、私は最悪のケースであると結論づけることが判明ループをunrowlingすることによりO(n^2)
.I n>n0
ためn*(n+1)/2 < c*n^2
は平均複雑さの定義は非常に似ていることを知っているが、私はit.Iが、この場合のこれらのタイプを計算するための標準化された方法がある場合は複雑であるかを知りたい計算するのは非常に困難見つけ存在するため、問題
(例:イテレータ間の依存関係を持つネストされたループ)。
このコードは常に同じ作業量を実行するので、平均的なケース、最良のケース、最悪のケースは同じでなければなりません。 – templatetypedef
@templatetypedefそれも私の推測でした。でも私の先生のためには、より高い答えが必要です。 – Marga
私は、あなたが "より高い"という意味を理解しているのか分かりませんが、ランタイムは長さだけに依存し、それ以外のものは必要ありません。 – templatetypedef