Hay una gran variedad de algoritmos, clasificados según los conceptos que utilizan para realizar una tarea. Estas son las principales categorías. Los algoritmos “divide y vencerás” permiten dividir un problema en varios subproblemas del mismo tipo. Estos problemas más pequeños se resuelven y sus soluciones se combinan para resolver el problema original. Los algoritmos de fuerza bruta consisten en probar todas las soluciones posibles hasta encontrar la mejor. Un algoritmo aleatorio utiliza un número aleatorio al menos una vez durante el cálculo para encontrar la solución del problema. Un algoritmo voraz encuentra la solución óptima localmente, con el objetivo de encontrar una solución óptima para el problema global. Un algoritmo recursivo resuelve la versión más simple de un problema y luego resuelve versiones cada vez más grandes hasta encontrar la solución del problema original. Un algoritmo de vuelta atrás divide el problema en subproblemas que se pueden intentar resolver uno tras otro. Si no se encuentra la solución, basta con retroceder en el problema hasta encontrar la manera de seguir avanzando. Por último, un algoritmo de programación dinámica permite descomponer un problema complejo en un conjunto de subproblemas más sencillos. Todos estos subproblemas se resuelven una vez, y su solución se almacena para su uso futuro. Esto evita tener que volver a calcular sus soluciones.