Los métodos de arrays en JS como map, filter, sort, reduce, findIndex, etc. ¿Cómo es que les puedo dar su notación correctamente??? ¿Tend...

Christian Boffill

Christian Boffill

Pregunta
studenthace 3 años

Los métodos de arrays en JS como map, filter, sort, reduce, findIndex, etc. ¿Cómo es que les puedo dar su notación correctamente??? ¿Tendría que saber como están construidos o hay una forma de analizarlos??? gracias

1 respuestas
para escribir tu comentario
    Marcelo Arias

    Marcelo Arias

    teacherhace 3 años

    ¡Hola Christian! Muy buenas preguntas.

    Primero, si los arreglos tienen relación directa con el input (la entrada) entonces sí es necesario analizarlos para obtener la notación Big-O:

    // .map() recibe a un input ✅ const algoritmoA = (n) => { n.map((item) => console.log(item)); // <- Necesitamos analizarlo }; algoritmoA([1, 2, 3, 4, 5]); // .map() no recibe al input ❌ const algoritmoB = (n) => { ['x', 'y'].map((item) => console.log(item)); }; algoritmoB([1, 2, 3, 4, 5]);

    Y en el caso en que necesitemos analizarlos → Necesitamos entender su estructura, y determinar si al momento de incrementar el tamaño de la entrada, el método tendrá que incrementarse igual.

    Me dejaste unos ejemplos muy buenos:

    • .map
      : Recorre un arreglo como
      for
      , entonces es un
      O(n)
      .

    • .filter
      : Recorre un arreglo como
      for
      y filtra los elementos necesarios, entonces es un
      O(n)
      .

    • .reduce
      : Recorre un arreglo como
      for
      y transforma los elementos, entonces es un
      O(n)
      .

    • .findIndex
      : Recorre un arreglo como
      for
      hasta encontrar el índice de un elemento, entonces es un
      O(n)
      .

    Sin embargo, sí existen casos donde tenemos que saber cómo están construidos los algoritmos según el entorno de ejecución. Para un método como

    sort
    , tenemos muchos algoritmos de ordenamiento, y los entornos de ejecución no usan los mismos.

    Por ejemplo:

    🤔 En este caso ¿Qué notación utilizaríamos? Big-O se alinea al peor caso posible (el de la complejidad mayor). Como respuesta podemos decir que

    O(n * log(n))
    , pues es mayor a
    O(n)
    .

    ¿Y si estamos interesados en un navegador o entorno de ejecución en específico?

    ✅ Gracias a que Big-O es un estándar, lo usual es encontrar esta medida en la documentación del navegador o del entorno de ejecución, o bien encontrar el nombre del algoritmo utilizado. (Por ejemplo, si es Merge Sort sabemos que es

    O(n * log(n))
    ).

Curso de Complejidad Algorítmica con JavaScript

Curso de Complejidad Algorítmica con JavaScript

Analiza y optimiza algoritmos con JavaScript. Aprende a evaluar su eficiencia en términos de tiempo y espacio. Comprende cómo seleccionar el mejor algoritmo para mejorar el rendimiento del software.

Curso de Complejidad Algorítmica con JavaScript
Curso de Complejidad Algorítmica con JavaScript

Curso de Complejidad Algorítmica con JavaScript

Analiza y optimiza algoritmos con JavaScript. Aprende a evaluar su eficiencia en términos de tiempo y espacio. Comprende cómo seleccionar el mejor algoritmo para mejorar el rendimiento del software.