Los algoritmos de clase de divide y vencerás ( origen: latín ‘divide et impera’ usado en el contexto de guerras imperiales y estrategia de batalla en la historia ) son fáciles e intuitivos de entender. La búsqueda binaria, el tipo de fusión y otros algoritmos similares entran en esta categoría.
Lo notable de esta técnica es que introduce un factor logarítmico en la complejidad de los algoritmos en lugar de un factor lineal, cuadrático o polinómico.
Tenga en cuenta que un algoritmo como la ordenación por inserción tarda un tiempo asintótico n ^ 2, mientras que la ordenación por fusión tarda n lg n tiempo. Si se da una entrada de tamaño 1000 (= n) a ambos, el peor de los casos para ejecutar ambos algoritmos es aproximadamente 1000000 constante instrucciones de tiempo y 10000 instrucciones de tiempo constante respectivamente. Esto puede no parecer mucho, pero a medida que n se acerca al infinito, hay una diferencia exponencial entre ellas. Esto lo convierte en una técnica muy importante en la resolución de problemas y una variedad de problemas aparentemente no relacionados se pueden resolver en menos tiempo cuadrático . (localizar la mediana de una matriz, buscar un elemento, encontrar picos para nombrar algunos)
- ¿Qué tipo de trabajo haría un cosmólogo en el CERN?
- ¿Cuál es la forma más eficiente de detectar, si una cadena es un anagrama de un palíndromo?
- ¿Cuáles son los libros de Ciencias de la Computación (Algoritmo) que recomendará un topcoder?
- ¿Cómo creo más interés en la programación y soy un buen programador en algoritmos?
- Cómo encontrar subrangos no decrecientes y no crecientes en una matriz
Como una función lineal es una función exponencial, también lo es una función logarítmica con una función lineal. (Analogía de crecimiento)
f (exp (n)): f (n):: f (n): f (log (n))
Por lo tanto, el enfoque de dividir y conquistar hace que la computación sea más eficiente. Además, la técnica se puede utilizar fácilmente para modelar muchos problemas. Desde algoritmos híbridos y codiciosos utilizados para optimizar una función, computando una rápida transformación de Fourier a algoritmos como la multiplicación de karatsuba; todos usan este paradigma. Muchos algoritmos eficientes en la historia han usado este enfoque.
Dividir y conquistar es muy simple y efectivo al mismo tiempo, no es muy fácil implementarlo, ya que se necesita mucha práctica para modelar correctamente el problema y hay que saberlo al revés para aplicarlo.