Ich habe eine Reihe von n verschiedenen Elementen in Javascript, ich weiß, es gibt n! Möglichkeiten, diese Elemente zu bestellen. Ich möchte wissen, was der effektivste (schnellste) Algorithmus ist, um alle möglichen Anordnungen dieses Arrays zu generieren?
Ich habe diesen Code:
%Vor%Und es funktioniert, aber ich schätze, dass das Austauschen jedes Elements, um die Kombinationen zu bekommen, ein bisschen teuer ist. Ich dachte, ein guter Weg wäre, sich nur auf die Indizes des Arrays zu konzentrieren und alle Permutationen der Zahlen zu erhalten. Ich frage mich, ob es eine Möglichkeit gibt, alle zu berechnen, ohne Elemente innerhalb des Arrays zu wechseln. Ich denke, rekursiv ist möglich, um alle von ihnen zu bekommen, ich brauche Hilfe, dies zu tun.
Also zum Beispiel wenn ich:
%Vor%Ich möchte die Ausgabe:
%Vor%oder:
%Vor%Ich lese das hier: Ссылка
Aber Wikipedia war nie gut darin zu erklären. Ich verstehe nicht viel davon, ich muss sagen, dass mein Mathe-Level nicht das Beste ist.
Verwenden Sie Heap-Methode (Sie finden es in diesem Papier < Sie können alle Permutationen von N Elementen mit Laufzeitkomplexität in O (N!) und Raumkomplexität in O (N) erzeugen. Dieser Algorithmus basiert auf dem Austausch von Elementen. AFAIK das ist so schnell wie es geht, es gibt keine schnellere Methode um alle Permutationen zu berechnen.
Eine Implementierung und Beispiele finden Sie unter bei meiner letzten Antwort in der entsprechenden Frage "permutations in javascript ".
Diese Funktion, perm(xs)
, gibt alle Permutationen eines gegebenen Arrays zurück:
Tags und Links javascript arrays permutation recursion