2013-12-16 1 views
0

먼저 MATLAB의 절대 초보자입니다. 인접한 숫자를 교체하여 숫자 "n"의 모든 순열을 포함하는 행렬 "A"를 생성하는 과제를 받았습니다.스와핑 (MATLAB)을 통한 모든 순열 찾기

나는 이틀 동안이 붙어있다 이것은 내가 온 같은 대답에 가까운입니다 :

X=[1:n] 
A(1,:)=X; 
for j=0:n 
for i=n:-1:2 
    if X(i)==(n-j) 
      temp=X(i); 
      X(i)=X(i-1); 
      X(i-1)=temp; 
      A=[A; X]; 

    end 
    end 
end 
A 

이 N = 3 사용할 수 있습니다. 이 코드를 수정하기 위해 할 수있는 일이 있는지 또는 완전히 다른 것을 시도해야하는지 궁금합니다.

편집

이 방향의 몇 가지 개념을 가지고 두 번째 시도이다. 문제는이 스크립트가 오직 하나의 "추적"다음에 오는 것입니다. det (I (:, X))는 이전 순열이 홀수/짝수인지 그리고 정수가 오른쪽이나 왼쪽으로 바뀌어야하는지 알려줍니다. 나는 둘 다하고 싶다!

n=input('n: ') 
X=[1]; 
for i=2:n 
u=length(X); 
I = speye(u); 
if det(I(:,X))>0 
    X=[X i]; 
    X 
    X([i-1 i])=X([i i-1]); 
    X 
else 
    X=[i X]; 
    X 
    for j=1:i-1 
    X([j j+1])=X([j+1 j]); 
    X 
    end 
    end 
end 
+0

는, 정확히를 적어주세요 그리고 우리는 neccesary 경우를 구현하는 데 도움이 될 수 있습니다. –

+0

"인접 번호 교환"이란 무엇을 의미합니까? 작은 예제를 줄 수 있습니까? –

+0

나는 Steinhaus-Johnson-Trotter 알고리즘을 사용하기로되어 있는데, 스왑을 사용하는 것으로 알고있다. –

답변

0

기본적으로 제공하는 MATLAB의 장점을 활용하여 작업을 수행해야합니다. 여기

은 걸리는 전부입니다 : 특정 알고리즘을 사용하려면

P = perms(v) 
+0

인접한 번호를 바꿔서 어떻게 할 것인지 묻지 않았다면 –