¿Por qué bucle anidado con list.add da O (n ^ 4) complejidad de tiempo?

user3437460:

Me encontré con esta pregunta por el momento O grande complejidad de este fragmento de código: Se garantiza que la complejidad del tiempo para el siguiente código es 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?

Mi pregunta : ¿Por qué es O (n ^ 4) en vez de O (n ^ 3)?

k5_:

listtiene sobre n^2/2las entradas [*], por lo que la búsqueda list.contains(i*j)es O(n^2)que noO(n)

*: Algunos menos, porque los duplicados no se agregan, pero creo que lo suficiente para contar como n^2

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=199832&siteId=1
Recomendado
Clasificación