Zum neuen Informatik-Forum >>
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Neuling in Java - Seite 2
Gehe zu Seite Zurück  1, 2
 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Java/JSP
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Tobias



Anmeldungsdatum: 15.02.2005
Beiträge: 149

BeitragVerfasst am: 05. Apr 2005 16:23    Titel: Antworten mit Zitat

Es gibt verschiedene Arten von Rekursionen.

Bei einer Endrekursion (hier wird das Ergebnis z.B. in einem Argument akkumuliert) wird nichts anderes getan als linear an die Tiefe zu gehen und am Schluß nur noch alle return-Befehle abzuklappern. Die Endrekursion wird von optimierten Compilern in Schleifen verwandelt.

Im Allgemeinen werden Rekursionen natürlich nicht in Schleifen übersetzt. (Was auch ohne komplexere Strukturen wie Heaps, Queues oder Stacks auch nicht möglich ist.

Aber deine Lösung scheint auch noch fehlerhaft. Was wäre z.B. bei den Strings

"12341234123412345" und "12345".

Dann merkt der Algo, dass die ersten Zeichen übereinstimmen und wird neu aufgerufen mit stringVergleich("2341234123412345", "2345", 4)

D.h. sobald an einer Stelle die ersten zeichen übereinstimmen wird der Suchstring gekürzt und steht nichtmehr ganz zur Verfügung.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jovi



Anmeldungsdatum: 04.04.2005
Beiträge: 4
Wohnort: München

BeitragVerfasst am: 06. Apr 2005 22:40    Titel: Antworten mit Zitat

Du hast natürlich vollkommen recht. Eigentlich wollte ich ja auch nur eine rekursive Lösung skizzieren. Also meine Verbesserung:
0) wenn Länge(array1) < zahl OR Länge(array2) < zahl dann return(false)
1) wenn die jeweils ersten zahl Zeichen der Strings gleich sind, dann return(true)
sonst return(stringVergleich(REST(array1), array2, zahl) OR stringVergleich(array1, REST(array2), zahl))

Nur die Lösung ist nun tatsächlich furchtbar ineffizient, da stringVergleich dauernd mit den selben Parametern aufgerufen wird. Um das Ganze auch effizient zu machen müsste man sich tatsächlich alle schon einmal durchlaufenen stringVergleich-Aufrufe
in einem globalen 2-dimensionalen Feld merken. Was Besseres fällt mir im Moment leider nicht ein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Georg
Administrator


Anmeldungsdatum: 15.02.2005
Beiträge: 57
Wohnort: Aachen

BeitragVerfasst am: 09. Apr 2005 02:22    Titel: Antworten mit Zitat

Hi,

da jede iterative Lösung besser ist als eine rekursive sollte sich das doch gut mit zwei for-Schleifen lösen lassen?

Da ich dieses Semester erst Java lerne, hier eine Lösung in Java-ähnlichem Pseudocode smile
Code:

for (i = 0; i < array1.length-3; i++) {
  for (j = 0; j < array2.length-3; j++) {
    if (array1[i:3] == array2[j:3]) {
      return true;
    }
  }
}
return false;


Die Notation array1[i:3] soll dabei den Teil von array1 angeben, der bei Zeichen i beginnt und 3 Zeichen lang ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kurellajunior
Administrator


Anmeldungsdatum: 14.02.2005
Beiträge: 214
Wohnort: Berlin-Pankow

BeitragVerfasst am: 12. Apr 2005 12:58    Titel: Antworten mit Zitat

Das entspräche der "Holzhammer" methode von Tobias. Zudem war eine rekursive Lösung weiter unten gesucht Augenzwinkern

Und wenn Du weiterliest, gibt es einen iterativen Vorschlag mit nur einer Schleife von mir Augenzwinkern

Woher hast Du denn die Pauschalaussage, jede iterative Lösung sei besser als eine rekursive? Wenns Dich interessiert, mach dazu einen Thread in der theoretischen Informatik auf Augenzwinkern

genug gezwinkert, Jan

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Georg
Administrator


Anmeldungsdatum: 15.02.2005
Beiträge: 57
Wohnort: Aachen

BeitragVerfasst am: 22. Apr 2005 00:51    Titel: Antworten mit Zitat

Tatsächlich, die von mir dargebotene Lösung war ja schon da, allerdings gemein in theoretischen Aussagen versteckt.

Kurellajunior, hier können wir den Wettstreit iterativ gegen rekursiv ausdiskutieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Java/JSP Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen