2012-05-06 5 views
1

"FBECGHD"와 같은 문자열이 있는데 MATLAB을 사용하고 필요한 모든 순열을 생성해야합니까? 거기에이 작업을 수행하는 특정 MATLAB 함수 또는이 작업을 수행하는 사용자 정의 MATLAB 함수를 정의해야합니까?MATLAB은 문자열에서 조합을 생성합니다.

답변

5

perms 기능을 사용하십시오. A는 N-문자열 인 경우, P는 N이고,

A = 'FBECGHD'; 
perms(A) 

또한 출력 (예 : P = perms(A))를 저장할 수 있으며, : MATLAB에있는 문자열은 문자의 목록입니다, 그래서 그들을 뒤 바꿔드립니다! 각 행은 순열에 해당하는 -by-N 배열입니다. 당신은 고유의 순열에 관심이 있다면

, 당신은 사용할 수 있습니다

unique(perms(A), 'rows') 

가 (대신 당신이 예상 3의 6 개 결과를 줄 것이다 'ABB'와 같은 다른 뭔가를) 중복을 제거 할 수 있습니다.

0

리차드가 대답 한대로 P = perms(A)이 매우 편리합니다. Pchar 유형이며 개별 순열을 부분 집합/선택하는 것은 편리하지 않습니다. 나를 위해 일한 아래 : unique(A)는 것이다 그러나

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

    11 11 

: 내가 어떤하여 MATLAB 프로 아닙니다

>> unique(A) 

ans = 

    11 

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

을 또한 unique(A, 'rows') 중복 값을 제거하지 않은 것 같습니다 의미와 나는 이것을 철저히 조사하지는 않았지만 최소한 어떤 경우에는 reshape이 당신이 원하는 것이 아닌 것처럼 보입니다. 아래에 999191199의 순열이 아니므로 이는 사실이 아닙니다. 작성된 모양 변경 기능은 "열이 많다는"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' 
관련 문제