Herleitung explizite Formel und Rekursionsformel

S

SomeProb

Gast
Hallo,

ich habe auf meinen Üblatt folgenden Programmtext gegeben:

Java:
// Rueckgabewert true = Duplikat-frei
boolean checkDups(a) {
if (a enthaelt nur ein Element) {
return true;
}
aLeft = linke Haelfte von a;
aRight = rechte Haelfte von a;
if (!checkDups(aLeft) || !checkDups(aRight)) {
return false;
}
for (x in aLeft) {
for (y in aRight) {
if (x == y) {
return false;
}
}
}
return true;
}

Für die Rekursionsformel habe ich mir gedacht:
T(n)=2*T(n/2)+O(n)

Das Array wird ja in zwei Hälften geteilt, daher 2*T(n/2). Die For-Schleifen müssen durchlaufen werden, was n^2 ergibt. In O-Notation als O(n).

Für die explizite Formel hätte ich dann weiter abgeschätzt:
T(n)<=2*T(n/2)+O(n)<=...<=O...
Aber irgendwie beschleicht mich das Gefühl, dass meine Rekursionsformel falsch ist, weswegen ich die explizite Formel noch nicht abgleitet habe und hier um Hilfe such.
 

Fant

Bekanntes Mitglied
n^2 ist nicht in O(n)

Aber was willst du denn nun überhaupt machen? Wieso interessiert dich die Laufzeit, wenn du eine iterative Lösung zu deinem Problem suchst?
 
S

SomeProb

Gast
Ich möchte eine Rekursionsformel für die Laufzeit des Algorithmus angeben in Abhängigkeit von der Länge n des Arrays.
 
S

SomeProb

Gast
n^2 ist in O(n^2), nehme ich an?

Die angegebene Rekursionsformel bezieht sich dann auf den Fall, dass n>1 ist. Wenn das Array nur aus einem Element besteht, dann gilt O(1).

Für die explizite Formel:
T(n)<=2*T(n/2)+O(n^2)<=4*T(n/4)+3O(n^2)<=8T(n/16)+7O(n^2)<=...<=2^i*T(n/2*2^i)+2^i-1*O(n^2)
Problem: Bisher wurde immer angenommen, dass n=2^k gilt. Das kann man ja nun für das Array nicht annehmen.
 

Fant

Bekanntes Mitglied
Natürlich ist n^2 (unter anderem) in O(n^2). Ist dir die Notation überhaupt klar?

Zunächst den Fall, dass n sich als 2^k für geeignetes k schreiben lässt, ist genau das, as du auch hier machen solltest. Wenn du sagst, dass man das hier ja nicht einfach so darf, dann hast du bei euren vorherigen Beispielen vermutlich auch nicht verstanden, wieso man das dort gemacht hat? Dann würd ich dir raten, dir das an einem schon fertig gerechneten Beispiel noch mal wirklich klar zu machen.

Und: Du schreibst nicht das auf, was du vermutlich meinst. Klammern wirken Wunder!
 
S

SomeProb

Gast
Also bei der Herleitung der expliziten Formel habe ich einen Fehler gemacht:
T(n)=2*T(n/2)+O(n^2)
<=2*(T(n/4)+O(n^2))+O(n^2)
<=4*T(n/4)+3O(n^2)
<=8*T(n/4)+7O(n^2)
...
<=2^iT(n/2^i)+2^i-1*O(n^2)

Die O-Notation habe ich vom Prinzip schon verstanden.

Warum man diese vereinfachende Annahme macht, ist mir allerdings nicht ganz klar. Wenn n nicht durch 2 teilbar wäre (also n!=2^k), dann würden ungerade Zahlen herauskommen, wenn man durch 2 teilt.
 
S

SomeProb

Gast
Ich mache jetzt einfach mal weiter:

<=2^iT(n/2^i)+2^i-1*O(n^2)
<=n*T(1)+n*O(n^2)
<=n*O(n)+n*O(n^2)
<=O(n)+O(n^2)

Ist es evtl. der schlechteste Fall, wenn n=2^i ist. Bzw. wenn man diese Annahme nicht trifft, dann wäre die Laufzeit geringer. Also schätzt man mit n=2^i einfach die Laufzeit nach unten ab?
 

Sesostris

Aktives Mitglied
Du hast nicht wirklich das gemacht, was du im Titel des Threads angegeben hast: eine explizite bzw. rekursive Formel für deinen Pseudocode sieht anders aus. Für die rekursive Formel bekomme ich T(n) = 2*T(n/2)+n^2/4 mit T(1)=1 und für die explizite T(n) = n*(n+1)/2, sofern ich mich nicht in der Eile verschaut habe. Aus der letzteren ist dann ersichtlich, dass die Problemstellung nicht nur in O(n^2), sondern auch in Theta(n^2) liegt. Was sich übrigens auch mittels Master Theorem aus der rekursiven Formel schließen lässt.
(Alle Angaben beziehen sich auf die Anzahl der Vergleiche im Worst Case, d. h. a ist duplikatfrei.)
 
S

SomeProb

Gast
Na ja, so ist die Aufgabenstellung:
Geben Sie eine Rekursionsformel für die Laufzeit des Algorithmus in Abhängigkeit von der
Länge n des Arrays an und leiten Sie daraus die explizite Formel in O-Notation her.

Also meine Rekursionsformel lautete T(n)=2*T(n/2)+O(n^2). n^2/4 ist doch in O(n^2), da Faktoren weggelassen werden. Aber wie kommst du auf n^2/4. n^2 ist mir noch klar, da es eine verschachtelte for-Schleife gibt. Aber warum teilst du das durch 4?

Warum bin ich jetzt von der Aufgabenstellung abgewichen? Meine Rekursionsformel sieht doch gar nicht so anders aus als deine.
 
S

SomeProb

Gast
Es gilt ja T(n)=2*T(n/2)+n^2/4, falls n>1 ist.
T(n)=2*T(n/2)+n^2/4
<=4*T(n/4)+3/8*n^2
<=8*T(n/8)+7/16*n^2
=16*T(n/16)+15/32*n^2
<=...
<=2^i*T(n/2^i)+(2^i-1)/(2*2^i)*n^2

Mit k-maliger Anwendung der Rekursionsformel und n=2^k folgt:
n+(n-1)/2*n
Summanden niedriger Ordnung werden weggelassen:

(n-1)/2*n.

Stimmt es nun?
 

Sesostris

Aktives Mitglied
Mit k-maliger Anwendung der Rekursionsformel und n=2^k folgt:
n+(n-1)/2*n
Das stimmt nun, ja, und deckt sich auch mit der Formel, die ich weiter oben gepostet habe.

Aber was ist demzufolge dein Ergebnis? "(n-1)/2*n"? Das liegt in welchem O und warum?
Du musst auf n+(n-1)/2*n eigentlich nur noch die Definition von O anwenden und bist fertig.
 
S

SomeProb

Gast
Naja, ich habe es noch ausmultipliziert:
n+(n-1)/2*n=n+n^2/2-n/2. Summanden niedriger Ordnung werden weggelassen-->Damit liegt die explizite Formel in O(n^2).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Datentypen Explizite Konvertierung Java Basics - Anfänger-Themen 12
C Explizite und implizite Datentypen Java Basics - Anfänger-Themen 12
Antoras Explizite Typenumwandlung in einem Befehl Java Basics - Anfänger-Themen 3
moini Formel zur Abgleichung von Positionskoordinaten? Java Basics - Anfänger-Themen 8
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
L mit Fakultät mathematische Formel berechnen Java Basics - Anfänger-Themen 5
R Umsetzung von Formel Java Basics - Anfänger-Themen 2
C Boolesche Formel, Belegungen bestimmen Java Basics - Anfänger-Themen 8
V Wachstum berechnen und in Ist-Formel verwenden Java Basics - Anfänger-Themen 5
P Input/Output PQ-Formel wird nicht richtig berechnet Java Basics - Anfänger-Themen 6
D Klassen PQ- Formel Java Basics - Anfänger-Themen 4
Hanschyo Formel für n-Eck Java Basics - Anfänger-Themen 3
Shizmo Methoden Formel besser implementieren Java Basics - Anfänger-Themen 8
B Formel in Java implementieren Java Basics - Anfänger-Themen 4
B Wie sieht die Formel für eine Rechtecksschwingung aus? Java Basics - Anfänger-Themen 5
L Formel Kunden Pro Stunde Java Basics - Anfänger-Themen 5
B PQ Formel, wo steckt der Fehler? Java Basics - Anfänger-Themen 2
C Herleiten der expliziten Formel aus der Rekursionsformel Java Basics - Anfänger-Themen 3
P pixel formel versetztes Schachbrettmuster Java Basics - Anfänger-Themen 2
D Wochentag für eingegebenes Datum bestimmen anhand von Formel Java Basics - Anfänger-Themen 2
S Klassen Formel zur Berechnung .... Bitte um Hilfe Java Basics - Anfänger-Themen 7
R jCombox Werte in Formel übernehmen Java Basics - Anfänger-Themen 4
OnDemand Gaußsche Formel mit FOR-Schleife Java Basics - Anfänger-Themen 4
J Eingabe als Formel deuten Java Basics - Anfänger-Themen 7
E BigDecimal PQ Formel Java Basics - Anfänger-Themen 16
V p-q Formel Java Basics - Anfänger-Themen 5
A Formel Problem Java Basics - Anfänger-Themen 12
R POI HSSF liesst in Excel Formel statt Ergebnis Java Basics - Anfänger-Themen 4
C Intelligentes Erstellen von Formel mit unbekannter Variable Java Basics - Anfänger-Themen 37
D p q formel gibt zum Teil falsche Werte aus Java Basics - Anfänger-Themen 5
S Datentypen Operatoren und Ausdrücke (formel richtig rechnen) Java Basics - Anfänger-Themen 8
S Formel zur invertierung einer Zahl Java Basics - Anfänger-Themen 8
D Formel von Binet Java Basics - Anfänger-Themen 6
B Formel aus Datei einlesen und benutzen Java Basics - Anfänger-Themen 3
G Formel ändern Java Basics - Anfänger-Themen 2
A Formel 1 Statistik Programm Java Basics - Anfänger-Themen 2
C simples Formel programm Java Basics - Anfänger-Themen 5
G jxl formel wird nicht erkannt. Java Basics - Anfänger-Themen 2
D Problem bei einer Formel (Bin Java Neuling) Java Basics - Anfänger-Themen 3
Q Formel für Wahrscheinlichkeit in Java Java Basics - Anfänger-Themen 2
7 Formel für Apfelschiessen funktioniert nicht richtig Java Basics - Anfänger-Themen 7
B Formel in der for-schleife Java Basics - Anfänger-Themen 5
M Funktion/Formel in String Java Basics - Anfänger-Themen 5
D Formel zum umrechnen in java o_O Java Basics - Anfänger-Themen 9
F pq Formel Java Basics - Anfänger-Themen 7
B Formel in Textfeld ausrechnen Java Basics - Anfänger-Themen 5
A Formel "transportieren" Java Basics - Anfänger-Themen 4
O mathematische Formel in quellcode Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben