WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Welchen Sortieralgorithmus nehmen ?

 

Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 01.07.2009, 09:52     Titel: Welchen Sortieralgorithmus nehmen ?
  Antworten mit Zitat      
Ich bin auf der Suche nach einem schnellen Sortieralgorithmus für eine Matrix, die schon aus zwei sortierten Teilmatrixen besteht. z.B. so:
Code:

[
 1 1 7;
 1 1 23;
 1 1 2333;
 1 3 29;
 1 3 2822;
 ...
 1 2738 222;
 2 1 2;
 ...
 1782 2827 2912;    % Ende alte Matrix
 1 1 9;                    % Anfang neue
 1 1 222;
 ...
 1 2323 1234;
 2 1 8;
 ...
 1272 1727 2171
]


Ein Tipp, welcher der vielen Suchalgorithmen passt, wäre toll !
Am tollsten wäre ein schon fertiges Verfahren in Matlab... Very Happy

[edit] Meine Intention ist, mein intersect()-Problem über die Grafikkarte lösen zu lassen, unter Zuhilfenahme von AccelerEyes Jacket. Dort wurde aber noch kein Sortieralgorithmus implementiert...
Private Nachricht senden Benutzer-Profile anzeigen


Andy386
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 03.07.2009, 10:58     Titel:
  Antworten mit Zitat      
Vielleicht könnte das ein Mod in Mathematikforum schieben?
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 06.07.2009, 16:07     Titel:
  Antworten mit Zitat      
hat keiner eine Idee ?
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 06.07.2009, 16:18 Uhr von steve
Von Programmierung nach Mathematik
 
Tusor
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 02.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.07.2009, 16:43     Titel:
  Antworten mit Zitat      
Willst du nach der ersten Spalte sortieren?
Da die Matrizen an sich schon sortiert sind, würde ich an dieser Stelle "Insertsort" vorschlagen. Allerdings soweit clever abgewandelt, dass man das Wissen ausnutzt, dass da immer wieder schon sortierte Zeilen kommen, die nur in das bereits sortierte einsortiert werden müssen. Ich würde das so machen, dass ich die erste Zeile der zweiten Teilmatrix hernehme und in die erste Teilmatrix einsortiere. Dann die zweite Zeile der zweiten Teilmatrix,....usw. Dabei kann man sich natürlich den Index der vorher einsortierten Zeile merken, da man weiß, dass die zweite Teilmatrix ja auch schon sortiert ist und deshalb die zweite Zeile der zweiten Teilmatrix nie vor der ersten Zeile der zweiten Teilmatrix einsortiert werden muss. Und diesen Spaß macht man dann für alle weiteren Teilmatrizen. Ich hoffe, dass ich das jetzt nicht zu umständlich erklärt habe und man versteht, was ich meine Wink

Viele Grüße

Tusor
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 08.07.2009, 08:55     Titel:
  Antworten mit Zitat      
Genau, die Matrizen sollen zuerst nach der ersten, dann nach der zweiten Spalte sortiert werden.
Danke für die Erläuterung, das hilft auf jeden Fall !
Private Nachricht senden Benutzer-Profile anzeigen
 
hra

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2010, 07:24     Titel:
  Antworten mit Zitat      
Hast du für dein Problem inzwischen eine Lösung gefunden?

Ich stehe nämlich momentan vor einer ähnlichen Aufgabe.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 16.07.2010, 08:57     Titel:
  Antworten mit Zitat      
Hallo

nimmt doch SORTROWS

Code:

A=[2 3 4; 1 2 8; 10 1 5; 10 1 3]

% sortieren zuerst nach 2 Spalte aufsteigend
% dann nach 3 Spalte aufsteigend
sortrows(A,[2 3])

% sortieren zuerst nach 2 Spalte
% und dann nach 3 Spalte absteigend
sortrows(A,[2 -3])
 
Private Nachricht senden Benutzer-Profile anzeigen
 
hra

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2010, 13:50     Titel:
  Antworten mit Zitat      
Perfekte Antwort... Hätte ich die Beschreibung des Befehls vorher gründlicher gelesen, hätte ich mir die überflüssige Frage sparen können.

Danke für die trotzdem freundliche und hilfreiche Antwort!
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.07.2010, 16:45     Titel:
  Antworten mit Zitat      
Hallo,

zwei vorsortierte Datensätze zu vereinen ist eine Aufgabe für den mergesort Algorithmus.
Eine andere Idee kann helpfen, wenn die Werte alle kleine Integerzahlen sind und nur wenige Spalten sortiert werden sollen. Dann kann man aus z.B. 3 Zahlen mit 0<=x<2^17 einen Wert berechnen, indem man mit [2^34; 2^17; 1] multipliziert. Das lässt ich dann mit SORT sortieren. Das ist zwar einfach ein stabiler quicksort, aber doch sehr effizient programmiert, so dass man mit einem besser angepassten Algorithmus in Matlab nur schwer schneller sein kann.
Bei großen Datenmengen ist dies aber doch möglich:
http://www.mathworks.com/matlabcentral/fileexchange/8097

Gruss Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 02.08.2010, 00:36     Titel:
  Antworten mit Zitat      
Vielen Dank für die Antwort

aus irgendeinem grund habe ich die idee mit dem Multiplizieren verwerfen müssen... weiss gar nicht mehr, aber ich glaube, beim Trennen hat es dann "ewig" gedauert... ist schon zu lange her...

hab mir mal den fileexchange-code angeschaut, ich glaube, dass der nur schneller ist, wenn große Teile (Anfang oder Ende) genau so gelassen werden... hatte etwas ähnliches probiert, und der "fertige" sort war für meine Matrizen viel schneller.
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 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.