なぜlist.addとネストされたループはO(N ^ 4)時間の複雑さを与えるのでしょうか?

user3437460:

私はこのコードスニペットのビッグO時間の複雑さのために、この質問に出くわした:次のコードのための時間複雑性はO(N ^ 4)であることが保証されています。

ArrayList<Integer> list = new ArrayList<Integer>();

for(int i = n; i>=1; i--)           //n 
    for(int j = 1; j<=i; j++)       //n     
        if(!list.contains(i*j))     //n?    
            list.add(i*j);          //1?

私の質問:なぜ、代わりにO(N ^ 3)のそれはO(N ^ 4)ですか?

k5_:

list約持っているn^2/2エントリ[*]、そのルックアップがlist.contains(i*j)ありO(n^2)ませんO(n)

*:いくつかはあまり重複が追加されていないので、私はとしてカウントするのに十分な推測します n^2

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=199829&siteId=1