5.4: Longest Common Subsequence

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

5.4: Longest Common Subsequence
Hi,
mir ist schleicherhaft, wozu die lcshelper als Übergabeparameter die Hilfsarrays mitbekommen soll.
Diese lege ich doch static an.
Ich übergeb halt (ohne jede Wirkung) brav die Arrays wie vorgegeben,
aber wenn ich die als Parameter weglasse klappt es ja genauso gut.

Oder soll die lcshelper auch per Aufruf von außen mit Übergabe irgendwelcher fremder Arrays funktionieren?


Du solltest dir mal überlegen, ob du die Arrays wirklich static anlegen musst. :wink:

LCSLEN
Hallo, ich versteh irgendwie nich so ganz, warum LCSLEN ein zweidimensionales Feld ist… Also was ist darin genau gespeichert bzw soll gespeichert werden??


Ja, man könnte LCSDIR und LCSLEN auch global und static machen.
Sind sie aber nicht, und wie du schon richtig festgestellt hast, kannst du sie einfach weiterreichen.

Ist das dein einziges Problem, oder verstehe ich nicht was du meinst?


Das hängt damit zusammen, dass LCS (so wie auf dem Aufgabenblatt beschrieben) zwei Parameter hat.

Dynamische Programmierung basiert darauf, dass man Zwischenergebnisse zwischenspeichert, damit man sie nicht nochmal berechnen muss.
Nachdem dein Zwischenergebnis von zwei Parametern abhängt, ist es sinnvoll zum Zwischenspeichern ein zweidimensionales Array zu verwenden.

Beantwortet das deine Frage?

Falls nein, zu Longest Common Subsequence gibt es einen seehr ausführlichen Wikipedia-Artikel:


Ja danke, diese Frage beantwortet es schon. Hab allerdings schon wieder neue Fragen… Wie greife ich denn jetzt in lcs auf meine beiden Hilfsarrays zu??
Bzw wie sollen die rekursiven Aufrufe funktionieren? Denn in lcs übergebe ich ja keine Indizes oder so, sondern nur die beiden char-Arrays. Also was veränder ich beim erneuten Aufruf der Methode??? Ich versteh glaub ich den prinzipiellen Aufbau der ganzen Auswertung noch nicht ganz… Auch mit Wikis hilfe leider nicht :frowning:


x und y sind Indizes in den beiden Zeichenketten… und x und y werden beim Rekursionsaufruf natürlich mitgegeben und verändert.


Aber ich hab doch bei lcs keine passenden Eingabeparameter…? Der Methode werden doch nur die beiden Char-Arrays übergeben?


Deswegen nimmst du für die Rekursion die lcshelper-Methode… die hat auch die passenden Parameter.


Ja okay, aber die lcshelper gibt mir ja nur nen int wert zurück. Was bringt mir das denn rekursiv? Ich dachte ich will rekursiv das Lösungsarray füllen? Also den return-Wert von lcs?