교란 순열Permalink

교란 순열derangement 혹은 완전순열complete permutation

NN명의 사람들이 모자를 벗었다가 다시 쓰는데 자신이 썼던 모자가 아닌 다른 모자를 쓰는 경우의 수이다.

이 개념은 이런 재밌는 영상으로도 배워볼 수 있다.

이 글에서는 DnD_n이란 기호를 쓰도록 하자.

점화식Permalink

Dn={0  if  n=11  if  n=2(n1)(Dn1+Dn2)  otherwise D_n=\begin{cases} 0&~~\text{if}~~n=1 \\ 1&~~\text{if}~~n=2 \\ (n-1)(D_{n-1}+D_{n-2})& ~~ \text{otherwise} \end{cases}

따라서 O(N)O(N)에 구할 수 있다.

왜 위와 같은 점화식이 성립하는지 생각해보자.

n = 1

자신이 벗은 모자를 자신이 다시 쓸 수 없으므로 경우의 수는 00개이다.

n=2n=2

두 명이 벗은 모자를 서로 바꿔서 쓰는 경우의 수밖에 없으므로 11개이다.

otherwise\text{otherwise}

nn명중에 i  (1in)i~~(1 \le i \le n)번째 사람이 모자를 벗었다가 다시 쓴다고 하자.

그리고 다시 쓴 모자를 jj번째 사람이 썼던 모자라고 하자. (ij)(i \ne j)

jj번째 사람이 ii의 모자를 다시 집는다면,

iijj는 각각 모자를 바꿔서 썼으므로, 나머지 n2n-2 명의 사람에 대해서 경우의 수를 따져야 하므로 Dn2D_{n-2} 라는 수가 등장한다.

jj번째 사람이 ii의 모자를 집지 않는다고 하자.

그럼 jjii로 바꿔주어도 무방하다.

어차피 jjii를 집지 않기 때문이다.

따라서 nn명에서 ii번째 사람을 제외한 사람들끼리 교란순열을 구하는 것과 동일해지기 때문에 Dn1D_{n-1}란 수가 등장한다.

위 두 경우는 서로 독립적인 경우이므로 Dn2+Dn1D_{n-2}+D_{n-1}란 수가 등장한다.

처음에 ii는 아무 수나 기준으로 골라도 무방하고, jj를 고르는 경우의 수는 n1n-1이다.

(i,j)(i,j) 쌍이 나오고 ii는 총 n1n-1개의 jj로 쌍을 만들고 위 로직을 시행할 수 있기 때문이다.

이 수를 곱해서 결국

Dn=(n1)(Dn1+Dn2)D_n=(n-1)(D_{n-1}+D_{n-2}) 이다. \square

연습문제Permalink

BOJ 10978 - 기숙사 재배정

BOJ 1947 - 선물 전달

Comments