¿Qué son los paradigmas algorítmicos?

8

En general, hablamos de paradigmas de programación como funcionales, de procedimiento, orientados a objetos, imperativos, etc., pero ¿qué debo responder cuando me preguntan los paradigmas de los algoritmos?

Por ejemplo, ¿Problema de vendedor ambulante, Algoritmo de ruta más corta de Dijkstra, Algoritmo Euclid GCD, Búsqueda binaria, Árbol de expansión mínima de Kruskal, paradigmas algorítmicos de la Torre de Hanoi? ¿O tal vez los paradigmas son las estructuras de datos que usaría para diseñar estos algoritmos?

Vaibhav Agarwal
fuente

Respuestas:

9

Los paradigmas algorítmicos son :

Enfoques generales para la construcción de soluciones eficientes a los problemas.

Cualquier enfoque básico y de uso común en el diseño de algoritmos podría considerarse un paradigma algorítmico :

Divide y conquistaras

Idea: Divida la instancia del problema en sub-instancias más pequeñas del mismo problema, resuélvalas de forma recursiva y luego junte las soluciones para una solución de la instancia dada.

Ejemplos: Mergesort, Quicksort, algoritmo de Strassen, FFT.

Algoritmos codiciosos

Idea: Encuentre la solución haciendo siempre la elección que se vea óptima en este momento: no mire hacia adelante, nunca retroceda.

Ejemplos: algoritmo de Prim, algoritmo de Kruskal.

Programación dinámica

Idea: dar vuelta la recursión al revés.

Ejemplo: algoritmo Floyd-Warshall para el problema de la ruta más corta de todos los pares.

La palabra paradigma se traduce como ejemplo, pero no es así como se usa en un contexto científico . Sus ejemplos son todos ejemplos de algoritmos (excepto el problema del vendedor ambulante, que es un problema NP-difícil), ninguno de los cuales es lo suficientemente trivial como para considerarse un paradigma algorítmico.

Yannis
fuente
Nunca he visto a alguien definir DP de una manera tan simple. Gracias.
MT.
2

Paradigmas algorítmicos de diseño común:

  • Divide y vencerás : divide de forma recurrente un problema en dos o más subproblemas del mismo tipo (o relacionados).
  • Programación dinámica : descomponiéndola en una colección de subproblemas más simples. Ejemplo: rompecabezas de la Torre de Hanoi
  • Algoritmo codicioso : la heurística de resolución de problemas de hacer la elección óptima local en cada etapa. Ejemplo: problema de vendedor ambulante
  • Backtracking : es un algoritmo general para encontrar todas (o algunas) soluciones a algunos problemas computacionales. Ejemplo: Sudoku resuelto por backtracking.
  • Fuerza bruta : una técnica de resolución de problemas muy general que consiste en enumerar sistemáticamente a todos los posibles candidatos para la solución y verificar si cada candidato satisface la declaración del problema.

Puedes encontrar varios ejemplos en geeksforgeeks

Premraj
fuente