Estoy leyendo esta publicación en Big-O
Dice que el siguiente código es O (n ^ 2):
bool ContainsDuplicates(String[] strings)
{
for(int i = 0; i < strings.Length; i++)
{
for(int j = 0; j < strings.Length; j++)
{
if(i == j) // Don't compare with self
{
continue;
}
if(strings[i] == strings[j])
{
return true;
}
}
}
return false;
}
Pero no puedo entender por qué.
El bucle interno hace algo constante.
Entonces es la suma de 1 .... N de una constante. es decir, número constante O (1).
El bucle externo es la suma sobre el O (1).
Entonces me imagino que es n * O (1).
Creo que estoy malentendido algo aquí.
No creo que todos los bucles anidados signifiquen O (n ^ 2), ¿verdad?
i+1
lugar de 0
. Como está escrito, en el peor de los casos (sin engaños) 1/2 las comparaciones son redundantes.
O(N)
, este código en realidad estaría O(N^2 * M)
donde M es la longitud de las cadenas.