Verfasst am: 13.07.2013, 20:24
Titel: Median Berechnung mit Teile und Herrsche Rekursiv
Hallo liebe Labber,
ich weiß leider mit meiner Median- Berechnung nicht mehr weiter. Ich habe nur ein Pseudo- Code gegeben, der dem Unten aufgeführten Matlab- Code enspricht. Nun passt das aber alles nicht mehr zusammen und ich weiß nicht weiter. Eventuell könnt ihr mir helfen.
Probleme, die ich auf den ersten Blick sehe:
- Vektor a falsch definiert (runde Klammern statt eckige)
- Hauptprogramm ruft k_rang nicht auf.
- Vergleich auf Gleichheit benötigt == statt =
- Das Tauschen funktioniert so nicht. Mir ist allerdings nicht klar, was wo getauscht werden soll, daher kann ich auch keinen Korrekturvorschlag machen.
Die Probleme sollten dir auch im MATLAB Editor angezeigt werden, und zwar in Form eines roten Quadrats rechts oben im Editor und roten Balken rechts an der Seite. Jeder rote Balken weist auf einen Fehler hin, jeder orange Balken beinhaltet einen Verbesserungsvorschlag.
Zum Einfügen nach dem Floor:
%Partitionierung
q := n1
g := n1
FOR i := n1:n2 DO
y := a(i) IF y ≤ x THEN
tausche(i,g)
g := g + 1 IF y < x THEN
tausche(q,g-1)
q := q + 1 END END END
versuch doch erstmal, die bereits gemachten Vorschläge umzusetzen und die von MATLAB markierten Stellen zu beheben, und poste dann das Ergebnis. Da können wir dann weitermachen.
Ein Hinweis noch: k_rang hat gegenwärtig kein Rückgabeargument (in der function-Zeile, siehe auch der andere Thread).
Servus, hier einmal die etwas geänderte Fassung. Wie ich es genau tauschen soll weiß ich leider nicht so genau. Das "sortiert" bereitet mir Kopfzerbrechen.
Oh, da habe ich dir noch wichtige Dinge verheimlicht:
Das ergebnis und sortieren habe ich bereits oben geändert.
---------------------------------------------------------------
Bestimmung des Medians einer Liste von Daten
Median ist Element in der Mitte nach Sortierung, Index
k= (n+1)/2
bei geradem n der Mittelwert der beiden mittleren Elemente, das wird hier aber ignoriert
aber: Liste ist nicht sortiert, und Sortierung ist zu aufwendig!
erste, ineffiziente Idee (funktioniert für beliebige k):
wiederhole k-mal: bestimme das Minimum der Liste und entferne das Minimum aus der Liste
Minimum-Algorithmus siehe Selection-Sort
bei der k-ten Wiederholung war es der Median
entspricht Selection-Sort mit Abbruch nach k Durchläufen ( O(n2))
Beispiel:
a=(5,1,8,3,9,2), n=6, k=3
1. Minimum: 1, 2. Minimum: 2, 3. Minimum (und Median): 3
effizientere Idee (funktioniert für beliebige k):
wähle zufälliges Element x der Liste (z.B. das in der Mitte)
partitioniere durch Umstellen die Liste in drei Teile: 1) < x, 2) = x, 3) > x
also a1, ... aq-1, aq, ..., ag-1, ag, ..., an
unterscheide drei Fälle:
k<q wiederhole Verfahren für Bereich 1...q-1 (Rekursion)
k≥g wiederhole Verfahren für Bereich g...n (Rekursion)
q≤k<g x ist die Lösung
1. Fall: a(i) > x
es ist nichts zu tun
2. Fall: a(i) = x
a(i) mit a(g) tauschen, g erhöhen
3. Fall: a(i) < x
a(i) mit a(g) tauschen, g erhöhen, a(q) mit a(g-1) tauschen, q erhöhen
Hallo zusammen, ein wenig habe ich weitergemacht aber jetzt weiß ich nicht weiter. Hat denn eventuell jemand eine Ahnung? Ich habe ja oben bereits geschrieben, dass Programm soll den Median berechnen. Mehr Infos wie die Obigen habe ich leider auch nicht
das Problem mit sortiert vs. ergebnis hast du nun wieder eingebaut.
In meinem Vorschlag zum Vertauschen von Elementen eines Vektors a kannst du das a nicht einfach weglassen, höchstens durch eine andere Variable ersetzen.
Im Pseudo-Code wird a verwendet, ohne dass es definiert ist. Das ist m.E. nicht sinnvoll.
Bemerkung: Ein "clear" am Anfang einer Funktion ist sinnfrei. Es räumt den aktuellen Workspace leer, der aber zu Beginn einer Funktion sowieso leer ist.
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum 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 posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.