Hacer que algo funcione mejor
Mas rapido
Menos recurso: Gastos de memoria
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
Complejidad de espacio
Los mismo que arriba
Operadores ternarios
Recursión
Operadores de comparacion
Programación funcional
Distintos tipos de Optimización
Depende lo que estemos desarrollando
Depende del recurso escaso
Cuanto queremos perder en una cosa por la otra
Escuchar la pregunta
Puede tener pistas de que le interes optimizar
HACER PREGUNTAS
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)
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 )