Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Laufzeit T(n) bei rekursiven Prozeduren » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Laufzeit T(n) bei rekursiven Prozeduren
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
ubik
Mitglied


Dabei seit: 10.04.2015
Beiträge: 41

Laufzeit T(n) bei rekursiven Prozeduren Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Hallo,

die Aufgabe lautet:

Geben Sie an, welche Laufzeitkomplexität die folgende Prozedur p in Abhängigkeit von n hat. Begründen Sie Ihre Antwort.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure p(n : integer) : integer;
  begin
    if n < 1 then return 1
             else return q(n div 4)
    end if
  end

procedure q(n : integer) : integer;
  begin
    if n < 1 then return 1
             else return p(n * 3)
    end if
  end


Meine Ideen:
Ich habe mir folgendes gedacht:

code:
1:
2:
3:
4:
5:
T1(n) = { 1, falls n = 1
        { T2(n/4), sonst

T2(n) = { 1, falls n < 1
        { T1(n*3), sonst


Kann man das irgendwie noch weiter zusammenfassen?

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ubik: 10.04.2015 17:00.

10.04.2015 16:58 ubik ist offline E-Mail an ubik senden Beiträge von ubik suchen Nehmen Sie ubik in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Mal eine Überlegung:
bei einem Durchlauf (Abarbeitung von p und q) wird n mit 3/4 multipliziert (so in etwa, kann auch weniger sein, wegen div).
Wenn wir mit mehreren Durchläufen auf 1 kommen willen, haben wir also:
[latex]n \cdot \left(\frac{3}{4}\right)^\text{Durchläufe}=1[/latex]
Wenn du das nach der Zahl der Durchläufe umstellst, wirst du zu einer logarithmischen Laufzeit kommen.

__________________
Syntax Highlighting fürs Board (Link)
10.04.2015 19:45 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
ubik
Mitglied


Dabei seit: 10.04.2015
Beiträge: 41

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ahh!

Vielen Dank.
10.04.2015 19:53 ubik ist offline E-Mail an ubik senden Beiträge von ubik suchen Nehmen Sie ubik in Ihre Freundesliste auf
ubik
Mitglied


Dabei seit: 10.04.2015
Beiträge: 41

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Eine Frage hätte ich noch.

Wie schreibt man denn n * (3/4)^Durchläufe = 1 als Logarithmus?
12.04.2015 08:54 ubik ist offline E-Mail an ubik senden Beiträge von ubik suchen Nehmen Sie ubik in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

[latex]n \cdot \left(\frac{3}{4}\right)^d=1[/latex]
[latex]\left(\frac{3}{4}\right)^d=\frac{1}{n}[/latex]
[latex]\ln\left(\left(\frac{3}{4}\right)^d\right)=\ln\left(\frac{1}{n}\right)[/latex]
[latex]d \cdot \ln\left(\frac{3}{4}\right)^d=\ln\left(\frac{1}{n}\right)[/latex]
[latex]d=\frac{\ln\left(\frac{1}{n}\right)}{\ln\left(\frac{3}{4}\right)}[/latex]
[latex]d=\frac{\ln\left(n\right)}{\ln\left(\frac{4}{3}\right)}[/latex]
tatsächlich wird die Zahl der Durchläufe darunter liegen (weil div den Kommateil ignoriert). Das ist eine Obergrenze.

__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 12.04.2015 09:51.

12.04.2015 09:50 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
ubik
Mitglied


Dabei seit: 10.04.2015
Beiträge: 41

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

muss das nicht

d = ln(1/n) / ln(4/3)

d = -ln(n) / ln(4/3)

heißen?

Da ja ln (1/n) = - ln(n) ist?

Dann kann ich mir irgendwie nicht vorstellen, wie die Anzahl der Durchläufe negativ sein kann

Edit: Ah ne, alles klar, das Minus wird zu Plus, wenn ich ln(4/3) benutze.

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von ubik: 12.04.2015 17:36.

12.04.2015 17:31 ubik ist offline E-Mail an ubik senden Beiträge von ubik suchen Nehmen Sie ubik in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Laufzeit T(n) bei rekursiven Prozeduren