Mam pytanie dotyczące algorytmu Euklidesa w celu znalezienia największych wspólnych dzielników.Algorytm złożoności czasu Euclida
gcd (p, q) gdzie p> q i q to n-bitowa liczba całkowita.
Staram się śledzić czas analizy złożoności algorytmu (wejście jest N-bitów jak wyżej)
gcd(p,q)
if (p == q)
return q
if (p < q)
gcd(q,p)
while (q != 0)
temp = p % q
p = q
q = temp
return p
już zrozumieć, że suma dwóch liczb, u + v
gdzie u
i v
stand dla wartości początkowych p
i q
zmniejsza się co najmniej o współczynnik co najmniej 1/2
.
Teraz pozwól m
być liczbą iteracji dla tego algorytmu. Chcemy znaleźć najmniejszą liczbę całkowitą m
taką, że (1/2)^m(u + v) <= 1
Oto moje pytanie. Otrzymuję, że suma dwóch liczb w każdej iteracji jest górna - ograniczona przez (1/2)^m(p + q)
. Ale tak naprawdę nie widzę powodu, dla którego osiągnięto maks. m
, gdy ta liczba to <= 1
.
Odpowiedź brzmi: O (n) dla n-bitów q
, ale tutaj utknęłam.
Proszę o pomoc!
To nie prawda, że 'p + q' jest pół na pół . Rozważmy "p = 199" i "q = 100". – Henry
Wprowadziłem kilka zmian. – namesake22
To jest O (Log (min a, b)) – LmTinyToon