Saltar al contenido

Modelo por capas

Contar el trabajo que crece

Para comparar operaciones se cuenta el trabajo que crece con la cantidad de datos, n: comparaciones, copias, casilleros abiertos. Lo que no depende de n (preparar una variable, devolver un resultado) no cambia la comparación cuando n es grande.

Se escribe con la notación O, que dice cómo crece ese trabajo:

Notación Se lee Con n = 1000 Ejemplo
O(1) constante 1 leer la posición i de un array
O(log n) logarítmico unas 10 búsqueda binaria (descartar la mitad en cada paso; unidad 1)
O(n) lineal 1000 recorrer todos los valores
O(n²) cuadrático 1 000 000 comparar cada valor con todos los demás

En la figura, la misma tabla como barras con n = 1000. La escala es logarítmica: cada marca multiplica por 10.

Cuánto trabajo es cada notación con n = 1000Cuatro barras horizontales en escala logarítmica. O(1) vale 1; O(log n) vale unas 10; O(n) vale 1000; O(n²) vale 1 000 000. La barra de O(n²) es la más larga por mucho.Trabajo con n = 1000O(1)1O(log n)unas 10O(n)1000O(n²)1 000 0001101001 00010 000100 0001 000 000escala logarítmica: cada marca multiplica por 10
Los valores de la tabla, dibujados en escala logarítmica: de O(n) a O(n²) hay tres marcas de diferencia, es decir, mil veces más trabajo.

El primer programa del fenómeno compara cada correo con todos los demás: O(n²).

Para cada valor de una lista de n valores, un programa cuenta cuántas veces aparece recorriendo la lista entera. Con n = 1000, ¿cuántos pasos hace aproximadamente?