2010-06-03 3 views
0

나는 combinatorics 문제를 해결하기 위해 노력하고 있습니다, 그것은 쉬운 것처럼 보이지만, 나는 그것에 약간 문제가 있습니다.combinatorics 알고리즘

내가 X 테이블과 N 명이 테이블에 앉을 수 있다면 각 테이블은 1 ~ N 개의 좌석 공간을 가질 수 있으며 사각형 테이블의 한면에만 사람을 앉을 수 있습니다. 문제 해결).

1 개의 K 테이블까지 모든 좌석 배치를 계산할 수있는 코드를 만들고 싶습니다.

예를 들어, 내가 12 명과 테이블 1 개를 가지고 있다면 나는 479001600 명을 앉을 수 있습니다 (계산하기 쉽습니다. Factorial of 12를 사용했습니다).

그러나 12 명과 3 개의 테이블이 있다면 4390848000 명의 사람이 앉을 수 있습니다. 나는 다른 해결책을 시도했지만 올바른 것을 찾을 수 없었다.

나는 12를 3으로 나눈 다음, 결과의 계승을 사용했다. (그것은 작동하지 않았다.) 나는 12를 사용하려고 시도했다! * 3 (너무 효과가 없었습니다).

내가 사용할 수있는 알고리즘으로 팁을 줄 수 있습니까?

+1

계산 방법을 모르는 경우 "4390848000"대답이 올바른지 어떻게 알 수 있습니까? –

+0

2 케이스 테스트가 있기 때문에. – Peiska

답변

3

기사를 읽고 Lah Numbers에 대해 도움을 받아야합니다.

+0

감사합니다. 저는 Lah Numbers와 함께 해결할 수있었습니다. – Peiska

+0

@peiska : 천만에요. – Roman

2

4,390,848,000은 정답 (공석 계산시)이라고 생각하지 않습니다.

N 명을 N 명으로 구성하는 방법의 수는 N 명을 (N * X) 명으로 구성하는 것과 같습니다. 결과는 매우 분명합니다. (NX N × N!을 선택하십시오.)

  • NX 순열을 고려하지 않고 N 명을 NX 자리에 두는 방법의 수를 선택하십시오.
  • N! =이 N 명의 순열의 수.

[a b|_ _] [a _|b _] [a _|_ b] 
[_ a|b _] [_ a|_ b] [b a|_ _] 
[_ _|a b] [b _|a _] [_ b|a _] = 4 choose 2 * 2! = 12. 
[b _|_ a] [_ b|_ a] [_ _|b a] 

그러나 599,555,620984320000을 = ((36)는 12 × 12! 선택).

테이블이 동일하더라도 (3! = 6 요소 제거) 결과 99,925,936,830,720,000은 여전히 ​​4,390,848,000보다 훨씬 큽니다.