Algunos algoritmos complicados ( union-find ) tienen la función inversa de Ackermann casi constante que aparece en la complejidad de tiempo asintótica, y son óptimos en el peor de los casos si se ignora el término de Ackermann inverso casi constante.
¿Hay ejemplos de algoritmos conocidos con tiempos de ejecución que involucren funciones que crecen fundamentalmente más lento que el inverso de Ackermann (por ejemplo, inversos de funciones que no son equivalentes a Ackermann bajo transformaciones polinómicas o exponenciales, etc.), que dan el mejor momento conocido en el peor de los casos? complejidad para resolver el problema subyacente?
reference-request
algorithm-analysis
time-complexity
runtime-analysis
usuario2566092
fuente
fuente
Respuestas:
Seth Pettie ideó un algoritmo para calcular el sensibilidad de un árbol de expansión mínimo en el tiempo , mejorando un algoritmo de Tarjan que calcula lo mismo en el tiempo O ( m α ( m , n ) ) . (Compare esto con el algoritmo O ( m α ( m , n ) ) de Chazelle para calcular el árbol de expansión mínimoO ( m logα ( m , n ) ) O ( m α ( m , n ) ) O ( m α ( m , n ) ) en sí.) El problema de sensibilidad requiere calcular, para un gráfico dado y un árbol de expansión mínimo dado, cuánto puede cambiar el peso de cada borde sin cambiar el árbol de expansión mínimo.
(Gracias a Tsvi Kopelowitz por esta referencia).
fuente
fuente
Cuando Alan Turing descubrió la computadora, solía haber varios modelos para la computadora propuesta. Turing demostró que algunos (3) de estos modelos podían simularse entre sí Y calcular la función de Ackermann, mientras que los otros modelos podían simularse entre sí, pero no la función de Ackermann (por lo que no podían simular el 3). Por lo tanto, estos 3 modelos (Turing Machine, von Neumann y uno que no conozco), fueron elegidos como la arquitectura para una computadora. Esto no significa que la función de Ackermann sea el límite de la computadora, pero supongo que es una ciencia difícil. No conozco ninguna función computable que crezca más rápido que la función de Ackermann.
Ahora, no creo que haya un problema práctico que coincida con su pregunta, pero quizás podamos construir uno. Sin embargo, necesitamos poner restricciones en la entrada. Como no podemos usar O (n), no podemos verificar toda la entrada. De hecho, ni siquiera podemos verificar la longitud de la entrada, ya que sería O (log n). Por lo tanto, necesitamos como primer parámetro una representación de la longitud del resto de la entrada, por ejemplo c tal que Ackermann (c) sea la longitud de la entrada. Como esto tampoco es adecuado, exigimos como primer valor en nuestra entrada el parámetro c, de modo que bb (c) sea aproximadamente la longitud de la entrada, donde bb es la función de castor ocupado. Esta función es incuestionable pero bb (c) ciertamente existe. Entonces, el algoritmo es como:
El propósito del algoritmo es verificar que si c es el inverso de bb, si la longitud de entrada es mayor que bb (c).
Si hay una función computable que crece más rápido que la función de Ackermann, creo que podemos usar su inversa para crear un algoritmo que responda a su pregunta en cualquier entrada.
fuente