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

Permutationen ohne Wiederholung

 

Windbe

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2013, 14:17     Titel: Permutationen ohne Wiederholung
  Antworten mit Zitat      
Ich suche die Anzahl der Permutationen einer Zahlenfolge von 1 bis 11,
für die folgende Bedingungen gelten sollen:
1,2,3 können an 1. bis 10. Stelle stehen
4,5,9,10,11 können an 3. bis 11.Stelle stehen
6,7,8 können an 1. bis 9. Stelle stehen.
Dafür habe ich bisher keine brauchbare Formel oder ein Verfahren gefunden.
Mich interessiert nur die Gesamtzahl, nicht die Auflistung der Permutationen!
Danke im voraus für Hilfe !


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.02.2013, 02:46     Titel: Re: Permutationen ohne Wiederholung
  Antworten mit Zitat      
Hallo Windbe,

Das hört sich wie eine Hausaufgabe an, oder möchtest Du einen Safe knacken? Insgesamt gibt es nur 39'916'800 Permutationen der Zahlen 1 bis 11. Das lässt sich leicht im RAM auswerten, wobei man aber darauf achten sollte, dass das Array den Typ UINT8 hat, da ein DOUBLE 8 mal mehr Speicher benötigt. Der PERMS Befehl hilft hier.

Danach kann man die unerwünschten Permutationen entfernen. Man erhält weniger als 4537000 Möglichkeiten.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2013, 13:58     Titel: Permutationen ohne Wiederholung
  Antworten mit Zitat      
Danke für die schnelle Antwort.
Für Hausaufgaben bin ich schon zu alt, einen Safe will ich auch nicht knacken, es geht um eine Zugreihenfolge in einem Schachproblem.
Wahrscheinlich verstehe ich zu wenig von Mathematik, aber ich kann mir aus deiner Antwort noch kein praktisches Verfahren ableiten. Kannst du das bitte noch etwas auusführlicher darstellen?
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.02.2013, 17:02     Titel: Re: Permutationen ohne Wiederholung
  Antworten mit Zitat      
Hallo windbe,

Code:
D = perms(uint8(1:11));  % VChooseKO(uint8(1:11), 11)
% 1,2,3 können an 1. bis 10. Stelle stehen - also nicht an der 11. Stelle:
D(D(:, 11) == 1, :) = [];
D(D(:, 11) == 2, :) = [];
D(D(:, 11) == 3, :) = [];

% 4,5,9,10,11 können an 3. bis 11.Stelle stehen  - also nicht an 1. und 2.:
for iv = [4,5,9,10,11]
  D(D(:, 1) == iv, :) = [];
  D(D(:, 2) == iv, :) = [];
end

% 6,7,8 können an 1. bis 9. Stelle stehen.
for iv = [6,7,8]
  D(D(:, 10) == iv, :) = [];
  D(D(:, 11) == iv, :) = [];
end
size(D)

Das ist natürlich ineffizient und sehr häßlich. Eine konstruktive Methode wäre flexibeler und würde keine Zeit damit vertrödeln nicht benötigte Permutationen zu erzeugen. Aber wenn dies nur einmalig benötigt wird und nur wenige Sekunden Rechenzeit vergeudet - was soll's.

ABER, leider erzeugt Matlab's PERMS Befehl temporäre Arrays vom Typ DOUBLE, und das benötigt 8 mal mehr Speicher. Meine 2GB-Maschine wird davon gesprengt. Deswegen verwende ich: http://www.mathworks.com/matlabcent.....eexchange/26397-vchooseko, das deutlich schneller und Speicher-schonender ist. Dies aber muss man wiederum erstmal installieren und kompilieren. Wenn man dann noch keinen C-Compiler installiert hat, wird es zunehmend komplizierter.

Vielleicht reicht Dir dann das Endergebnis: 4536000

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2013, 13:49     Titel: Permutationen ohne Wiederholung
  Antworten mit Zitat      
Danke für die wiederum prompte Bearbeitung!
Ich habe inzwischen den ersten von 6 Anfangszügen "per Hand", natürlich mit Rechnerunterstützung, komplett untersucht und komme auf eine Zahl der Varianten von 49.712. Das deutet auf eine Gesamtzahl für alle 6 Anfangszüge
in der Größenordnung von etwa 300.000 hin.
Die starke Abweichung zu deinem Ergebnis liegt m. E. daran, dass ich nicht alle einschränkenden Bedingungen exakt formuliert hatte, als da sind:
2 + 3 müssen stets vor 4 stehen
1 + 3 müssen stets vor 5 stehen
6 + 7 müssen stets vor 9 stehen
7 + 8 müssen stes vor 10 stehen
2 + 8 müssen stets vor 11 stehen
Lässt sich das auch noch einprogrammieren?
Wie gesagt, ich bin nur an der Gesamtzahl, nicht an einzelnen Reihenfolgen interessiert.
Dank im voraus für deine Bemühungen !
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.02.2013, 13:01     Titel: Re: Permutationen ohne Wiederholung
  Antworten mit Zitat      
Hallo Windbe,

Schau Dir doch mal meinen Code an. Du kannst sicherlich die neuen Bedingungen mit Hilfe der gezeigten Methoden implementieren.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.02.2013, 22:00     Titel: Permutationen ohne Wiederholung
  Antworten mit Zitat      
Wenn ich das richtig verstehe, könnte das wie folgt lauten:
Code:
% 2,3 müssen stets vor 4 stehen
for iv = [2,3]
D(D(4,:) = = iv,:) = []
% 1,3 müssen stets vor 5 stehen
for iv = [1,3]
D(D(5,:) = = iv,:) = []
% 6,7 müssen stets vor 9 stehen
for iv = [6,7]
D(D(9,:) = = iv,:) = []
% 7,8 müssen stets vor 10 stehen
for iv = [7,8]
D(D(10,:) = = iv,:) = []
% 2,8 müssen stets vor 11 stehen
for iv = [2,8]
D(D(11,:) = = iv,:) = []

Ist das so richtig oder habe ich etwas verdreht ?

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
 
Windbe

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.02.2013, 23:12     Titel: Permutationen ohne Wiederholung
  Antworten mit Zitat      
Offensichtlich sind da ohne meine Absicht Smilies in meine Formeln geraten, weil ich jeweils eine Leertaste vergessen habe. Also nochmal:
% 2,3 müssen stets vor 4 stehen
for iv = [2,3]
D(D(4, : ) = = iv,: ) = []
usw. usw.
 
Windbe

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.02.2013, 12:52     Titel: Permutationen ohne Wiederholung
  Antworten mit Zitat      
Wenn das Programm ok ist, dann alles in das erste Excel-Feld eintragen?
Muss der Befehl end nicht erst ganz zum Schluss kommen oder auch zwischendurch wie in deinem Programm?
Danke für deine Unterstützung eines Programmier-Laien !
jo
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.02.2013, 15:29     Titel: Re: Permutationen ohne Wiederholung
  Antworten mit Zitat      
Hallo Windbe,

Wenn das Programm ok wäre, würde es ja laufen. Macht es aber nicht.
Nein, das "end" muss nicht erst am Schluss kommen, wie auch in der Dokumentation (Getting Started Kapitel) erklärt wird. Jede FOR-Schleife wird mit einem "end" abgeschlossen. Siehe auch "help for".

Der Operator zum Vergleich heißt "==" ohne Space zwischen den "=".

Zitat:
Code:
% 2,3 müssen stets vor 4 stehen
for iv = [2,3]
D(D(4,:) = = iv,:) = []

Nein. Besser:
Code:
for iv = [2,3]
  for in = 4:11
    D(D(:, in) == iv,:) = []
  end
end

Dies wäre "2 und 3 müssen vor der 4. Position stehen".
Man kann nicht einfach die erste und zweite Position der Indices vertauschen, es ist also ein deutlicher Unterschied, ob man "D(:, 4)" oder "D(4, :)" schreibt.

Zitat:
Wenn das Programm ok ist, dann alles in das erste Excel-Feld eintragen?

Was genau möchtest Du in welches Excel-Feld eintragen???
Woher kommt den plötzlich Excel?

Ich habe den Eindruck, dies ist die falsche Methode um eine zuverlässige Lösung zu bekommen. Ich würde empfehlen entweder die Getting Started Kapitel zu lesen um grundlegende Matlab-Kenntnisse zu bekommen, oder jemand zu fragen, ob er das bei angemessener Gegenleistung für Dich schreibt (siehe Unterforum "Programmieraufträge").

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.03.2013, 17:09     Titel: Permutationen ohne Wiederholung
  Antworten mit Zitat      
Bitte entschuldige mein laienhaftes Wissen in der Programmierung, ich hatte angenommen, dass perms ein Excel-Befehl ist.
Dass das Programm nicht läuft, könnte m. E. daran liegen, dass sich Widersprüche zwischen dem ersten und zweiten Teil ergeben können.
Im zweiten Teil ab "2+3 müssen stets vor 4 stehen" usw. meinte ich mit der 4 nicht die Position, sondern die Zahl 4, ich hätte also besser formulieren sollen: 2+ 3 müssen stets vor der 4 stehen. Das gilt dann auch für die folgenden Forderungen.
Deshalb müsste das sicher ein anderer Programmiercode sein.
Bitte erbarme dich nochmals zu dieser Änderung !
jo
 
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.