2017-12-20 33 views
2

크기 배열 N의 세로 배열의 패리티를 결정해야하는 Excel 시트에서 작업하고 있습니다. 배열에는 ~ N의 각 숫자가 각각 정확히 한 번 포함됩니다.Excel - 변환의 패리티 결정

이 문맥에서 패리티는 스크램블 된 배열을 정렬 된 배열로 변환하는 데 필요한 스왑의 수를 최소에서 최대로 정의합니다.

예를 들어, 배열 {3;1;2;4}{1;2;3;4}으로 변환하는 데 최소 두 번의 스왑이 필요하기 때문에 짝수 패리티를 갖지만 항상 짝수 개의 스왑이 필요합니다. 아래를 참조하십시오.

3 --> 1   1 
1 --> 3 --> 2 
2   2 --> 3 
4   4   4 

또 다른 예 : 그것은 (최소한) 세 스왑을 필요로 {1;2;3;4;5}로 변환하지만, 항상 스왑의 홀수를 필요로하기 때문에 {2;1;4;5;3}가 홀수 패리티가 있습니다. 아래를 참조하십시오.

2 --> 1   1   1 
1 --> 2   2   2 
4   4 --> 3   3 
5   5   5 --> 4 
3   3 --> 4 --> 5 

나는 홀수 패리티 어레이에 대한 짝수 패리티 및 FALSE와 배열에 대한 TRUE를 반환 할 수있는 솔루션을 찾고 있어요. (그리고 난 상관 없어 결과는 나는 그 사건을 처리 할 수있는 스프레드 시트에있는 다른 검사를해야하기 때문에 N에.까지의 모든 수를 포함하지 않는 배열을 위해 무엇을) 내가 알아 낸

몇 가지 도우미 열을 사용하는 솔루션이지만 느린 계산처럼 보입니다.

배열의 각 개별 번호가 올바른 색인에 있는지 확인하고 스왑을 수행하지 않는 경우 확인합니다. 그런 다음 발생한 스왑 금액을 합산하고 MOD(<swaps>,2)=0을 사용하여 짝수 패리티인지 확인합니다.

배열 {8;5;3;2;4;1;7;6}의 계산 예는 아래를 참조하십시오.

화이트 = 참조 배열 {1;2;3;4;5;6;7;8}

블루 = 입력 배열

회색 = "도우미"배열 :

enter image description here

나는 색상이 쉽게 무슨 일이 일어나고 있는지 알 수있는 세포를 코딩 한 각 연속 열은 필요한 경우 스왑을 수행합니다.

빨간색 = 스왑은 해당 열 발생, 0 경우 스왑 모든 녹색 세포

노란색 = 합계를 발생하지 않은 경우 WAP 효과적으로 많은 스왑이 발생하는 방법을 말하고, 이전 칼럼

녹색 = 1에서 발생했습니다.

이 예에서 노란색 셀은 짝수 인 4이므로 입력 배열은 짝수 패리티를가집니다.

질문 : VBA없이 Excel에서이 계산을보다 효율적으로 수행 할 수 있습니까? 필자는 헬퍼 칼럼을 반대하지는 않지만 다시 말해서 내 솔루션이 느린 것처럼 보이고 더 좋은 방법이 있는지 궁금합니다.

+0

이 문제는 그 수식이 변경 사항을 저장하지 않는다면, 헬퍼 칼럼 메소드가없는 방법이 있다는 것을 나는 의심한다. –

+0

@ScottCraner이 방법을 사용하면 동의합니다. 내 질문은 만약 내가 알지 못했던 이것을 계산하는 수학적인 "속임수"가 있다면 말이다. – ImaginaryHuman072889

+0

그러면 아마도 https://math.stackexchange.com/에서 더 나을 것입니다. –

답변

3

도우미 열이 없어도 이렇게 할 수 있다고 생각합니다.

먼저, N 도우미 열을 사용하는 방법을 보여주고 대신 배열 수식을 사용하는 방법을 보여 드리겠습니다. 매트릭스 쇼 아래 고려 :

Matrix

녹색 범위는 인덱스이고 파란색 범위는 당신의 순열이다. 노란색 매트릭스는 수식 상자에 표시된대로 permutation matrix입니다.

순열의 수는이 행렬의 행렬식의 값과 같습니다!

운 좋게도 Excel에는 행렬식이 내장되어 있습니다. MDETERM(). 더 순열은 패리티 (1)을 가지고 있으며, 홀수 순열 패리티 -1을 가지고, 그래서 당신은 공식을 단순히 결정을 얻을 수 있습니다

=MDETERM(C2:J9) 

지금 이것은 정말 멋진,하지만 진짜 키커는 우리가 심지어 필요가 없다는 것입니다 그 행렬을 만드십시오. 다음과 같이 배열 수식으로 구성 할 수 있습니다.

{=MDETERM(IF(B2:B9=TRANSPOSE(A2:A9),1,0))} 

여기에서는 열 A와 B 만 사용합니다! 열 C : J는이 버전에서 사용되지 않습니다.

(Ctrl + Shift를 사용 +.이 수식 주위에 괄호를 감싸을 검증하기 위해 입력해야합니다 있도록이 배열 수식이 있습니다. 수동으로 작업을 수행하지 마십시오.)

+1

내가 말할 수있는 것은 다음과 같다 : * 열정! * 행렬의 행렬식이 패리티를 결정한다는 것을 알지 못했다. 부수적으로,이 경우에는'A' 행이 전혀 필요하지 않으므로이 수식을 도우미 열이 없으면 전적으로 수행 할 수 있습니다. A2 : A9를 ROW (B2 : B9) -ROW (B2) + 1 또는 ROW (B2 : B9) -MIN (ROW (B2 : B9)) +1로 바꾸십시오. 도와 줘서 고마워. 나는 직업을 덜 고통스럽게 끝내기 위해 수학적인 트릭이 있다고 생각했다. – ImaginaryHuman072889

+0

@ ImaginaryHuman072889 이것이 사실 인 이유는 행렬에 적용된 모든 행 또는 열 스왑이 항등 행렬 (ID 순열)에서 시작하여 행렬식의 부호를 변경하기 때문입니다. https://math.stackexchange.com/questions/221668/determinant-of-permutation-matrix –

+0

다시 한번 감사드립니다. 이것은 유용한 정보이며이 문제에 대한 우아한 해결책을 발견했습니다. – ImaginaryHuman072889