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

Alle möglichen Anordnungen ermitteln

 

Gasterino

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2015, 11:06     Titel: Alle möglichen Anordnungen ermitteln
  Antworten mit Zitat      
Hallo, ich habe folgendes Problem. Ich möchte alle möglichen Anordnungen von 3 Objekten auf 14 möglichen Positionen haben. Pro Position ist immer nur ein Objekt möglich. Wenn ich richtig liege sind das insgesamt 364 Variationen [ 14!/(3! 11!)].
Um alle Anordnungen zu bekommen wollte ich die Permutationen eines Vektors bestimmen und die mehrfachen Zeilen mit unique(b,'rows') wieder entfernen.
Code:
a=[1 2 3 0 0 0 0 0 0 0 0 0 0 0]
b=perms(a)
c=unique(b,'rows')

Leider konnte Matlab die Permutationen nicht bestimmen, da meine 5GB Ram nicht ausreichen. Kann man dieses Problem auch auf eine andere Weise lösen? Ich denke mein Weg ist wahrscheinlich nicht die beste Lösung. Wie heißt mein Problem eigentlich mathematisch korrekt?

Vielen Dank schon mal und einen schönen Sonntag.


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 06.12.2015, 12:41     Titel:
  Antworten mit Zitat      
sowas?
http://stackoverflow.com/questions/.....ations-order-is-important
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.12.2015, 15:56     Titel: Re: Alle möglichen Anordnungen ermitteln
  Antworten mit Zitat      
Hallo Gasterino,

Du kannst das üProblem von der anderen Richtung aus angehen:
Du hast 14 Positionen und möchtest darauf jeweils 3 ohne Wiederholung ziehen.
Das sind Permutationen mit Berücksichtigung der Reihenfolge, wenn ich Dich richtig verstanden habe. Dann hättest Du allerdings nicht 364 sondern 2184 Lösungen: N!/(N-K)!
Sind [14,13,12] und [12,13,14] gleiche oder unterschiedliche Lösungen?
Siehe: http://www.mathworks.com/matlabcent.....eexchange/26397-vchooseko
Dort findest Du auch sehr schnelle Methoden für die anderen Permutationen und Kombinantionen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gasterino

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2015, 10:08     Titel:
  Antworten mit Zitat      
Danke für die bisherigen Antworten, aber anscheinend konnte ich mein Problem nicht richtig erklären, da sich die Links auf etwas anderes beziehen.

Ich versuche es mal etwas anschaulicher zu erklären: Ich habe 2 Geldscheine (5€ und 10€) und 4 Stühle. Ich möchte dann herausfinden, auf welche Arten ich die Geldscheine auf die Stühle verteilen kann.
es sollte dann so eine Matrix als Lösung bekommen (der Spaltenindex steht für den Stuhl)
0 0 5 10
0 0 10 5
0 5 0 10
0 5 10 0
0 10 0 5
0 10 5 0
5 0 0 10
5 0 10 0
5 10 0 0
10 0 0 5
10 0 5 0
10 5 0 0
Die erste Zeile sagt dann folgendes aus: auf den Stühlen 1&2 liegt kein Geld, auf dem 3. Stuhl liegt der 5€ Schein und auf dem 4. der 10er.
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 08.12.2015, 13:48     Titel:
  Antworten mit Zitat      
Zitat:
Danke für die bisherigen Antworten, aber anscheinend konnte ich mein Problem nicht richtig erklären, da sich die Links auf etwas anderes beziehen.

das tuen sie nicht denke ich. du musst das ergeniss nur auswerten.
Code:
n = 4; k = 2;
nk = nchoosek(1:n,k);
p=zeros(0,k);
for i=1:size(nk,1),
    pi = perms(nk(i,:));
    p = unique([p; pi],'rows');
end

Belegung=zeros(size(p,1),n);
for k=1:size(p,1)
    Belegung(k,p(k,1))=5;
    Belegung(k,p(k,2))=10;
end
 

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.12.2015, 15:52     Titel:
  Antworten mit Zitat      
Hallo Gasterino,

Ich denke auch, dass die Antworten passen.
Statt die Geldscheine auf 4 Stühle zu vertzeilen, kannst Du auch jeweils die Indizes von zwei Stühlen bestimmen.

Dies wäre dann equivalent:
Code:
    0     0     5    10
     0     0    10     5
     0     5     0    10
     ...
% Und:
  3, 4
  4, 3
  2, 4
  ...

Die erste Spalte ist also der (Stuhl)Index des 5er Scheins, die zweite Spalte die des 10er Scheins. Wenn man mit großen Arrays rechnet benötigt man so nur die Hälfte des Speicherplatzes. Gerade bei Kombinationen und Permutationen explodiert der RAM-Bedarf immer wieder unerwartet.
Per sub2ind kannst Du aus der Index-Matrix die Matrix mit den zusätzlichen Nullen wieder erzeugen, falls Du sie wirklich brauchst.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gasterino

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2015, 19:07     Titel:
  Antworten mit Zitat      
Vielen Dank euch beiden! Das Problem ist jetzt tatsächlich gelöst.
 
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 - 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.