Complejidad espacial en práctica
Clase 8 de 18 • Curso de Complejidad Algorítmica con JavaScript
Contenido del curso
Clase 8 de 18 • Curso de Complejidad Algorítmica con JavaScript
Contenido del curso
Irving Juárez
Karen Benites Segura
Marcelo Arias
Brandon Argel Verdeja Domínguez
Luis Rogelio Reyes Hernandez
Yago Aguero
Ramses Acosta
Jorge Marroquin
Leonardo Buezo
Anfernee Valera
Jose Rafael Oliva Montes
Creo que hay un detalle en el código mostrado en esta clase.
Ya que en la función repetir, lo que hacemos es crear una nueva variable que es igual a el array que se le paso como parámetro. Básicamente esto:
function repetir(arr){ let newArray = arr; return newArray; }
Sin embargo, creo que en este caso newArray solo estaría apuntando al espacio en memoria de arr, por lo que aquí no se estaría realmente haciendo otro array.
.
Creo que JS hace esto con funciones y con arrays. En casos donde hay arrays anidados, tendríamos que aplicar una funciona recursiva, aplicando DeepCopy para poder hacer un arreglo u objeto nueva, pero en este caso, creo que para realmente crear un nuevo array, podemos aplicar el spread operator:
function repetir(arr){ const newArray = [...arr] return newArray; }
Estaba buscando este comentario, y estás en lo correcto. Para hacer una copia de un array se puede usar el spread operator, con Array.from o con slice. Pero asignar la "variable" original del un array a otra variable no crea una copia del array. Sólo se está haciendo que dos variables diferentes apunten al mismo espacio en memoria RAM del array en sí
¿Cómo medimos un recurso?
⌚ En Complejidad Temporal podemos usar funciones como y para medir el tiempo en que se ejecuta un algoritmo.
🌌 En Complejidad Espacial es diferente. Cada compilador asigna un espacio distinto de memoria para almacenar números o palabras.
📦 La diversidad de tamaños y formas con las que el compilador almacena información es interesante, pero para el propósito que tenemos, podemos simplificarlo a contar cuántas variables se definen para almacenar arreglos, números o cadenas.
Práctica Complejidad Espacial
Cada compilador asigna un espacio distinto de memoria para almacenar números o palabras.
La diversidad de tamaños y formas con las que el compilador almacena información es interesante, pero para el propósito que tenemos, podemos simplificarlo a contar cuántas variables se definen para almacenar arreglos, números o cadenas.
En la complejidad Espacial vamos contando las variables que se van creando y que tipos de variables son las que se están creando.
Buenas! en versión app, cada vez que abro unas lección se abre primero la configuración de segundo plano. Es muy recurrente, seria genial si pudieran solucionarlo. gracias!!!
¿Qué herramienta se puede usar para tener métricas de complejidad espacial?
Estas 3 herramientas pueden ayudarte a medir la complejidad espacial de un programa en JavaScript:
Código de la clase con un par de ejemplos para correr en la terminal de comandos:
function counter(length) { for(let i = 0; i < length; i++) { console.log(i); } } function arrayConverter(arr) { return arr.map( el => el.toString()); } function array2DConverter(value) { let newArr2D = new Array(value); for(let i = 0; i < value; i++) { newArr2D[i] = new Array(value).fill(value); } return newArr2D; } // See through console.log the auxiliar space used by arrayConverter(value) function console.log(arrayConverter([2, 3, 4])); // See how a big auxiliar space afects the time performance let start = performance.now(); console.log(array2DConverter(20000)); let elapsed = (performance.now() - start); console.log("Elapsed Time: " + elapsed.toFixed(2) + " miliseconds");
Lo que se puede ver en el ejemplo del array2DConverter(20000) es cómo se ve afectada también la performance en tiempo además de espacio, es decir se incrementa notoriamente la complejidad espacio tiempo (o como se llame). En mi laptop el resultado fue de 6.5 segundos promedio.
Has estado geniales las clases c:
Gracias