Theoretische Informatik?

2 Antworten

Meine Vermutung: Der Algorithmus terminiert spĂ€testens nach max(x,y) Schritten, und jeder Schritt ist in 𝓞(1). Damit lĂ€ge er in 𝓞(x+y).

FĂŒr ggT(1,y) wird diese Grenze offensichtlich erreicht. Du musst nur noch zeigen, dass der Algorithmus

  • fĂŒr ggT(x,y) mit 1<x<y nie lĂ€nger braucht als fĂŒr ggT(1,y).
  • fĂŒr ggT(y,x) nie lĂ€nger braucht als fĂŒr ggT(x,y).
Ralfseg 
Fragesteller
 19.01.2021, 13:58

Danke! Das Problem ist ich weiß nicht ganz wie ^^

0
ralphdieter  19.01.2021, 14:15
@Ralfseg

Durch Induktion: Bei jedem rekursiven Aufruf wird max(x,y) um mindestens 1 kleiner.

Im Fall if (x<y) then ...“:

x<y (Voraussetzung) ∧ y–x<y (wegen x>0) ⇒ max(x,y–x) < y

FĂŒr x>y geht's analog.

0
Ralfseg 
Fragesteller
 19.01.2021, 14:20
@ralphdieter

Ok danke. Also ist die Laufzeit jetzt O(x+y) . Ich habe auch woanders gesehen das die Laufzeit O(n^2) ?

0
ralphdieter  19.01.2021, 14:26
@Ralfseg

Was ist n? Vielleicht handelt es sich um eine andere Implementierung. Ich sehe jedenfalls keinen Fehler in meinen Überlegungen.

So nebenbei: 𝓞(n)⊂𝓞(nÂČ).

0
Ralfseg 
Fragesteller
 19.01.2021, 14:40
@ralphdieter

Ok danke. Ist dies auch möglich bzw. es ist ja das was Sie eigentlich geschrieben haben . Oder? ^^

Die Anzahl der Iterationen (d.h. Anzahl der Rekursionsaufrufe plus 1) ist höchstens x + y − 1 und damit ist die Laufzeit O(x + y).  Die Summen z = x + y (wobei x, y ≄ 1 sind) werden stufenweise immer kleiner und sind natĂŒrliche Zahlen.

z = x +y =⇒ z â€Č = (x −y) +y = x < z √z â€Č = x + (y −x) = y < z und z, z â€Č ∈ N.

Bei x = y ≄ 1 haben wir keinen weiteren Rekursionsaufruf und der kleinste Summenwert ist 2. Daraus folgt, dass im Worst Case die Anzahl der Iterationen (d.h. Anzahl der Rekursionsaufrufe plus 1) höchstens x + y − 1 ist.

1
ralphdieter  19.01.2021, 15:03
@Ralfseg

Passt soweit, bis auf:

Bei x = y ≄ 1 haben wir keinen weiteren Rekursionsaufruf und der kleinste Summenwert ist 2. Daraus folgt,

gar nichts, denn x=y=1 ist nur ein Einzelfall. FĂŒr eine wirksame Untergrenze brauchst Du beliebig große x und y.

Mach es lieber etwas formaler mit vollstÀndiger Induktion:

  • Behauptung: ... (höchstens x+y−1 Rekursionen)
  • Induktionsanfang: ... (stimmt fĂŒr x+y=2)
  • Induktionsschritt: ... (stimmt fĂŒr alle x+y≀n ⇒ stimmt fĂŒr x'+y'=n+1)

Perfekt wird's, wenn Du noch die Worst-Cases (1,y) und (x,1) angibst und so zeigst, dass die AbschĂ€tzung 𝓞(x+y) nicht mehr verbessert werden kann (weil Du da wirklich y bzw. x Rekursionsschritte brauchst).

0

Um das zu machen brÀuchte man wohl den Algorithmus.

Kommt ja logischerweise auf die Implementation an.

Ralfseg 
Fragesteller
 19.01.2021, 12:24

Stimmt habe soeben die Frage bearbeitet . :)

0