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

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Rekursionsgleichung aufstellen » 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 Rekursionsgleichung aufstellen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
deppensido
Doppel-As


Dabei seit: 23.12.2012
Beiträge: 144

Rekursionsgleichung aufstellen 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,

für folgenden Algorithmus muss ich die Rekursionsgleichung aufstellen um die Laufzeit zu bestimmen.

der Algorithmus:

static void DreiSort(int[] A, int i, int j)
{
if (j - i <= 2)
{
if (A[i] > A[i + 1])
{
int temp = A[i + 1];
A[i + 1] = A[i];
A[i] = temp;
}
return;
}
DreiSort(A, i, j - (j - i) / 3); //ersten 2 drittel des Arrays
DreiSort(A, i + (j - i) / 3, j); //letzten 2 drittel des Arrays
DreiSort(A, i, j - (j - i) / 3); // die ersten 2 drittel des Arrays
}

Intuitiv denke ich, die Rekursionsgleichung ist:

T(n) = 3 * T(n/3), denn 3 Sort wird pro Auruf 3 mal aufgerufen und die Größe der Teilprobleme ist n/3, wobei n die Länge des Arrays ist.
Stimmt das so? Vielen Dank schon mal.

Grüße
29.04.2013 21:25 deppensido ist offline Beiträge von deppensido suchen Nehmen Sie deppensido in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

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,

das sollte so passen.

VG,

Karlito
29.04.2013 22:51 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
deppensido
Doppel-As


Dabei seit: 23.12.2012
Beiträge: 144

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,

da muss noch irgendwo ein Haken sein. Denn ich habe gerade mittels Mastertheorem (1.Fall) und ausprobieren Laufzeit O(n) rausbekommen.

Aber O(n) kann ja nicht stimmen, da ein Sortieralgorithmus mindestens Zeit: O(n * log(n)) braucht. Wenn ich die Rekursionsfunktion leicht abänder:

T(n) = 3 * T(n/3) + n, würde mit Mastertheorem (2.Fall) Laufzeit:

O(n * log(n)) rauskommen. Aber ich kann mir dabei nicht erklären wo das

+ n herkommt. Im Anhang, habe ich mal das Mastertheorem eingefügt. Vielen Dank schon mal.

Grüße

deppensido hat dieses Bild (verkleinerte Version) angehängt:
mastertheorem.jpg

29.04.2013 23:13 deppensido ist offline Beiträge von deppensido suchen Nehmen Sie deppensido in Ihre Freundesliste auf
deppensido
Doppel-As


Dabei seit: 23.12.2012
Beiträge: 144

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

ich denke ich habs jetzt. Die Größe der Teilprobleme ist ja (2/3)*n und nicht n/3, womit man T(n) = 3 * T((2/3)*n) + c erhält, für eine Konstante c, somit gilt T(n) = O(n^(log_2/3(3))) = O(n^2,71).

Grüße
30.04.2013 00:20 deppensido ist offline Beiträge von deppensido suchen Nehmen Sie deppensido in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Rekursionsgleichung aufstellen