1. Introduction
Symmetric group $S_n$의 원소, 즉, $[n]$ 상의 순열 가운데 fixed point가 없는 것들을 Derangement(교란 순열)이라고 부른다. 이제, 한 가지 예를 들어, $n$ 명의 학생이 있는 학급에서 마니또 행사를 한다고 가정해보자. 학생 $i$의 마니또가 $p_i$라 할 때, $p_i \neq i$ 여야 하며, $i \neq j$ 이면, $p_i \neq p_j$ 여야 할 것이다. 즉, ${p_i}$ 가 derangement 여야 한다. 또한, 학생 $i$는 $p_i$의 값 외에 다른 정보를 알지 않아야 한다.
이렇듯, 현실에는 각자 자신에게 배정된 수 외의 정보를 알 수 없는 상태에서 derangement를 랜덤하게 생성해야 하는 (암호학적인 상황을 포함하여) 상황이 존재한다. 본 글에서는 카드를 이용하여 랜덤한 교란 순열을 생성하는 알고리즘에 대해 소개할 것이다.
2. Protocol 1: using $O(n^2)$ cards
먼저, 가장 심플한 $n^2$ 개의 카드를 사용하는 프로토콜을 알아보자.
- 각 사람 마다 줄 빨간 1장, 검은 카드 $n-1$ 장을 준비한다.
- $i$ 번째 사람은 위에서 부터 $i$ 번째 카드가 빨간 카드가 되도록 세팅된 카드 꾸러미 $p_i$를 가지게 된다.
- 카드 더미들을 섞어서 나눠준다.
- 즉, 무작위로 뽑은 $\pi \in S_n$ 에 대해 $i$ 번째 사람에게 $p_{\pi(i)}$ 번 째 카드 꾸러미가 주어진다.
- 각 $i = 1, 2, 3 \cdots , n$ 에 대해 $i$ 번째 사람은 $p_{\pi(i)}$ 번째 카드를 공개한다.
- 공개된 카드들 가운데 빨간 카드가 없는 경우에는 $\pi$ 가 derangement라는 뜻이므로, 더 이상 할 일이 없다. (이 때, $i$ 번째 참가자가 알고 있는 정보는 $\pi$가 derangement라는 것과 $i \mapsto \pi(i)$ 라는 것 뿐이다.)
- 공개된 카드들 가운데 빨간 카드가 있는 경우에는, $\pi$ 에 fixed point가 있다는 뜻이므로, 위 과정들을 다시 반복한다.
이 경우에 프로토콜의 수행이 성공적인 결과를 낳을 확률은 $p = {D_n \over n!} \approx {1 \over e}$ 가 된다.
3. Protocol 2: using $O(n \log n)$ cards
섹션 2에서 살펴봤던 방법은 $\pi(i)$의 값을 나타내는데 $O(n)$ 의 공간을 사용했다. 이 섹션에서 살펴볼 방법은 $O(\log n)$ 만의 공간(카드)을 사용하게 된다.
여기에서는 하나의 비트를 표현하는데에 두 장의 카드를 사용하게 된다. 검은 카드 - 빨간 카드 순으로 놓이면 이것은 0을, 빨간 카드 - 검은 카드 순으로 놓으면 1을 의미하게 된다. 기본적으로는 섹션 2에서 소개한것과 비슷하지만, fixed point의 존재 여부를 확인하는 과정이 다르고, 다소 까다롭다.
일단, $\pi(i) - 1$ 의 이진전개는 $\pi(i) - 1 = a_{\log n}\cdots a_2 a_1$ 라 하고, $i - 1$의 이진 전개는 $b_{\log n}\cdots b_2 b_1$ 이라고 할 때, 우리가 판별하고자 하는 것을 비트 연산을 이용해 다음과 같이 적을 수 있다: $(a_1 \oplus \bar b_1) \land \cdots \land (a_{\log n} \oplus \bar b_{\log n})$
결국, 우리는 $\pi(i)$에 대해 추가적인 정보를 노출하지 않으면서 위 논리식의 값을 평가하면 되고, 이제 이를 위한 특별한 비트 연산 방식을 알아보자.
NEGATE
두 카드 $a, b$ 로 이루어진 비트를 negate 하기 위해서는 $b, a$ 순으로 순서를 바꿔주면 된다.
COPY
- 카드를 놓는 자리 6개를 일렬로 만들고, 1, 2, 3, 4, 5, 6으로 번호를 붙이자.
- 1, 2번 자리에는 복사하고 싶은 비트 $x$를 나타내는 카드 두 장을 놓는다.
- 3, 4, 5, 6번 자리에는 차례로 검정, 빨강, 검정, 빨강 카드를 놓는다. (즉, 0 2개 놓음)
- 1, 2, 3, 4, 5, 6번 자리에 있던 카드를 차례로 1, 4, 2, 5, 3, 6번 자리에 놓는다.
- 카드의 왼쪽 절반과 오른쪽 절반을 각자 따로 순서를 섞는다.
- 1, 2, 3, 4, 5 ,6번 자리에 있던 카드를 차례로 1, 3, 5, 2, 4, 6번 자리에 놓는다.
- 그러면, 차례로 놓인 3개의 비트가 어떤 비트 $r$에 대해 각각 $x \oplus r$, $r$, $r$ 가 된다.
- 맨 왼쪽 비트를 까보자.
- 0인 경우, 오른쪽 두 개의 비트가 $x, x$ 가 된다.
- 1인 경우, 오른쪽 두 개의 비트가 $\bar x, \bar x$ 가 된다.
AND
- 카드를 놓는 자리 8개를 일렬로 만들고 1, 2, 3, 4, 5, 6, 7, 8 순으로 번호를 붙이자.
- 왼쪽에서 부터 차례로 $a, 0, 0, b$ 를 나타내는 카드를 올리자. 우리가 구하고 싶은 것은 $a \land b$ 이다.
- 1, 2, 3, 4, 5, 6, 7, 8번 자리에 있던 카드를 차례로 1, 5, 2, 6, 3, 4, 7, 8번 자리에 놓는다.
- 카드의 왼쪽 절반과 오른쪽 절반을 각각 따로 순서를 섞는다.
- 1, 2, 3, 4, 5, 6, 7, 8번 자리에 있던 카드를 1, 3, 5, 6, 2, 4, 7, 8번 자리에 놓는다.
- 그러면, 왼쪽 두 비트는 차례로 $a\oplus r, r$ 가 된다. 오른쪽 두 비트는 $0, b$ 의 순서를 $r$번 뒤집은 상태가 된다.
- 맨 왼쪽 비트를 까보자.
- 0인 경우, $a = r$ 이 되므로, 왼쪽에서 두 번째 비트가 $a$, 세 번째 비트가 $a \land b$ 가 된다.
- 1인 경우, $a \neq r$ 이 되므로, 왼쪽에서 두 번째 비트가 $\bar a$, 네 번째 비트가 $a \land b$ 가 된다.
Checking Fixed Point
위의 연산들을 이용하면 이제 논리식 $(a_1 \oplus \bar b_1) \land \cdots \land (a_{\log n} \oplus \bar b_{\log n})$ 의 값을 평가할 수 있게 되고, 결국 총 $O(n \log n)$ 장의 카드만 사용해서 Derangement를 생성할 수 있었다.
References
- [1] R. Ishikawa et al. Efficient Card-based Protocols for Generating a Hidden Random Permutation without Fixed Points (2015)
'Computer Science > Algorithms & Problem Solving' 카테고리의 다른 글
2022-06-05 Problem Solving (0) | 2022.06.05 |
---|---|
2-SAT 및 그의 응용 (0) | 2021.09.30 |
2021-09-10 Problem Solving (0) | 2021.09.11 |
2021-08-27 Problem Solving (0) | 2021.08.27 |
2021-08-21 Problem Solving (0) | 2021.08.21 |