Schnittcher Geschrieben 27. April 2012 Geschrieben 27. April 2012 Hallo, kann mir jemand sagen ob diese Funktion im Pseudocode so richtig ist? holeSonnenstunden(plz) ergebnis = -1 for i = 0 to Sonnenstunden.Length - 1 WENN Sonnenstunden[i][0] = PLZ erg1 = Sonnenstunden[i][1] SONST WENN Sonnenstunden[i][0] < PLZ erg1 = Sonnenstunden[i][1] ENDE WENN ENDE WENN Next i Rückgabe ergebnis Zitieren
Klotzkopp Geschrieben 27. April 2012 Geschrieben 27. April 2012 Es gibt sowohl einfachere als auch effizientere Lösungen, aber richtig ist deine trotzdem. Zitieren
Schnittcher Geschrieben 27. April 2012 Autor Geschrieben 27. April 2012 Alles klar, ich danke dir für die schnelle Antwort. Ich dachte nämlich: "So wenig Code und schon fertig? Das kann doch nicht sein!" Zitieren
lilith2k3 Geschrieben 27. April 2012 Geschrieben 27. April 2012 Wieso sollte das korrekt sein? erg1 = Sonnenstunden[i][1] Aber zurückgegeben wird ergebnis Rückgabe ergebnisalso wird der Algortihmus so wie er da steht in jedem Falle -1 zurück geben. Zitieren
Schnittcher Geschrieben 27. April 2012 Autor Geschrieben 27. April 2012 Stimmt! Eigentlich sollte erg1 ergebnis heißen! Mir ging es auch mehr um die Fallunterscheidungen, ob die richtig sind. Zitieren
Klotzkopp Geschrieben 27. April 2012 Geschrieben 27. April 2012 Mir ging es auch mehr um die Fallunterscheidungen, ob die richtig sind.Da du bei = und < dasselbe tust, könnte man das auch zusammenfassen. Zitieren
Schnittcher Geschrieben 27. April 2012 Autor Geschrieben 27. April 2012 (bearbeitet) Ja okay das stimmt. Ich frage mich jetzt gerade nur ob ich wirklich auf das richtige Ergebnis zum Schluss komme. Edit: Ja müsste dann das richtige Ergebnis geben, ich habe es gerade nochmal auf einem Zettel getestet. Bearbeitet 27. April 2012 von Schnittcher Zitieren
lilith2k3 Geschrieben 27. April 2012 Geschrieben 27. April 2012 (bearbeitet) Offtopic: Wäre es nicht effizienter, da die Daten ja schon schön vorsortiert sind, so vorzugehen: Hole Sonnenstunden(PLZ): return Suche(PLZ, Sonnenstunden); Suche(PLZ, Sonnenstunden): Hat Sonnenstunden mehr als 3 Elemente dann Teile die Liste in zwei Hälften Vergleiche PLZ mit dem Pivotelement (Sonnenstunden[n/2]) in der Mitte. Ist PLZ größer bilde eine Teilliste mit dem Teil Sonnenstunden[n/2] bis Sonnenstunden[n] und suche da mit Suche(PLZ, Teilliste) weiter Ist die PLZ kleiner bilde eine Teilliste mit dem Teil Sonnenstunden[0] bis Sonnenstunden[n/2] und suche da mit Suche(PLZ, Teilliste) weiter. Sonst vergleiche PLZ mit Sonnenstunden[2] Wenn Sonnenstunden[2]=PLZ return Sonnenstunden[2][1] Sonst return Sonnenstunden[1][1] Geht, glaub ich ein bissel schneller... Bearbeitet 27. April 2012 von lilith2k3 Zitieren
Schnittcher Geschrieben 28. April 2012 Autor Geschrieben 28. April 2012 Aber für die Prüfung müsste meine Lösung doch reichen oder? Und zu deiner Lösung... Muss man die denn wirklich in unterschiedliche Listen teilen? Könnet man nicht direkt über den Index gehen? Also Länge des Arrays -1 und dann durch 2 dann bin ich auch bei der Hälfte dann prüfen und dann wieder durch 2 bis man den Wert rausbekommt? Zitieren
Klotzkopp Geschrieben 28. April 2012 Geschrieben 28. April 2012 Aber für die Prüfung müsste meine Lösung doch reichen oder?Deine Lösung erfüllt die Aufgabestellung. Also Länge des Arrays -1 und dann durch 2 dann bin ich auch bei der Hälfte dann prüfen und dann wieder durch 2 bis man den Wert rausbekommt?Genau. Nennt sich binäre Suche und funktioniert bei sortierten Feldern. Ist effizienter als die lineare Suche, die du implementiert hast. In einer Prüfungssituation würde ich allerdings immer den einfachen Algorithmus dem effizienten vorziehen. Eine lineare Suche ist sicher einfacher und schneller fehlerfrei zu Papier zu bringen als eine binäre. Zitieren
Schnittcher Geschrieben 28. April 2012 Autor Geschrieben 28. April 2012 Genau. Nennt sich binäre Suche und funktioniert bei sortierten Feldern. Ist effizienter als die lineare Suche, die du implementiert hast. In einer Prüfungssituation würde ich allerdings immer den einfachen Algorithmus dem effizienten vorziehen. Eine lineare Suche ist sicher einfacher und schneller fehlerfrei zu Papier zu bringen als eine binäre. Das sehe ich auch so und in der Praxis würde ich es auch testen bzw., debuggen und so evtl. Fehler zu finden. Auf dem Papier geht das ja auch nicht! Zitieren
lilith2k3 Geschrieben 28. April 2012 Geschrieben 28. April 2012 Muss man die denn wirklich in unterschiedliche Listen teilen? Könnet man nicht direkt über den Index gehen? Nein. Da hast Du recht. Allerdings würde ich das realiter unter C mit Pointern lösen, das wäre dann schnell genug ^^ In einer Prüfungssituation würde ich allerdings immer den einfachen Algorithmus dem effizienten vorziehen. Eine lineare Suche ist sicher einfacher und schneller fehlerfrei zu Papier zu bringen als eine binäre. Stimmt :] Vorallem, wenn man den Code runterschreiben kann; das andere kostet ggf. zuviel Zeit. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.