Java Nächste Permutation anhand aktueller berechnen?

Status
Für weitere Antworten geschlossen.

Anon0

Banned
Registriert
Dez. 2025
Beiträge
13
Hallo, ich bin gerade verwirrt bzw. nicht in Tagesform. KI lässt mich auch im Stich...

Ich möchte anhand eines gegebenen, quadratischen 2D Integer Arrays, das auch Nullwerte enthält (sprich, gleiche Werte), die nächste Permutation berechnen (oder null zurückgeben, falls eine solche nicht existiert):

Java:
  private static Integer[][] calculateNextPermutation(Integer[][] current) {
    final int len1 = current.length;
    Integer[][] next = new Integer[len1][len1];
    for (int i = 0; i < len1; i++) {
      System.arraycopy(current[i], 0, next[i], 0, len1);
    }
    // ... implement permutation logic here ...
    return next;
  }

Beispiel 1:

Code:
0 1 2 3      0 1 3 2
n n n n  =>  n n n n
n n n n      n n n n
n n n n      n n n n

Beispiel 2:

Code:
3 2 1 0      n 0 1 2
n n n n  =>  3 n n n
n n n n      n n n n
n n n n      n n n n

Beispiel 3:

Code:
3 n n n      0 n n n
2 n n n  =>  1 n n n
1 n n n      2 n n n
0 n n n      n 3 n n

Beispiel 4:

Code:
n n n n      n n n n
n n n n  =>  n n n n
n n n n      n n n n
2 3 1 0      3 2 1 0

Wüsste zufällig jemand, wie das einfach geht? Ich glaube, Python hat auch eine Funktion dafür.

Wäre es sinnvoll, das Integer[][] zunächst in ein int[] zu transformieren, indem alle Werte einmal inkrementiert werden?

Und ich bin gerade unsicher, ob die doppelten Werte dabei problematisch sind oder nicht.
 
Ja, gibt Funktionen dafür. Brauchst du eine bestimmte Reihenfolge oder ist die egal? Die Nullwerte bzw. doppelte Werte sind irrelevant. Das es 2d ist ist im Prinzip irrelevant. Es gibt einschlägige Algorithmen, aber auch bei Java gibt er fertiges dafür.
 
  • Gefällt mir
Reaktionen: madmax2010
BeBur schrieb:
Brauchst du eine bestimmte Reihenfolge oder ist die egal?
Wichtig wäre, keine Permutation doppelt und dass alle(!) Permutationen berechnet werden.
Ergänzung ()

striker159 schrieb:
dein Beispiel 3 finde ich persönlich merkwürdig
Das stimmt - mir nicht aufgefallen.

Wichtig wäre einfach nur, dass zum Beispiel:

Code:
n n n 1
n n 3 n
n 2 n n
0 n n n

auch generiert werden kann.
 
itertools.permutations waere jetzt mein weg gewesen
 
Du hast ein paar vergessen... Aber ja, das ist wirklich faszinierend. Ich check es auch einfach nicht.
 
  • Gefällt mir
Reaktionen: Bob.Sponge
striker159 schrieb:
In C++ gibt es die Funktion std::next_permutation, eine mögliche Implementierung findet sich in der Dokumentation

Das sind aber eigentlich 3 Funktionen:

1) The set of all permutations is ordered lexicographically with respect to operator<(until C++20)std::less{}(since C++20).
2) The set of all permutations is ordered lexicographically with respect to comp.
If the type of *first is not Swappable(until C++11)BidirIt is not ValueSwappable(since C++11), the behavior is undefined.

und

BidirIt must meet the requirements of LegacyBidirectionalIterator.

Das bedeutet, die Werte müssen "hochzählbar" (in- und dekrementierbar) sein... Aber wie zählt man einen Nullwert hoch? Ist vielleicht doch nicht so einfach.
Ergänzung ()

Bob.Sponge schrieb:
wie wäre es mit einem Namensvorschag für deinen nächsten Versuch?
Ich weiß nicht was du meinst. Aber stör hier doch nicht, wenn du keine Ahnung hast. Kurze Suche hat ergeben, dass du anderswo gerne negativ auffällst.
 
Der Algorithmus der möglichen Implementierung ist für alle Fälle der gleiche. Da hier die Sortierung überprüft wird, und eine binäre Suche durchgeführt wird, muss ja irgendeine Art Ordnung für die Elemente existieren. Dass kann die natürliche Zahlenfolge sein (operator<) , oder irgendeine andere. Du könntest zum Beispiel definieren, dass NULLs immer größer sind als alle "normale" Zahlen, mit denen sie verglichen werden.


Um den Algorithmus auf eine Liste von Elementen anzuwenden, die nicht sortierbar sind, kann man stattdessen eine Indexliste permutieren, in dem man jedem distinkten Wert im Ursprungsarray eine Zahl zuweist
 
@Bob.Sponge
würde mich schon der Einsatzzweck für 43680(?) Varianten
dieser im "@kali-hi - Style u.A," formulierten Frage interessieren...

Ahoi D.
 
  • Gefällt mir
Reaktionen: Bob.Sponge
striker159 schrieb:
Da hier die Sortierung überprüft wird, und eine binäre Suche durchgeführt wird, muss ja irgendeine Art Ordnung für die Elemente existieren.
Heißt das, um nur eine(!) nächste Permutation zu berechnen, müssen jedes Mal alle(!) Permutationen berechnet werden, die es gibt?

Das wäre ein interessantes Detail, weil dann müsste ich zwischenspeichern, damit es nicht furchtbar inperformant wird.

striker159 schrieb:
Der Algorithmus der möglichen Implementierung ist für alle Fälle der gleiche.
Ich habe mir den Algo noch nicht angeschaut, aber das Integer[][] ist bereits eine Indexliste (wenn auch mit Nullwerten...)

Es geht darum, Elemente anzuordnen und nach einem Kriterium zu optimieren.
 
Anon0 schrieb:
Ich weiß nicht was du meinst. Aber stör hier doch nicht, wenn du keine Ahnung hast. Kurze Suche hat ergeben, dass du anderswo gerne negativ auffällst.

Nana, dann stelle doch bitte deine kurze Suche hier einfach mal rein, einfach damit jeder der mitlesenden nachvollziehen kann, was dran ist an deiner Behauptung bzw. Unterstellung. Umkehrung hilft dir hier nicht weiter.

Also: Belege deine Behauptung anhand deiner kurzen Suche. Und zwar für jeden nachvollziehbar. Und bei der Gelegenheit bitte auch die Unterstellung vor deiner letzten Sperrung: was ist hier mein angeblicher Zweitaccount?

Es gibt Foren da wird jeder Neuaccount von dir rigoros gesperrt. Im Java-Forum, im c-plusplus.Forum, Byte-Welt, bevor es auch dank ihm geschlossen wurde.
CyborgBeta ist der ewige 'wanna be', der stets alles besser weiß und nur auf der Stelle tritt. Ausfällig wird, wenn Argumente nicht ziehen, ein Thema nach dem dem anderen aufmacht, ohne Linie oder Bezug zu irgendwas.

dms schrieb:
@Bob.Sponge
würde mich schon der Einsatzzweck für 43680(?) Varianten
dieser im "@kali-hi - Style u.A," formulierten Frage interessieren...

Ahoi D.

Ein Psychogram wäre in der Tat durchaus interessant. Seit neuestem bezeichnet er sich als DevOp-Engineer (drum kennt er sich ja mit phpmyadmin aus, was nichtzwingend zum DevOp-Repertoire gehört), ansonsten ist er gern wissenschaftlicher Mitarbeiter (befristet) an einer Hochschule, angeblich Fachbereich Informatik, legt sich auch gern mal mit Profs auf GitHub an. Kann alles, weiß alles, Debugger sind obsolet wenn man Clean Code anwendet.. allerlei interessante und exklusive Thesen.

Anstatt sich mal konsequent mit LeetCode zu befassen (durch zu ackern) soll das lieber irgendein Forum erledigen, wenn AI ihm auch nicht helfen kann bzw. er prompts nicht die richtigen Fragen stellen kann.

Ich versuche einfach dem Motto zu folgen: "Halte deine Umwelt sauber".
 
  • Gefällt mir
Reaktionen: dms und User38
Keine Sorge, jetzt ist er erstmal raus.. aber bald schon wieder hier. Darauf ist leider Verlass :(
 
  • Gefällt mir
Reaktionen: User38
Status
Für weitere Antworten geschlossen.
Zurück
Oben