Tak, to wygląda na błąd. Dobry połów! Ale prawdopodobnie błąd w documentation, a nie w funkcji.
Jeśli wpiszesz open perms
, aby zobaczyć kod źródłowy, zobaczysz następujący opis w pierwszych liniach:
%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
, w której nie ma odniesienia do odwrócenia porządku leksykograficznego.
Faktyczne zadanie wykonywane jest przez rekurencyjną, lokalną funkcję permsr
. Jeśli spojrzeć na jego kodu, to nie jest oczywiste na pierwszy, jak to działa (jak zwykle z rekurencji), ale linia
t(t == i) = n
daje wskazówkę, że nie ubiega się o zamówienie szczególności w wyniku.
Jeśli spróbujesz większy wektor zobaczysz rozbieżności z odwrotnym porządku leksykograficznym w kilku rzędach:
>> 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
...
Podsumowując, funkcja wydaje się, że zostały zaprojektowane bez uwzględnienia dowolnej kolejności. Jest to dokumentacja, która prawdopodobnie nie ma racji twierdząc, że zamówienie.
Bez urazy, ale czy to jest pytanie? –
[Przykład na stronie Mathworks] (http://www.mathworks.com/help/matlab/ref/perms.html) dziwnie robi to samo – Daniel
@ Benoit_11 Edytowałem to zgodnie z tym, co myślę, że OP jest próbuje zapytać. Siva, jeśli moja edycja nie odzwierciedla dokładnie twojego pytania, edytuj ponownie, aby wyjaśnić. – Daniel