7
p = perms([0:2]) 

p =errore apparente nella permanenti di Matlab funzionare

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

This function dovrebbe visualizzare le permutazioni di un vettore in ordine lessicografico inverso. Quindi, mi aspetto che l'ultima riga di questa uscita contenga gli elementi 0 1 2; tuttavia, contiene 0 2 1. Le altre righe sono visualizzate correttamente.

In breve, l'ordine delle ultime due righe viene scambiato. Che cosa sta succedendo qui?

+0

Nessun reato ma è una domanda? –

+0

L'[esempio sul sito Web di Mathworks] (http://www.mathworks.com/help/matlab/ref/perms.html) fa stranamente la stessa cosa – Daniel

+1

@ Benoit_11 L'ho modificato in base a ciò che penso che l'OP sia cercando di chiedere. Siva, se la mia modifica non rispecchia accuratamente la tua domanda, ti preghiamo di modificare di nuovo per chiarire. – Daniel

risposta

9

Sì, questo sembra essere un bug. Buona pesca! Ma probabilmente un bug nel documentation, piuttosto che nella funzione.

Se si digita open perms per vedere il codice sorgente, vedrete la seguente descrizione nelle prime righe:

%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 cui non si fa riferimento per invertire ordine lessicografico.

Il lavoro effettivo viene eseguito dalla funzione locale ricorsiva permsr. Se si guarda al suo codice, non è evidente a prima come funziona (come al solito con la ricorsione), ma la linea

t(t == i) = n 

dà un indizio che nessun ordine particolare è ricercato nel risultato.

Se si tenta un vettore più grande vedrete discrepanze di ordine lessicografico inverso in più righe:

>> 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 
    ... 

In sintesi, la funzione sembra essere stato progettato senza riguardo a qualsiasi ordine. È la documentazione che probabilmente ha torto nel rivendicare quell'ordine.

+0

Se così fosse, allora come posso ordinare le risposte in ordine lessicografico. –

+2

@Siva 'sortrows (p)' –

+1

@LuisMendo - Ciò che Siva intende davvero è ringraziarti per essere così diligente nei tuoi sforzi e che accetterà la tua risposta molto presto nel prossimo futuro. – rayryeng

Problemi correlati