7
p = perms([0:2]) 

p =Scheinbare Fehler in Matlab perms funktionieren

2  1  0 
2  0  1 
1  2  0 
1  0  2 
0  1  2 
0  2  1 

This function soll die Permutationen eines Vektors in umgekehrter lexikographischen Reihenfolge anzuzeigen. Daher würde ich erwarten, dass die letzte Zeile dieses Ausgangs die Elemente 0 1 2 enthalten würde; es enthält jedoch 0 2 1. Die anderen Zeilen werden korrekt angezeigt.

Kurz gesagt, die Reihenfolge der letzten zwei Zeilen ist vertauscht. Was geht hier vor sich?

+0

Nichts für ungut, aber ist das eine Frage? –

+0

Das [Beispiel auf der Mathworks-Website] (http://www.mathworks.com/help/matlab/ref/perms.html) macht seltsamerweise das Gleiche – Daniel

+1

@ 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

Antwort

9

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.

+0

Wenn das der Fall war, wie kann ich dann die Antworten in lexikographischer Reihenfolge sortieren? –

+2

@Siva 'sortrows (p)' –

+1

@LuisMendo - Was Siva wirklich bedeutet, ist, Ihnen dafür zu danken, dass Sie so fleißig in Ihren Bemühungen sind und dass er Ihre Antwort in naher Zukunft sehr bald annehmen wird. – rayryeng