수학 문제, 최대 중복 갯수가 제한된 중복 순열이랄까..
안녕하세요?
우연히 본 문제를 가지고 며칠째 틈날때마다 머리를 굴려보는데 잘 안 되어서...;
여쭤볼 곳을 찾다가 KLDP 생각이 나서 왔습니다 ^^;
문제는 다음과 같습니다.
1) 공(똑같이 생겨서 구분할 수 없는)이 6개 있고
2) 그 공을 넣을 자리가 6곳 있고(A,B,C,D,E,F 라 하죠)
3) 각 자리에는 최대 3개까지 공을 넣을 수 있음
즉 다음과 같은 경우들이 나올 텐데..
A B C D E F 3 3 0 0 0 0 3 2 1 0 0 0 0 0 0 0 3 3 1 1 1 1 1 1 ...
이때 경우의 수를 간단한 공식으로 구할 수 있는가 해서요.
만일 3)번 최대 3개라는 제한이 없다면, 이것은 A,B,...,F 6개 원소를 가지고 중복을 허용해서 6자리 조합을 만드는 중복 조합 문제가 됩니다. 6H6 = 11C6 = 462가지
그런데 저 제한이 있다면 이렇게 간단하게 (예를 들어 aCb * cCd 라는 형태로 공식이 나온다거나) 할 수 있을까 모르겠거든요.
일단 제가 생각할 수 있던 풀이는, 한 자리에 들어가는 공의 갯수에 따라 경우를 나누어서 각각 계산한 후 합치는 겁니다.
1) 3개 3개 : 6자리 중에 2자리 선택해서 넣으면 되니까 6C2 = 15
2) 3-2-1 : 6자리 중에 1자리 선택해서 3개, 남은 5자리 중 1자리 선택해서 2개, 남은 4자리 중 1자리 선택해서 1개 = 6C1 * 5C1 * 4C1 = 120
3) 3-1-1-1 : (이하 계산 생략) 60
4) 2-2-2 : 20
5) 2-2-1-1 : 90
6) 2-1-1-1-1 : 30
7) 1-1-1-1-1-1 : 1
다 합하면 336이고, 검증해보면 이게 정답이긴 합니다.
그렇지만 만일 공이 80개, 자리가 70곳, 최대 갯수가 30개, 이런 식이면 이렇게 일일이 경우를 나누는 것조차 만만치 않을 텐데요.
저렇게 경우를 나누어 다루지 않고 처음 조건만 가지고 쉽게 풀 수 없을까요? 구글에서 중복 조합 쪽으로 검색을 해서 예제를 봐도 이렇게 최댓값 제한이 있는 경우를 검색하자니 쉽지 않네요.
P.S.
위에 언급한 중복조합의 462가지에서, 한 자리에 4개 이상 들어가는 경우를 계산해서 빼는 것도 있겠습니다. 그런데 이것도 결국
1) 4-2
2) 4-1-1
3) 5-1
4) 6
이렇게 경우를 나누어 계산한다면 결국 마찬가지로 불편한(?) 풀이겠네요.
알고리즘
점화식을 사용해 풀이가 가능합니다.
공의 갯수를 p, 자리 수를 q, 최대 갯수는 r이라고 할 때 경우의 수를 f(p, q, r)이라고 합니다.
이 때, f(p, q, r)은 (임의의 한 자리에 공을 k개 넣는 경우) * (남은 q - 1자리에 p - k개의 공을 분배하는 경우)의 합 같습니다. 즉,
f(p, q, r) = SUM of f(p - k, q - 1, r)
와 같이 표현이 가능합니다. (여기서 k는 0 이상 MIN(r, p)입니다. 한 자리에 최소 공 0개에서 최대 공 MIN(r, p)개 만큼 넣어 둘 수 있으므로..)
초기값 f(x, 1, r) = (x > r ? 0 : 1) 을 대입한 뒤 위 점화식을 시행하면 시간복잡도 O(pq)만에 문제를 해결할 수 있습니다.
어... 점화식이라, 아주 오래간만에 듣는 용어로군요
어... 점화식이라, 아주 오래간만에 듣는 용어로군요 ^^;
그런데 말씀하신 내용을 종이와 펜으로 하려면... 제가 본문에 적은 풀이보다 결코 간단해질 것 같지 않은데요 ^^a 프로그램으로 만들기에는 유용하겠습니다만. 제가 궁금한 건 본문에도 적었듯이 문제로부터 바로 만들어지는 공식이 있나 하는 거라서요. "5명의 사람 중에 3명을 뽑는 경우의 수?" 하면 바로 "5C3" 이 나오는 것처럼.
좋은 하루 되세요!
nonlinear
흠... 말장난을 조금 하자면, 'f(p, q, r)'이든 '5C3'이든 둘 다 '어떤 수식의 표기법'일 뿐이니 '5C3과 같은 공식으로 표현할 수 있을까?' 라고 질문하신다면 저는 'f(p, q, r)이 그것이다'라고 답하겠습니다 ㅎㅎ
점화식에서 MIN() 함수와 같은 함수가 들어가 있으니 아마 오직 하나로 된 완성된 식으로는 표현이 불가능 할 것 같습니다. p > r일때와 p <= r일 때로 나누어 써야겠군요. p <= r일 경우엔 중복순열과 같으니 qHp와 같지만 p > r일 경우엔 님이 원하는 꼴을 얻지 못할 듯 합니다.
양자통계역학에서 푸는 문제와 유사하네요
양자통계역학에서 푸는 문제와 유사하네요
피할 수 있을때 즐겨라! http://melotopia.net/b
그럼 거기서 어떻게 푸는지도 좀... ^^;
그럼 거기서 어떻게 푸는지도 좀... ^^;
좋은 하루 되세요!
거기선 분배함수를 놓고 미분해서 풀거든요. 각 방을
거기선 분배함수를 놓고 미분해서 풀거든요. 각 방을 에너지 준위와 그 안에 허용된 수, 공을 어떤 입자로 생각한다면 똑같은 문제가 됩니다. 그런데, 대체로 에너지 준위 하나에는 0개나 1개가 허용되는 경우(페르미 통계)와 무제한으로 허용되는 경우(보즈 통계)가 있어서, 0개나 1개나 2개나 3개가 허용되는 경우는 안 풀죠...-_-
이런 의미에서 "유사"하다고 한 겁니다.
고전통계역학도 있긴 한데, 거기서는 에너지 준위에 무제한으로 넣을 수 있으면서 공들을 다 구별 가능한 상황이기 때문에 해당이 안됩니다.
피할 수 있을때 즐겨라! http://melotopia.net/b
으음 미분이라니;;; 사실 처음 글을 적을 때는
으음 미분이라니;;;
사실 처음 글을 적을 때는 "수능 앞둔 고등학생들은 쉽게 풀 문제가 아니려나"하면서 올린 건데,
(순열,조합 이런 거 만져본지 워낙 오래되어서 제가 기억을 못 하는 거라고 생각을..)
3)의 제한이 붙는 순간 이게 간단한 게 아닌가봐요...
본문의 풀이가 그나마 쉽게 푸는 최선의 방법인 건지 확인이라도 할 수 있으면 맘이 편하겠는데 말이죠ㅋ
좋은 하루 되세요!
http://en.wikipedia.org/wiki/
http://en.wikipedia.org/wiki/Fermi%E2%80%93Dirac_statistics
해서, 여기 나온 방법을 살짝 응용하면 될 것 같기도 하구요...
피할 수 있을때 즐겨라! http://melotopia.net/b
검색하니까
검색하니까 나오네요 (검색어는 limited combination with repetition)
http://www.ceid.upatras.gr/courses/probweb/lectures/lecture16.ps
1.7절에 있습니다.
쉽게 설명하자면
일단 6개를 6칸에 넣는 방법의 수는 6H6 = 462가지 맞죠
그중, 3개를 넘지 않는 방법의 수는, 462에서 4개를 넘은 방법의 수를 빼면 됩니다.
4개를 넘은 방법의 수는, 가령 A에 4개가 넘었다고 하면, 일단 4개는 들어 있고 나머지 2개가 6칸에 포함된 경우의 수를 알 수 있죠
6H2 = 21
그런데 어느칸이든 4개가 넘을 수 있으므로 그런게 6가지 경우가 있습니다 21x6=126
462 - 126 = 336
저 강의노트는 꽤 재미있는 내용이 담겨있으니까 한번 읽어보세요
피할 수 있을때 즐겨라! http://melotopia.net/b