먼저 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
는, 정확히를 적어주세요 그리고 우리는 neccesary 경우를 구현하는 데 도움이 될 수 있습니다. –
"인접 번호 교환"이란 무엇을 의미합니까? 작은 예제를 줄 수 있습니까? –
나는 Steinhaus-Johnson-Trotter 알고리즘을 사용하기로되어 있는데, 스왑을 사용하는 것으로 알고있다. –