No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Complejidad temporal en práctica

6/18
Recursos

Aportes 14

Preguntas 4

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

En mi caso utilicé el plugin “Code Runner” de Visual Studio Code. Me funcionó perfecto para los ejemplos de la clase. Me pareció un poco más rápido que usar NodeJS.

Cuando el profe dijo “lo siento si ha durado 1 segundo, por que es un algoritmo muy sencillo”

En mi caso si me dejo utilizar performance sin el require('perf_hooks), estoy usando node 16.13.0

📷 Complejidad temporal en práctica

recursos

https://radiant-anchorage-11930.herokuapp.com/

Apuntes

  • Para poder medir la complejidad temporal en JavaScript existen dos maneras populares de realizar estas medidas

Interfaz performance

  • El método performance.now() nos ayuda a medir el tiempo entre dos líneas de código en milisegundos
  • Existe otro método: console.time() pero no es tan preciso como performance.now()
  • Cabe aclarar que el tiempo de ejecución de un algoritmo es normal que varíe conforme vayamos midiendo en diferentes momentos

<aside>
📌 RESUMEN: Para poder medir la complejidad temporal podemos realizarlo mediante performance.time() o por console.time(). Las mediciones normalmente varían cuando probamos un algoritmo

</aside>

const { performance } = require("perf_hooks");

function contar(n){
  for(let i = 0; i < n; i++){
    console.log(i);
  }
}

function medir(fn){
  return (n)=> {
    let inicio = performance.now();
    fn(n);
    let final = performance.now();
    let tiempo = final - inicio;
    console.log(`Tiempo de ejecución: ${tiempo}\n`);
    return tiempo;
  }
}

const test1 = medir(contar);
test1(4);

const test2 = medir(contar);
test2(8);

OUTPUT ->

0
1
2
3
Tiempo de ejecución: 8.973800003528595

0
1
2
3
4
5
6
7
Tiempo de ejecución: 2.921099990606308

La primera vez que se ejecuta tarda mas…

Esta clase me emocionó con un simple for

Una solución para tener una medición de tiempo un poco mas exacta sobre un mismo input, podría ser, medir un determinado numero de veces el mismo input, y sobre todos los resultados obtenidos sacar el promedio.

Por si alguien quiere correr el código 😄

const performance = require('perf_hooks');

function contar(n) {
  for (let i=0; i<n; i++) {
    console.log(i);
  }
}

let inicio_tiempo = performance.performance.now();
contar(11);
let final_tiempo = performance.performance.now();
let duracion = final_tiempo - inicio_tiempo;

console.log(`El algoritmo ha durado ${duracion} ms.`)
function contar(n) {
    for (let i = 0; i < n; i++) {
        console.log(i);

    }
}
console.time('contar')
contar(5)
console.timeEnd('contar')

Práctica Complejidad temporal

El método performance.now() nos ayuda a medir el tiempo entre dos líneas de código en milisegundos. También existe el método console.time() pero no es tan preciso.

Es importante tener en cuenta que el tiempo de ejecución de un algoritmo siempre cambiará, ya que el tiempo de ejecución es una variable que depende del procesador, y la capacidad del mismo.

Link a la documentación de la interfaz performance aquí:
https://developer.mozilla.org/en-US/docs/Web/API/Performance

Para este ejercicio usé replit e hice el require de esta manera:

const {
  performance
} = require('perf_hooks')

en JS con performance.now() te premite medir el tiempo entre dos lineas de codigo