2013-05-25 2 views
1

나는 15 조각 슬라이딩 퍼즐의 구현을 위해 노력하고 있는데, 필자는 "해결할 수있는 순열 (permutations)"로만 섞어 야한다는 것을 분명히해야했다. 내 오른쪽 하단의 빈 타일 : 균일 순열.패리티가 짝수 또는 홀수인지 실제로 계산하는 방법은 무엇입니까?

How can I ensure that when I shuffle my puzzle I still end up with an even permutation?과 같은 유사한 스레드를 많이 읽었으며 "순열에서 역수의 수를 계산하십시오"라고 이해해야합니다.

나는 자바 스크립트 작성, 내 번호를 랜덤 피셔 - 예이츠 알고리즘을 사용하고 있습니다 :

var allNrs = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]; 
for (var i = allNrs.length - 1; i > 0; i--) { 
    var j = Math.floor(Math.random() * (i + 1)); 
    var temp1 = allNrs[i]; 
    var temp2 = allNrs[j]; 
    allNrs[i] = temp2; 
    allNrs[j] = temp1; 
} 

어떻게 실제로 나는 많은 게시물에 대해 읽고이 치환 또는 패리티 값을 caculate합니까?

+0

이것은 프로그래밍 문제보다 수학 (대수/그룹 이론) 문제 일 가능성이 큽니다. – djechlin

+0

자바 스크립트의 특정 구현보다 알고리즘에 관한 것이 많기 때문에 http://programmers.stackexchange.com/에 더 적합 할 수 있습니다. – depa

답변

2

스왑의 수를 계산하십시오. 스왑의 수가 짝수이면 순열은 균등 패리티를 갖는다.

예를 들어, 이들은 3 개의 숫자에 대한 짝수 순열입니다. 당신이 [1,2,3]에서 그들에게 얻을 0 또는 2 스왑이 필요합니다 :

1,2,3 
2,3,1 
3,1,2 
+0

글쎄, 내 코드는 매번 14 번 스왑을 만듭니다. 그렇다면 동등 함을 의미할까요? 하지만 셔플 중 일부에서 샘 로이드 시나리오 (14와 15 만 바꿔 치기)에 도달 할 수 있습니다. 이는 해결할 수 없음을 의미합니다. 내가 여기서 무엇을 놓치고 있니? – trem

+1

시나리오 중 일부가 자신과 숫자를 바꾸지 않았습니까? 어쩌면 당신은 random을'i + 1 '대신'i'로 곱해야합니다. –

+0

아주 잘 잡습니다. – djechlin

0

당신이 두 숫자의 각 스왑 패리티를 뒤집습니다. 짝수 개가 있다면 넌 좋다. 홀수 인 경우 그렇지 않습니다.

이것은 본질적으로 패리티가 의미하는 것이며 동일한 셔플에 도달하는 두 가지 방법이 동일한 패리티를 갖는 것은 그룹 이론의 (단순한) 정리입니다.