Que algo sea mejor
Más rápido
Menos espacio
Menos lineas de código
El tiempo de ejecución
Big O
Podemos hacer pequeñas modificaciones que no cambien el Big O pero si lo hagan más rápido
Muchas veces mejorar el tiempo significa complicar nuestro código
Usar menos recursos de la computadora
Big O pero de espacio
También aplican las cosas de arriba
¿Qué tenemos que optimizar?
Siempre depende del objetivo en su uso
Que trabajo se repite más
ENTREVISTAS: Escuchar la consigna
const arr = [ 5 , 3 , 7 , 1 , 9 ] ;
const num = 16 ;
function arraySum ( arr , num ) {
for ( let i = 0 ; i < arr . length ; i ++ ) {
for ( let j = i + 1 ; j < arr . length ; j ++ ) {
if ( arr [ i ] + arr [ j ] === num ) return true ;
}
}
return false ;
}
// Tiempo: O(n^2)
// Espacio: O(1)
function arraySum ( arr , num ) {
arr . sort ( ( a , b ) => a - b ) ;
let start = 0 ;
let end = arr . length - 1 ;
while ( start < end ) {
const sum = arr [ start ] + arr [ end ]
if ( sum === num ) return true ;
if ( sum < num ) start ++
else if ( sum > num ) end --
}
return false ;
}
// Tiempo: O(n^2)
// Espacio O(1)
// Repito
// Tiempo: O(n)
5 3 7 1 9
16
function sumArray ( arr , num ) {
const memo = { }
for ( let i = 0 ; i < arr . length ; i += 1 ) {
if ( memo [ num - arr [ i ] ] ) return true ;
memo [ arr [ i ] ] = true ;
}
return false ;
}
// Tiempo: O(n)
// Espacio: O(n)
function fibonacci ( n ) {
if ( n === 0 || n === 1 ) return n ;
return fibonacci ( n - 1 ) + fibonacci ( n - 2 ) ;
}
// Tiempo: O(2^n)
// Espacio: O(n)
function fibonacci ( n , memo = { } ) {
if ( n === 0 || n === 1 ) return n ;
if ( memo [ n ] ) return memo [ n ] ;
const resultado = fibonacci ( n - 1 , memo ) + fibonacci ( n - 2 , memo ) ;
memo [ n ] = resultado ;
return resultado ;
}
// Tiempo: O(n)
// Espacio: O(n)
fibonacci ( 1476 )