¿Cuál es el algoritmo más complejo en CS?

Dependiendo de lo que haya entendido por complejidad, hay algunas maneras de tomar esto.

Si estás hablando de ridículamente difícil de seguir o imposiblemente grande, entonces no hay una buena respuesta. (Sospecho que cualquier gran empresa que escriba su propio software puede darle un buen candidato, jajaja).

Si está hablando de la complejidad del tiempo, cualquier bucle infinito durará tanto como sea físicamente posible. (Θ (∞))

while(true) do {};

Si está hablando de la complejidad del tiempo (además de bucles infinitos), la respuesta es cualquier algoritmo con un tiempo de ejecución de Θ (n!). Esto significa que el algoritmo en cuestión tomaría más de 77 años en completarse, cuando n es tan bajo como solo 20, si cada operación tomara 1 nanosegundo. Un ejemplo de un algoritmo con esta complejidad de tiempo es uno que calcula todas las permutaciones de una lista. Dado que la cantidad de permutaciones de una lista es n !, no hay mejor manera de escribir este algoritmo.

No puedo decirte cuál es el algoritmo más complejo en CS, ya que no conozco la mayoría de los algoritmos en el mundo de la informática, y la mayoría de las empresas guardarían sus algoritmos para que nadie pueda copiarlos. Sin embargo, definitivamente puedo enumerar algunos algoritmos populares o problemas famosos que deben usar algoritmos complejos para resolverlos.

Algoritmo de rango de página de Google:

El PageRank de Google es una de las muchas razones por las que Google ha tenido un gran éxito para su motor de búsqueda. Básicamente analiza todos y cada uno de los sitios web en Internet y encuentra cuántas veces un sitio web tiene un enlace que lo conduce. Los sitios web con más enlaces ganan más credibilidad, y es más probable que aparezcan primero como resultado de la consulta de búsqueda (tenga en cuenta que esta es solo la base del algoritmo y hay mucho más). Para entender esto mejor, piense en un equipo de fútbol / hockey / baloncesto. Los jugadores estrella pasarán a jugadores más que peores, al igual que los jugadores como Lionel Messi y Lebron James obtienen la mayor cantidad de toques. Por lo tanto, si una persona contara la cantidad de veces que se le pasa a cada jugador en un juego determinado, lo más probable es que pueda diferenciar a los mejores jugadores de los peores.

El problema del vendedor ambulante:

Este es un problema informático muy famoso que se puede resolver utilizando algoritmos complejos, pero eficientes. El problema es este:

Un vendedor quiere visitar cada una de las (x) cantidades de ciudades en su lista. ¿Cómo debe determinar el vendedor el camino más corto entre todas estas ciudades para poder visitar todas las ciudades en el menor tiempo posible?

Debemos usar un algoritmo para resolver esto ya que (x) podría ser un número muy grande y queremos resolver esto de la manera más eficiente posible.

El problema del matrimonio estable:

El problema del matrimonio estable es otro problema como el problema del vendedor ambulante, pero utiliza un algoritmo de correspondencia para resolverlo.

Si hay (x) hombres y (x) mujeres, cada uno con sus propias preferencias sobre la persona del sexo opuesto con el que les gustaría emparejarse, ¿cómo combinaríamos a cada uno con otro para asegurar que no haya dos personas? prefieren ser emparejados entre sí que su pareja actual

Estos son solo tres pequeños ejemplos de los muchos algoritmos que existen para los programas. Si está interesado en más, simplemente búsquelos y encontrará muchos. Especialmente tenga en cuenta los algoritmos como los algoritmos de clasificación y los algoritmos para juegos (como el ajedrez) que pueden ser muy complicados pero pueden ser eficientes para resolver tareas de programas.