|
|
Suche die kleinsten 4 Werte in einem Vektor |
|
nic |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.12.2011, 16:36
Titel: Suche die kleinsten 4 Werte in einem Vektor
|
 |
Hallo,
ich suche einen Weg, wie man die 4 kleinsten Werte eines Vektors findet OHNE sortieren.
Ist bestimmt ganz leicht, aber ich steh da grad auf dem Schlauch!
|
|
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 15.12.2011, 16:44
Titel:
|
 |
Also Sortieren wäre in diesem Fall günstiger, sonst muss du 4 Mal MIN anwenden.
so:
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 15.12.2011, 19:05
Titel: Re: Suche die kleinsten 4 Werte in einem Vektor
|
 |
Hallo nic,
Zitat: |
ich suche einen Weg, wie man die 4 kleinsten Werte eines Vektors findet OHNE sortieren. |
Du kannst beruhigt sein: Das geht nicht.
Die vier kleinsten Werte zu suchen ist nämlich bereits eine Sortierung, wenn auch nur eine partielle. Oder meinst ohne den SORT-Befehl zu verwenden?
Bei einem großen Array ist der viermalige Aufruf von MIN übrigens schneller als das gesamte Array zu sortieren. Es gibt noch einen einfachen Ansatz mit einer FOR-Schleife. Man startet mit m=[Inf, Inf, Inf, Inf] und wenn des gerade betrachtete Element x(i) kleiner ist als m(1), ersetzt man m durch [x(i), m(1:3)].
Ich meine, dieser allgemeine Beschreibung zu folgen wäre keine Täuschung bei der Abgabe einer Hausaufgabe.
Gruß, Jan
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 16.12.2011, 00:49
Titel:
|
 |
Habe ich wieder eine Hausaufgabe gelöst?
|
|
|
razmatazz.guest |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 17.06.2013, 15:54
Titel:
|
 |
Ich suche gerade ebenfalls nach einer Möglichkeit, die x kleinsten Elemente in einer Matrix/Vektor zu finden (keine Hausaufgabe ).
Was ist mit "mehrmaligem Anwenden von min" gemeint?
Müsste man dazu das zuletzt gefundene Minimum durch eine "hohe" Zahl (oder NaN) ersetzen, und dann auf die veräünderte Matrix/Vektor nochmals min anwenden?
Oder kennt ihr da eine elegeante Lösung /meint mit der Aussage etwas anderes?
Sortieren möchte ich auch eher ungern, wobei ich damit vermutlich mit weniger wurstigen Nebenrechnungs-Code-Zeilen auskäme.
Viele Grüße,
Christoph
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 18.06.2013, 00:13
Titel:
|
 |
Hallo razmatazz.guest,
Eine effiziente Antwort lässt sich nur geben, wenn Du erklärst, wie viele Elemente Du aus wie vielen Zahlen finden möchtest. Das sieht bei 2 aus 1e5 ganz anders aus als bei 1e5 aus 1e6.
Meine Idee von 2011 war:
Oder in einer Schleife:
Sieht also eigentlich nicht kompliziert aus, oder?
Aber ab einer gewissen Größe, ist dies einfach schneller:
Gruß, Jan
|
|
|
razmatazz.guest |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.06.2013, 17:24
Titel:
|
 |
Guten Tag,
danke für die Antwort, ich habe mich relativ zeitnah für die sort Lösung entschieden. Mir ist selber aufgefallen, dass wenn es keinen Befehl dafür gibt, es nur über setzen auf NaN funktionieren kann, wie die bereits gepostete Lösung.
Das Problem ist im Verhältnis zu deinen Größenordnungen viel kleiner.
Der zu durchsuchende Vektor ist 20-100 Einträge groß, und die zu findenen Werte ebenfalls in diesem Bereich (worst case: soviele wie der Vektor lang ist).
Ich vermute da ist man mit dem sort Befehl schneller.
Aber ist auch nur ein kleines Detail und die Performance ist dort nicht wichtig. Ich war eher auf der Suche nach einem sehr schlanken Code.
Viele Grüße,
Christoph
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
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.
|
|