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 Kombinationen einer 4x4-Matrix mit den Werten 1-16

 

VWStiP

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.12.2017, 10:56     Titel: Alle Kombinationen einer 4x4-Matrix mit den Werten 1-16
  Antworten mit Zitat      
Hallo zusammen,

ich sitze gerade an einem Tool zum Lösen eines antimagischen Quadrates. Dabei handelt es sich um eine 4x4 Matrix, bei der jeweils in Spalten und Zeilen und den beiden Diagonalen bestimmte Summen entstehen müssen. Die Matrix darf jede Ziffer 1-16 nur einmal enthalten. Der Code soll alle möglichen Lösungen für dieses Quadrat finden.

Mein (nicht sehr guter) Ansatz war, mittels verschachtelter For-Schleifen beginnend vom letzten Element hochzuzählen und damit jede mögliche Kombination zu bilden, die verschiedenen Bedingungen zu prüfen und bei korrekter Lösung das Ergebnis wegspeichern.

Probleme in meinem Code:
- auch von vornherein unmögliche Lösungen (mehrmals die gleiche Ziffer) werden erst generiert und dann überprüft
- das ganze ist unheimlich langwierig

Fällt jemandem eine Möglichkeit ein, nur solche Matrizen zu erzeugen, die jeweils genau 1-mal die Ziffern 1-16 enthalten und das so systematisch, dass man alle Möglichen Kombinationen überprüfen kann?

Vielen Dank.

Grüße
VWStiP


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.12.2017, 11:18     Titel:
  Antworten mit Zitat      
Hallo,

theoretisch könntest du perms verwenden.
Praktisch hast du das Problem, dass du dann 16! = 20.922.789.888.000 viele Kombinationen erzeugen würdest. Das ist also immer noch mehr, als in vernünftiger Zeit abgearbeitet werden kann, und passt auch nicht auf einmal in den Speicher.

Die beste Möglichkeit dürfte tatsächlich eine for-Schleife in Verbindung mit einem rekursiven Aufruf sein. Allerdings muss dabei ständig abgeprüft werden, welche Elemente noch zulässig sind, um extrem lange Rechenzeiten zu vermeiden.

Grüße,
Harald
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.