2012-05-06 4 views
1

У меня есть строка, подобная этой «FBECGHD», и мне нужно использовать MATLAB и сгенерировать все необходимые возможные перестановки? В нем есть конкретная функция MATLAB, которая выполняет эту задачу, или я должен определить пользовательскую функцию MATLAB, которая выполняет эту задачу?MATLAB генерировать комбинацию из строки

ответ

5

Используйте функцию perms. Строка в MATLAB представляет собой список символов, поэтому он будет переставлять их:

A = 'FBECGHD'; 
perms(A) 

Вы также можете сохранить выход (например, P = perms(A)), и, если А является строка N символов, P является N! -by-N, где каждая строка соответствует перестановке.

Если вы заинтересованы в уникальных перестановок, вы можете использовать:

unique(perms(A), 'rows') 

удалить дубликаты (в противном случае что-то вроде «АВВ» даст 6 результатов, вместо 3, что можно было бы ожидать).

0

Как ответил Richante, P = perms(A) очень подходит для этого. Вы также можете заметить, что P имеет тип char, и это не удобно для подмножества/выбора отдельной перестановки. Ниже работал для меня:

str = 'FBECGHD'; 
A = perms(str); 
B = cellstr(reshape(A,7,[])'); 
C = unique(B); 

также, что unique(A, 'rows') не удаление повторяющихся значений:

>> A=[11, 11]; 
>> unique(A, 'rows') 
ans = 

    11 11 

Однако unique(A) бы:

>> unique(A) 

ans = 

    11 

Я не MATLAB про любой и я не исследовал это исчерпывающе, но по крайней мере в некоторых случаях кажется, что reshape не то, что вы хотите. Обратите внимание, что ниже приведены 999 и 191 как перестановки 199, что неверно. Функция Reshape как написано, как представляется, работать «по столбцам» на A:

>> str = '199'; 
A = perms(str); 
B = cellstr(reshape(A,3,[])'); 
C = unique(B); 
>> C 

C = 

    '191' 
    '199' 
    '911' 
    '919' 
    '999' 

Ниже не производит 999 или 191:

B = {}; 
index = 1; 
while true 
    try 
     substring = A(index,:); 
     B{index}=substring; 
     index = index + 1; 
    catch 
     break 
    end 
end 
C = unique(B) 

C = 

    '199' '919' '991' 
Смежные вопросы