Theoretische Informatik?
Hallo leute,
weiĂ jemand wie man das darstellt?
Man muss die Laufzeit in 0-Notation bestimmen von dem Algorithmus ggT (gröĂten gemeinsamen Teilers). Also Schritt fĂŒr Schritt z.B:
0(1)
0(1) => T(0) = 0(1)
......
wÀre super wenn das jemand könnte. :)
Lg
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).
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.
Ok danke. Also ist die Laufzeit jetzt O(x+y) . Ich habe auch woanders gesehen das die Laufzeit O(n^2) ?
Was ist n? Vielleicht handelt es sich um eine andere Implementierung. Ich sehe jedenfalls keinen Fehler in meinen Ăberlegungen.
So nebenbei: đ(n)âđ(nÂČ).
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.
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).
Um das zu machen brÀuchte man wohl den Algorithmus.
Kommt ja logischerweise auf die Implementation an.
Danke! Das Problem ist ich weiĂ nicht ganz wie ^^