Ja, das scheint ein Fehler zu sein. Guter Fang! Aber wahrscheinlich ein Fehler in der documentation, anstatt in der Funktion.
Wenn Sie open perms
geben Sie den Quellcode zu sehen, werden Sie die folgende Beschreibung in den ersten Zeilen sehen:
%PERMS All possible permutations.
% PERMS(1:N), or PERMS(V) where V is a vector of length N, creates a
% matrix with N! rows and N columns containing all possible
% permutations of the N elements.
%
% This function is only practical for situations where N is less
% than about 10 (for N=11, the output takes over 3 gigabytes).
%
% Class support for input V:
% float: double, single
% integer: uint8, int8, uint16, int16, uint32, int32, uint64, int64
% logical, char
, in denen kein Bezug genommen wird lexikographische Reihenfolge umkehren.
Der eigentliche Job wird von der rekursiven lokalen Funktion permsr
ausgeführt. Wenn Sie an dem Code anschauen, dann ist es zunächst nicht klar, wie es (wie üblich mit Rekursion) funktioniert, aber die Linie
t(t == i) = n
gibt einen Hinweis, dass keine besondere Reihenfolge im Ergebnis angestrebt wird.
Wenn Sie versuchen, einen größeren Vektor Sie Abweichungen von Reverse lexikographischer Reihenfolge in mehreren Reihen sehen werden:
>> perms(0:3)
ans =
3 2 1 0
3 2 0 1
3 1 2 0
3 1 0 2
3 0 1 2
3 0 2 1 %// here. Affects cols 1 and 2
2 3 1 0
2 3 0 1
2 1 3 0
2 1 0 3
2 0 1 3
2 0 3 1 %// here. Affects cols 1 and 2
1 2 3 0
1 2 0 3
1 3 2 0 %// here. Affects cols 2 and 3
...
Zusammenfassend scheint die Funktion ohne Rücksicht auf eine Bestellung entworfen worden zu sein. Es ist die Dokumentation, die wahrscheinlich falsch ist, diese Reihenfolge zu behaupten.
Nichts für ungut, aber ist das eine Frage? –
Das [Beispiel auf der Mathworks-Website] (http://www.mathworks.com/help/matlab/ref/perms.html) macht seltsamerweise das Gleiche – Daniel
@ Benoit_11 Ich habe es nach dem, was ich denke, das OP ist bearbeitet versuchen zu fragen. Siva, wenn meine Bearbeitung nicht genau Ihre Frage widerspiegelt, bearbeiten Sie bitte noch einmal, um zu klären. – Daniel