Lo busqué en línea en muchos sitios, pero ninguno da una respuesta clara . Todos ellos dan una gran cantidad de cosas matemáticas complicadas que no solo son difíciles de comprender para mí, sino que también son irrelevantes, ya que simplemente quiero saber cuál es el límite superior (complejidad en el peor de los casos), el límite inferior y la complejidad de tiempo promedio del algoritmo de Euclides. Esto es lo que he recopilado de una gran cantidad de sitios, ninguno dice lo mismo:
Encontrar , con , y teniendo número de dígitos :
Algunos dicen que la complejidad del tiempo es
Algunos dicen que la complejidad del tiempo es (asumiendo )
Otros dicen que la complejidad del tiempo es
Uno incluso dice esto "Por el teorema de Lame encuentras un primer número de Fibonacci mayor que b. Si es hay menos de llamadas recursivas. Así es "
Todos dicen que el peor de los casos es cuando y son números de Fibonacci consecutivos.
Estaría muy agradecido si resuelve todo el asunto de manera concluyente dándome respuestas directas y claras a lo siguiente:
¿Cuál es la complejidad temporal del peor de los casos (límite superior) del algoritmo de Euclides?
¿Cuál es la complejidad de tiempo de caso promedio del algoritmo de Euclides?
¿Cuál es el límite inferior del Algoritmo de Euclides (mejor de los casos) y cuándo sucede?
No tienes idea de cuánto me ayudará tu respuesta. Estoy muy abatido porque estoy empantanado por lo que puede considerarse un algoritmo bastante simple. Gracias.
Para abordar algunos preliminares, dejemos Sea el número de pasos tomados en el algoritmo euclidiano, que evalúa repetidamente hasta , asumiendo . También, deja Sea el número de dígitos en (Da o toma). (Tenga en cuenta que en estos cálculos, al contar los pasos, ignoramos la cuestión de la complejidad temporal de la función. Si suponemos que es , entonces todo lo siguiente también se aplica a la complejidad temporal del algoritmo.
En el peor de los casos, como usted ha dicho, y , dónde es la sucesión de Fibonacci, ya que calculará hasta que llega a , entonces y . Desde , esto implica que . Tenga en cuenta que y implica para cualquier , por lo que el peor de los casos para el algoritmo de Euclides es .
El caso promedio requiere un poco más de cuidado, ya que depende de las probabilidades de la situación. Para calcularlo con precisión, necesitamos una distribución de probabilidad. Si es fijo y se elige uniformemente de , entonces el número de pasos es
o, para menor precisión, . (Fuente: Wikipedia)
En el mejor de los casos, o o sucede algún otro caso conveniente como ese, por lo que el algoritmo termina en un solo paso. De este modo, .
Si estamos trabajando en una computadora con cálculos de 32 bits o de 64 bits, como es común, entonces el individuo las operaciones son, de hecho, de tiempo constante, por lo que estos límites son correctos. Sin embargo, si estamos haciendo cálculos de precisión arbitraria, entonces para estimar la complejidad de tiempo real del algoritmo, necesitamos usar eso tiene complejidad de tiempo . En este caso, todo el "trabajo" se realiza en el primer paso, y el resto del cálculo también se realiza , entonces el total es . Sin embargo, quiero enfatizar que esto solo se aplica si el número es tan grande que necesita precisión arbitraria para calcularlo.
(Esto subraya la diferencia entre la notación O grande del matemático y la O grande del programador: en el primer caso, desea que el límite sea verdadero , incluso esos que son tan absurdamente grandes que nadie puede escribirlos o almacenarlos en la memoria, mientras que en el segundo caso, los programadores están interesados principalmente en , y esa es una estimación generosa. Para ellos, es más importante ver la "contribución principal" a la complejidad del tiempo, y para el algoritmo euclidiano, el número más pequeño impulsa la dificultad del cálculo en general).
el tiempo de ejecución es lineal en la representación de números más grandes: si entonces el tiempo de ejecución es
hans giebenrath
mike hiedra
joriki
hans giebenrath
mike hiedra
JStrahl
apnorton
vonbrand