해당 글은 고등학교 2학년 수준의 수학적 지식(확률/등차수열의 합)을 필요로 합니다.

몹을 잡아서 템을 먹는 것을 간단하게 제비뽑기로 생각해보겠습니다. dpk방식은 기본적으로 제비가 n개(dpk-1)있고, 이 중에 당첨제비가 하나 있으며 하나씩 뽑아서 버리고 당첨제비가 나오면 나머지 제비를 모두 버리는 것과 같습니다.

먼저 k번째 제비에서 당첨될 확률을 구해보죠. k번째에 당첨될 확률은 k-1번째까지 전부 실패하면서 k번째에 성공해야합니다. 이를 수식으로 나타내면
n-1 n-2  n-3 n-4        n-k+1     1(당첨)
ㅡ * ㅡ * ㅡ * ㅡ * ... *   ㅡ   *   ㅡ
n    n-1 n-2 n-3        n-k+2   n-k+1
왼쪽의 분자와 오른쪽의 분모가 약분이 되는 것이 보이실겁니다.
결과적으로 남는 것은 k번째에 당첨확률은 1/n으로 'k에 관계 없이' 동일합니다.(아마 고등학교때 수학을 잘했던 분들이라면 고등학교때 이미 이것을 알고 있을 겁니다. '비복원 추출에서 k번째 당첨 확률은 k에 관계없이 1/n이다.' 라는 식으로요.)

위에까지 살펴본 바에 따르면 카운팅과 dpk의 수치는 동일해야할 것으로 보입니다. 하지만 dpk는 당첨제비가 나오면 '나머지 제비는 버리고 새로 제비를 만듭니다.'(혹은 전부 복원한다고 보시면 되실듯.) 만약 버리지 않는다면 dpk가 500일 때 기준으로 300에 떴다면 나머지 200에서는 '드랍을 전혀 기대할 수 없습니다.' 위 문제때문에 나머지를 다 버리고 새로 제비를 만들어야하는 것이죠.

카운팅의 경우, 제비 n개중에 당첨제비가 하나씩 균일하게 나온다고 보시면 됩니다.
하지만 dpk는 당첨제비가 하나씩 나올때마다 리셋해서 다시 뽑죠.

그럼 dpk방식에서 평균적으로 얼마나 버리는지를 알아보겠습니다.
1번째 제비에서 당첨됬을 때 버리는 양: n-1
2번째 제비에서 당첨됬을 때 버리는 양: n-2
3번째 제비에서 당첨됬을 때 버리는 양: n-3
....
n번째 제비에서 당첨됬을 때 버리는 양: 0
각각의 확률이 1/n으로 동일하다는 것을 위에서 알 수 있었습니다. 그래서 다 더해서 n으로 나눠준 것이 평균적으로 버리는 양이 됩니다. 등차 순열의 합을 이용해서 더해주면 n*(n-1)/2가되고, 이를 n으로 나눠주면 (n-1)/2가 됩니다.
즉, 평균적으로 (n+1)/2개의 제비당 하나씩 당첨제비가 섞여서 나오게 됩니다. n_d와 n_c로 카운팅 넘버와 dpk수치를 구분하여 당첨제비가 나올 제비수의 평균수치가 같도록 하려면
(n_d - 1)/2 = n_c
n_d = 2 * n_c +1

즉, dpk수치는 카운팅 넘버의 두배가 되야 '이론적으로' 같은 확률을 보장합니다.
제대로 구현을 했다면요.