Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

121

23.01.2008, 10:39

Nein, er produziert keine Endlosschleifen. Und eine Zeitbeschraenkung gibt es doch nicht? f'`8k


Gruß, TGGC (making great games since 1992)

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

122

23.01.2008, 11:13

Entenwickler:
Wie hast du das nun getestet?
Hast du die Lösungen dazu verändert?

123

23.01.2008, 12:10

Ja ich hab eben die const char* durch ConstBoundPointer<char> ersetzt. Das verhält sich wie ein Pointer, nur dass es bei Dereferenzierung (operator[], operator*, operator->) ob sich das ganze noch in dem Limit befindet, das am Anfang übergeben wird. Da ich die Klasse jedoch vor ca. 2 Jahren erstellt habe, und bir nicht 100% sicher bin, obs wirklich 100% richtig ist, hab ich ja geschrieben, man sollte das ganze mit nem Debugger testen... (wenn mir in der Infovorlesung immer noch langweilig ist, test ich das mal durch)

@TGGC:
palindrome_tggc("123123123123123123123123123123123123123123213")
-> endlosloop, habs 1:1 kopiert, darum musste ich es aus dem Test rausnehmen,

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

124

23.01.2008, 13:48

Alles klar, habe nun auch eine solche Klasse geschrieben und konnte deine Fehler nachvollziehen. Das Testprogramm ist aktualisiert.
Sorry an die Leute, die es dadurch rausgekickt hat :D

Anonymous

unregistriert

125

23.01.2008, 14:18

Zitat von »"Entenwickler"«

@TGGC:
palindrome_tggc("123123123123123123123123123123123123123123213")
-> endlosloop, habs 1:1 kopiert, darum musste ich es aus dem Test rausnehmen,
Das ist keine Endlosschleife. Wie willst du das denn ueberhaupt rausgefunden haben, das es eine Endlosschleife sein soll. Da muss dein Test falsch sein. f'`8k


Gruß, TGGC (making great games since 1992)

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

126

23.01.2008, 16:35

TGGC's Code beinhaltet keine Endlosschleife.

Die einzige enthaltene Schleife läuft bis NormalerIQ < TGGCsIQ, wobei in jedem Schleifendurchlauf NormalerIQ inkrementiert wird und TGGCsIQ unverändert bleibt. Die Schleife terminiert.

Da die Funktion im Anschluss an die Rekursion zurückkehrt, erzeugt jeder Aufruf von TGGCsSuperGeheimeFunktion keinen oder 2 rekursive Aufrufe.
Und da vor den rekursiven Aufrufen TGGCsIQ dekrementiert wird ist sichergestellt, dass, sobald TGGCsIQ 0 erreicht hat, keine weiteren rekursiven Aufrufe erfolgen. Die Rekursion terminiert.

Das Problem ist die exponentielle Worst-Case-Komplexität:

Der Worst-Case tritt dann ein, wenn der zu prüfende string kein Palindrom enthält. Dann werden 2^Länge_des_strings rekrusive Aufrufe getätigt.
Für das oben genannte Beispiel sind das 2^45 ~ 35 Billionen (Zahl mit zwölf Nullen !) Aufrufe von TGGCsSuperGeheimeFunktion.

Nichts desto trotz ist die Funktion - zumindest meiner bescheidenen Meinung nach - korrekt. Den experimentellen Beleg dafür überlasse ich anderen ;)

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

127

23.01.2008, 17:45

Experimentell kann man die Korrektheit nicht beweisen (nur die Inkorrektheit).
Das geht nur so, wie du es soeben getan hast, oder wenn man es ganz hart mag, mit dem Hoare-Kalkül ;)

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

128

23.01.2008, 18:05

Selbstverständlich. Aber ich habe auch nur darzulegen versucht, dass die Funktion terminiert, nicht, dass sie das korrekte Ergebnis liefert. Aber wenn man den Ansatz nachvollzieht, sollte man zu diesem Schluss kommen.

Wir akzeptieren die verbliebenen Lösungen aber weiterhin als korrekt, bis das Gegenteil bewiesen wurde, oder ? ;)

PS: wie komme ich eigentlich zu dem Titel Contest-Gewinner ?! Ehre, wem Ehre gebührt, und das ist David selbst. Ich will mich ja nicht mit fremden Federn schmücken.

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

129

23.01.2008, 19:04

Zitat von »"S.Seegel"«

PS: wie komme ich eigentlich zu dem Titel Contest-Gewinner ?! Ehre, wem Ehre gebührt, und das ist David selbst. Ich will mich ja nicht mit fremden Federn schmücken.

Ich mache immer außer Konkurrenz mit :)

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

130

23.01.2008, 22:27

Zitat von »"David Scherfgen"«

Armer Helmut ... naja, der nächste Contest kommt bestimmt! 8)

Tjo, wie sich wohl die Gewinner von der Tour de France fühlen weiß ich wohl jetzt;)

Ne, aber schon irgendwo ärgerlich, es hätte keine Minute gekostet, den Algo an nem Beispiel nachzuvollziehen, dann wär der Fehler sofort aufgeflogen.

Aber was soll's, bis zum nächsten Contest;)
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

Werbeanzeige