Finden Sie die Permutation in Javascript


Harry:

Bei einem Array arraus Größe nund Index 0<=i<n!möchte ich die i-te Permutation zurückgeben.

Ich konnte eine Methode schreiben, die alle Permutationen erhält:

function permute (arr) {
  var permutations = [];
  if (arr.length === 1) {
    return [ arr ];
  }

  for (var i = 0; i <  arr.length; i++) { 
    var subPerms = permute(arr.slice(0, i).concat(arr.slice(i + 1)));
    for (var j = 0; j < subPerms.length; j++) {
      subPerms[j].unshift(arr[i]);
      permutations.push(subPerms[j]);
    }
  }
  return permutations;
}

Wie schneide ich es, um nur einen Zweig der Rekursion zu erhalten?

Nina Scholz :

Sie können die Fakultät der Array-Länge als Hilfsmittel zum Abrufen der Zielpermutation verwenden. Grundsätzlich berechnet dieser Algorithmus die Array-Indizes, auf denen das Ergebnis wieder zusammengesetzt wird.

function getN(n, array) {
    var f,
        l = array.length,
        indices = [];

    array = array.slice();
    while (l--) {
        f = factorial(l);
        indices.push(Math.floor(n / f));
        n %= f;
    }
    return indices.map(function (i) {
        return array.splice(i, 1)[0];
    });
}

function factorial(num) {
    var result = 1;
    while (num) {
        result *= num;
        num--;
    }
    return result;
}

var i, l,
    array = [1, 2, 3, 4];

for (i = 0, l = factorial(array.length); i < l; i++) {
    console.log(i, '>', getN(i, array).join(' '));
}
.as-console-wrapper { max-height: 100% !important; top: 0; }

Verwandte Artikel


Finden Sie bei permutierten Arrays die Permutation

Nico Schlömer Ich habe zwei numpy Integer-Arrays, import numpy a = numpy.array([1, 3, 5, 0]) b = numpy.array([3, 5, 0, 1]) was ich weiß, sind Permutationen voneinander. Wie kann ich die Permutation finden, dh das ganzzahlige Array, iso dass a[i] == b ? Expl

Beschleunigen Sie die Permutation

mohamadmahdi Ich habe die nächste Aufgabe. Gegebene ganze Zahlen n( 1 <= n <= 1000000) und k( 1 <= k <= n). Es ist erforderlich, eine Permutation pvon ganzen Zahlen zu finden, 1, 2, 3, ..., nso dass die absolute Differenz zwischen jeweils zwei aufeinanderfolge

Finden Sie die JavaScript-Funktionsdefinition in Chrome

Ryan DuVal: Die Entwicklertools von Chrome rocken, aber eine Sache, die sie nicht zu haben scheinen (die ich finden konnte), ist eine Möglichkeit, die Definition einer JavaScript-Funktion zu finden. Dies wäre sehr praktisch für mich, da ich an einer Site arbei

Wie finden Sie die Aufruferfunktion in JavaScript heraus?

Ray Lu: function main() { Hello(); } function Hello() { // How do you find out the caller function is 'main'? } Gibt es eine Möglichkeit, den Aufrufstapel herauszufinden? Greg Hewgill: function Hello() { alert("caller is " + Hello.caller); } Beacht

So finden Sie die Wochentage in JavaScript

magische Bohne Ich versuche die Wochentage von heute bis Sonntag zu finden. Da heute Montag ist, möchte ich die Daten von Montag bis Sonntag anzeigen, aber morgen möchte ich, dass mein Programm von Dienstag bis Sonntag funktioniert. dateSets() { le