Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Servus,

Ich habe gerade ein kleines Verständnissproblem für die Umsetzung von meinen geplanten Programm.

Also ich habe einen Ausgangszustand A von dieser hat 12 Zugmöglichkeiten, jeder dieser Züge hat 11 Zug Möglichkeiten und jeder dieser Züge hat ebenfalls 11 Zug Möglichkeiten, maximal gibt es 20 Züge.

Die Zugmöglichkeiten lauten zug(int(1-6), Boolean(true/false)).

Außerdem soll die Möglichkeit bestehen, einen Zug rückgängig zu machen und von dort dann einen anderen Zug zu machen), dafür müssen alle 20 Züge gespeichert werden...

Ich werde auch noch weitere Einschränkungen finden, aber erstmal stellt sich mir die Frage, wie setze ich das überhaupt um?

Mein bisheriger Ansatz und die Frage, wie bekomme ich das effektiver hin:

             int zugzaehler=0;

		Boolean solved=false;

		Boolean clockwise=true;

		while(solved==false){

			int seite=1;

		           clockwise=true;

			while(zugzaehler<20)

			{

				while(seite<=6){

                                                    zug(seite,clockwise);

                                                    solved=is_solved();

				        if(solved==true)

				       {

					break;

                                                    }

                                                    seite=+1;

                                                    zugzaehler=+1;

                                             }

                                             clockwise=false;

                                   }

                      }




Irgendwie habe ich bei deinen Posts immer das Gefühl, dass du gerne in Rätseln sprichst. Ich habe den Beitrag mehrfach lesen müssen um zu erahnen, was du vorhast.

Ich rate einfach mal, dass du dich an einer Brute-Force-Lösung für den Rubiks Zauberwürfel versuchst.

Denke daran, dass du so 12×11^19 Kombinationen durchprobierst. Ohne es nachgerechnet du haben ist das eine Zahl mit der du nicht glücklich wirst.

Dein Algorithmus erlaubt nicht die Drehung einer Seite um 180°; ist das Absicht?

Die Zeile "seite=+1" wird nicht das tun, was du dir erhoffst ;)

Der generelle Ansatz für deinen Algorithmus ist das Backtracking-Verfahren, welches am Einfachsten als Rekursion implementiert wird.

Die oben erwähnte Variante mit dem Array würde ich als Optimierung implementieren, sobald der Rest funktioniert.

Ich hoffe, das hilft dir weiter.

  • Autor

Dankeschön, ja das hilft schon mal weiter. Zumindest weiß ich jetzt worum es geht. Denn unser Lehrer hat uns nur die einzelnen Drehmethoden genannt und das Ziel wie es aussehen soll, ohne dabei den Zauberwürfel zu erwähnen, anscheinend sollten wir nicht einfach fertige Algorithmen übernehmen.

Wisst ihr wie man die Mathematik der Linearenoptimierung auf dieses Problem projiziert. Die Lineare Optimierung soll das Ziel sein. Die Mathematik dahinter glaube ich zu verstehen, aber ich weiß nicht wie ich die lineare Optimierung darauf anwende.

Bearbeitet von uthred

Wisst ihr wie man die Mathematik der Linearenoptimierung auf dieses Problem projiziert. Die Lineare Optimierung soll das Ziel sein. Die Mathematik dahinter glaube ich zu verstehen, aber ich weiß nicht wie ich die lineare Optimierung darauf anwende.

Simplex-Verfahren wäre mit das bekannteste Verfahren aus der linearen Optimierung, aber das wird Dir hier nicht helfen, weil Du hier kein Optimierungsproblem hast. Die Lösungsstrategie lässt sich als gruppentheoretischer Algoritmus beschreiben, wobei ich dazu auch Java für eine völlig falsche Sprache, solche Probleme löst man GAP (Software)

  • Autor

Naja, ein 3 Dimensionales Koordinatensystem kann den Würfel mit x Ebenen darstellen und die Lösung für jeden Würfel(3x3x3) ist <20

Jede einzelne Bewegung ist vorgegeben, ich sehe da rein von der Logik her schon das Optimierungsproblem.

  • Autor

Ich will den kürzesten Weg finden einen Zauberwürfel zu lösen, also den "optimalen Weg", dafür muss ich den kompletten Algorithmus auf eine eindimensionale Array aufbauen (54 Werte). Ich weiß (bzw es wurde vorgegeben das dieser Würfel in 20 Zügen zu lösen sei. Die Bewegungsmethoden (12 Stück Für jede Seite 2 (clockwise, counterclockwise) sind vorgegeben.

Ich muss diesen Code auch erklären können.

Ein Zug ist definiert durch die Bewegung einer Seite (egal ob 1x(clockwise), 2x, 3x(counter-clockwise))

Ich will den kürzesten Weg finden einen Zauberwürfel zu lösen, also den "optimalen Weg", dafür muss ich den kompletten Algorithmus auf eine eindimensionale Array aufbauen (54 Werte).

Dieses Problem ist aber nicht linear. Du willst aus eine Menge an Lösungen die Lösung mit einer bestimmten Bedingung finden und das ist so erst mal NP-vollständig, denn ohne Randbedingungen musst Du Dir jede Lösung anschauen und prüfen, ob sie eben "optimal" ist.

Ich weiß (bzw es wurde vorgegeben das dieser Würfel in 20 Zügen zu lösen sei. Die Bewegungsmethoden (12 Stück Für jede Seite 2 (clockwise, counterclockwise) sind vorgegeben.

Zauberwürfel

Gottes Algorithmus

Der Algorithmus setzt letztendlich die algebraische Gruppe entsprechend um, d.h. Du solltest damit beginnen, zu verstehen, was Gruppen und Graphen in der Algebra sind, denn das benötigst Du, um daraus passenden Code zu schreiben

  • Autor

Nach Bruteforce-methode ca.4 Billionen Züge, ein Jahrelang entwickelten Algorithmus innerhalb von vier Wochen verstehen und Umsetzen, mathematische Methoden die man sonst eher bei Studenten sieht(die ganzen Speedcuber wurden meist von Studenten entwickelt) und zuletzt Programmiertechniche Methoden, die ich erst lernen muss (Ausbildung).

Ich glaube schon das ich die Komplexität begriffen habe, aber Aufgeben kommt nicht in Frage und verzweifeln hilft auch nicht.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.