2

그래서 저는 여가 시간에 문제를 해결하기 위해 노력하고 있습니다. 여기 내가있는 곳이야. 나는 숫자 40을 가지고있다. 그것은 선수들을 나타낸다. 저는 다른 숫자 39, 38, ... 10을 받았습니다. 이것은 처음 30 명의 선수 (1-30)의 점수를 나타냅니다. 나머지 선수 (31-40)는 알 수없는 점수를 가지고 있습니다. 내가 뭘하고 싶은지는 점수의 조합이 주어진 데이터와 얼마나 일치 하는지를 찾는 것입니다.데이터와 일치하는 점수의 가능한 모든 조합을 찾으십시오.

간단한 예를 들어 : 3 명이 있다면. 점수의 가능한 조합 수는 3 (0,2; 2,0; 1,1)이며, 여기서 (a, b)는 플레이어 1과 플레이어 2의 승 수를 나타냅니다. 로 나타났다. 어떤 사람도 3 승을 할 수 없으므로 (3,0)의 조합은 작동하지 않습니다. 우리가 총 3 번의 승리가 필요하기 때문에 (0,0)도 작동하지 않을 것입니다 (그리고 0,0으로 얻지 못할 것입니다).

가능한 총 게임 수를 찾았습니다. 총 게임 수입니다. 즉 총 승리 수입니다. (넥타이가 없습니다.) 마지막으로, 플레이어 당 최대 승리 변수가 있습니다 (총 플레이어 수보다 1이 작습니다. 플레이어는 그 이상을 가질 수 없습니다.)

N 개의 승리를 각 플레이어에게 퍼뜨린 다음 조건에 맞지 않는 조합을 빼서 고유 조합 수를 계산합니다. 예를 들어, 각 사람에게 4 번을 넘지 않고 5 명에게 10 번의 승리를주는 여러 가지 방법을 알아 내려면 다음을 사용하십시오. C (14,4) -C (5,1) * C (9,4) + C (5,2) * C (4,4) = 381. C (14,4)는 공식 C (n + k-1, k-1) (google 막대 및 스트립)에서 유래합니다. 다음은 5 (허용되지 않음)를 가진 것들을 집어 내고, 우리가 두 번 빼낸 것들을 더합니다.

그래, 더 쉬운 방법이있을거야. 마지막으로, 숫자가 너무 커서 컴퓨터가 적절하게 처리 할 수 ​​있는지 확신 할 수 없습니다. 우리는 C (780, 39)에 대해 이야기하고 있는데, 이는 1.15495183 × 10^66입니다. 그럼에도 불구하고, 이것을하는 더 좋은 방법이 있어야합니다.

요약하면 40 명입니다. 처음 30 명의 사람들의 점수는 10 - 39입니다. 마지막 10 명의 사람들은 점수가 알려져 있지 않습니다. 기준을 충족시키는 점수를 몇 개나 생성 할 수 있습니까? 모든 점수가 가능한 총 승리에 합산되며 각 플레이어는 39 점을 더 얻지 않습니다.

생각하십니까?

+1

좀 더 구체적으로 작성하십시오. 10에서 40까지의 숫자가 실제 점수를 나타 냅니까? "주어진 데이터와 얼마나 많은 순열이 일치 하는가"는 의미는 무엇입니까? 또한, 승리와 손실은 어떻게 관련되어 있습니까? 작동하지 않는 순열의 예를 들려 주시겠습니까? 컴퓨터는 놀라 울 정도로 많은 수를 처리 할 수 ​​있습니다. 잠재적 인 데이터 유형 범위 (long, double 등)를보십시오. 간단한 순열을 계산하려면 factorials를 사용하십시오. http://www.mathsisfun.com/combinatorics/combinations-permutations.html – collinjsimpson

답변

2

생성 기능 :

문제는 수학에 대한 자세한이지만, 여전히 프로그래밍 QA 사이트 때문에, 내가 당신에게 티카의 단풍 나무와 같은 상징적 인 대수학 (사용이 많은 문제를 위해 작동하는 부분적인 해결책을 제공 할 수). 나는 당신이 intro combinatorics book을 움켜 쥘 것을 강력 추천한다. 이런 종류의 질문은 거기에 응답된다.

먼저 10-39 점 (총점 735 점)의 첫 30 명의 플레이어가 빨간색 청어입니다. 다른 문제를 해결하고 싶습니다. 나머지 10 명 점수는 (0 ... 39) 범위 일 수 있습니다.

우리가 다항식으로 플레이어의 가능한 점수의 생각하는 경우 :

f(x) = x^0 + x^1 + x^2 + ... x^39 

X^2의 값이 예를 들어 2의 점수이며,이

f(x)^10  
모양을 고려

이것은 10 명의 모든 선수의 종합 점수를 나타냅니다. x^385의 계수는 2002 년이며, 이는 10 명의 선수가 385 점을 획득 할 수있는 2002 가지 방법이 있음을 나타냅니다. Wolfram Alpha (프로그래밍 언어 IMO) can evaluate this for us.

당신은 방금 39^10은없는 일 8,140406085191601을주는 표현에 x=1에서 대체 어떻게이 일을 가능한 방법 많은 알고 (놀랄!)

왜이 유용하고 싶은 경우 ?

서류상에서 해결할 수있는 간단한 문제에 대해 모든 기계를 설정하는 것이 어리석은 일임을 알고 있습니다. generating functions의 접근법은 문제가 지저분 해지고 (점근 분석이 가능할 때) 유용합니다. 동일한 문제를 고려해 보겠습니다.하지만 이제는 소수점 (2,3,5,7,11, ...) 만 채점하도록 선수를 제한합니다. 그들 중 10 명이 특정 수의 점수를 매길 수있는 방법은 여러 가지가 있습니다 (예 : 344).

f(x) = x^2 + x^3 + x^5 + x^7 + x^11 ... 

을하고이 과정을 반복 : 그냥 f(x) 수정! (I get[x^344]f(x)^10 = 1390).

+0

그리고 저는 클래스 외부에서 함수를 생성하는 것을 결코 볼 수 없다고 생각했습니다 ... –

+0

@Hooked A Couple 질문 : (1) 만일 있다면, 소개 조합 서적은 자습을 권하고 싶습니다. (2) 나는이 문장에서 '이것'이 무엇인지에 대해 약간 혼란스러워한다 - 이것을 할 수있는 방법이 여러 가지인지 알고 싶다면 x = 1 ... 대신에 – user678392

+0

@ (3) 나는이 문장이 의미하는 것을 이해하지 못한다. 이것은 10 명의 모든 선수의 종합 점수를 나타낸다. 즉, x^385의 계수는 2002 년이다. 이것은 10 명의 선수가 점수를 매기는 2002 년 방법을 나타내는 것이다. 385. " (4) 385 번을 왜 골랐습니까? – user678392

관련 문제