Oh, esta es una oportunidad increíble para presentar el concepto de complejidad de tiempo amortizado .
En esencia, la forma en que funcionan muchas matrices de crecimiento dinámico es que duplicarán el tamaño de la matriz cada vez que se necesite un crecimiento (es decir, si se llama a una inserción y la matriz está llena).
El problema es que debe copiar todos los objetos existentes en la nueva matriz, y esto requerirá muchas operaciones. Si la matriz tiene elementos [math] n [/ math], se necesitarán operaciones [math] n [/ math] para copiar todos los objetos en la nueva matriz. Por lo tanto, se podría pensar que una inserción toma [matemática] O (n) [/ matemática] debido a esto, por lo que las inserciones [matemática] n [/ matemática] tomarían [matemática] n * O (n) \ en O (n ^ 2) [/ matemáticas] tiempo.
- ¿Por qué nadie podría romper el algoritmo de cifrado AES hasta ahora?
- ¿Cuál es el mejor factor de contracción para un tipo de peine? ¿Por qué?
- ¿Qué es el retroceso en algoritmos?
- ¿Cuáles son algunas de las mejores grandes empresas y startups para trabajar en Silicon Valley si te apasionan los algoritmos y la codificación?
- ¿Cuándo se usaría un algoritmo gráfico?
Sin embargo, resulta que este no es realmente el caso. El análisis de complejidad estándar consiste básicamente en unir todos los peores casos posibles y considerar que esa es la complejidad de su peor caso. Pero con el análisis amortizado, podemos eliminar algunas partes de la complejidad que nunca suceden realmente, y deducir que la complejidad es menor de lo que hubiéramos pensado inicialmente. Para ilustrar por qué el análisis estándar no es totalmente exacto, eche un vistazo a esto:
Cada cuadro blanco representa una celda vacía en el conjunto, cada cuadro gris representa una celda ocupada en el conjunto, cada cuadro rojo representa un elemento insertado y cada cuadro azul representa todos los elementos que deben copiarse para aumentar el tamaño del conjunto .
Para cada inserción, el número de operaciones es el número de cuadros rojos más el número de cuadros azules.
Entonces este es el número total de operaciones para todas las inserciones. Sin embargo, hagamos algunos arreglos llevando los rojos al fondo y “colapsando” los cuadros azules a la izquierda.
Y resulta que para cada inserción, no se realizan más de 3 operaciones, lo que significa que cada inserción es, de hecho, una operación [matemática] O (1) [/ matemática].
Ese es el poder del análisis amortizado: obtienes una imagen más precisa de qué tan bien funcionan tus algoritmos, y puede mostrarte que algunos algoritmos son realmente mejores que otros en la práctica.