Algoritmos de fuerza bruta explicados

Los algoritmos de fuerza bruta son exactamente lo que parecen: métodos sencillos para resolver un problema que se basan en la potencia informática pura y en probar todas las posibilidades en lugar de técnicas avanzadas para mejorar la eficiencia.

Por ejemplo, imagina que tienes un candado pequeño con 4 dígitos, cada uno del 0 al 9. Olvidó su combinación, pero no quiere comprar otro candado. Como no puede recordar ninguno de los dígitos, debe usar un método de fuerza bruta para abrir la cerradura.

Así que vuelve a poner todos los números en 0 y prueba uno por uno: 0001, 0002, 0003, y así hasta que se abra. En el peor de los casos, se necesitarían 104 o 10,000 intentos para encontrar su combinación.

Un ejemplo clásico de la informática es el problema del viajante de comercio (TSP). Suponga que un vendedor necesita visitar 10 ciudades de todo el país. ¿Cómo se determina el orden en que se deben visitar esas ciudades de manera que se minimice la distancia total recorrida?

La solución de fuerza bruta es simplemente calcular la distancia total para cada ruta posible y luego seleccionar la más corta. Esto no es particularmente eficiente porque es posible eliminar muchas rutas posibles a través de algoritmos inteligentes.

La complejidad temporal de la fuerza bruta es O (m n ) , que a veces se escribe como O (n * m). Entonces, si tuviéramos que buscar una cadena de "n" caracteres en una cadena de "m" caracteres usando la fuerza bruta, nos tomaría n * m intentos.

Más información sobre algoritmos

En informática, un algoritmo es simplemente un conjunto de procedimientos paso a paso para resolver un problema dado. Los algoritmos pueden diseñarse para realizar cálculos, procesar datos o realizar tareas de razonamiento automatizadas.

Así es como Wikipedia los define:

Un algoritmo es un método eficaz que puede expresarse en una cantidad finita de espacio y tiempo y en un lenguaje formal bien definido para calcular una función. A partir de un estado inicial y una entrada inicial (quizás vacía), las instrucciones describen un cálculo que, cuando se ejecuta, avanza a través de un número finito de estados sucesivos bien definidos, produciendo finalmente una "salida" y terminando en un estado final final. La transición de un estado al siguiente no es necesariamente determinista; algunos algoritmos, conocidos como algoritmos aleatorios, incorporan entrada aleatoria.

Hay ciertos requisitos que un algoritmo debe cumplir:

  1. Definición: Cada paso del proceso se establece con precisión.
  2. Computabilidad efectiva: cada paso del proceso puede ser realizado por una computadora.
  3. Finitud: el programa eventualmente terminará exitosamente.

Algunos tipos comunes de algoritmos incluyen:

  • algoritmos de clasificación
  • algoritmos de búsqueda
  • algoritmos de compresión.

Las clases de algoritmos incluyen

  • Grafico
  • Programación dinámica
  • Clasificación
  • buscando
  • Instrumentos de cuerda
  • Matemáticas
  • Geometría Computacional
  • Mejoramiento
  • Diverso.

Aunque técnicamente no es una clase de algoritmos, las estructuras de datos a menudo se agrupan con ellos.

Eficiencia

Los algoritmos se juzgan más comúnmente por su eficiencia y la cantidad de recursos informáticos que requieren para completar su tarea.

Una forma común de evaluar un algoritmo es observar su complejidad temporal. Esto muestra cómo crece el tiempo de ejecución del algoritmo a medida que aumenta el tamaño de la entrada. Dado que los algoritmos de hoy tienen que operar con grandes entradas de datos, es esencial que nuestros algoritmos tengan un tiempo de ejecución razonablemente rápido.

Algoritmos de clasificación

Los algoritmos de clasificación vienen en varios sabores según sus necesidades. Algunas, muy comunes y muy utilizadas son:

Ordenación rápida

No hay discusión de clasificación que pueda terminar sin una clasificación rápida. Este es el concepto básico: Clasificación rápida

Mergesort

Un algoritmo de ordenación que se basa en el concepto de cómo se combinan las matrices ordenadas para dar una matrices ordenadas. Lea más sobre esto aquí: Mergesort

El plan de estudios de freeCodeCamp enfatiza mucho la creación de algoritmos. Esto se debe a que el aprendizaje de algoritmos es una buena forma de practicar las habilidades de programación. Los entrevistadores suelen probar a los candidatos en algoritmos durante las entrevistas de trabajo de los desarrolladores.

Libros sobre algoritmos en JavaScript:

Estructuras de datos en JavaScript

  • Libro gratuito que cubre las estructuras de datos en JavaScript
  • GitBook

Aprendizaje de estructuras de datos y algoritmos de JavaScript - Segunda edición

  • Cubre programación orientada a objetos, herencia de prototipos, algoritmos de clasificación y búsqueda, clasificación rápida, clasificación por fusión, árboles de búsqueda binaria y conceptos de algoritmos avanzados
  • Amazonas
  • ISBN-13: 978-1785285493

Estructuras de datos y algoritmos con JavaScript: traer enfoques informáticos clásicos a la Web

  • Cubre algoritmos de recursividad, clasificación y búsqueda, listas enlazadas y árboles de búsqueda binaria.
  • Amazonas
  • ISBN-13: 978-1449364939