7
p = perms([0:2]) 

p =błąd widoczne w trwałej ondulacji MATLAB za funkcjonować

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

This function ma wyświetlać permutacje wektora w odwrotnej kolejności leksykograficznym. Dlatego też spodziewałbym się, że ostatni wiersz tego wyjścia zawiera elementy: 0 1 2; zawiera jednak 0 2 1. Pozostałe wiersze są wyświetlane poprawnie.

Krótko mówiąc, kolejność ostatnich dwóch rzędów jest zamieniana. Co tu się dzieje?

+0

Bez urazy, ale czy to jest pytanie? –

+0

[Przykład na stronie Mathworks] (http://www.mathworks.com/help/matlab/ref/perms.html) dziwnie robi to samo – Daniel

+1

@ 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

Odpowiedz

9

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.

+0

Jeśli tak było, to w jaki sposób mogę uporządkować odpowiedzi w porządku leksykograficznym. –

+2

@Siva 'sortrows (p)' –

+1

@LuisMendo - Tym, co Siva naprawdę oznacza, jest dziękować Ci za bycie tak sumiennym w twoich wysiłkach i że on zaakceptuje twoją odpowiedź już niedługo w najbliższej przyszłości. – rayryeng

Powiązane problemy