2017-05-10 1 views
0

나는 게임과 같은 작은 응용 프로그램을 개발 중이며, 이전에 해본 적이 있지만 올바른 방법인지는 확실하지 않습니다. 내가 필요한 것은 몇 가지 이벤트의 백분위 기회입니다. 예를 들어 10 %의 확률로 아이템을 얻는 것입니다.프로그래밍 방식으로 이벤트 백분율 기회를 효율적으로 처리하는 방법

숫자가 < = 10이면 서버 측에서 난수 생성기를 사용할 때마다 사용자가 보상을 얻지 만 모든 사용자 환경에서 10 % 기준을 만족하지 못합니다.

나는 서버 측에 사용자의 차례 번호를 기록하고 매번 항목에 보상을 주겠다고 생각했지만 올바른 방법인지는 모르겠다. 나는 그것을하고 제안을하는 당신의 아이디어에 대해 알고 싶습니다. 또한 stackoverflow가 stackexchange 그룹의 다른 커뮤니티 나 커뮤니티에 게시 할 수 있는지 여부를 알 수 없습니다. 그렇다면 의견에 저를 안내해주십시오. 적절한 커뮤니티에서 질문을 이동하겠습니다. 감사.

답변

4

질문에서 언급 한 것과 완전히 다른 두 가지 사항이 있습니다. 주어진 알고리즘이 둘 다 할 수 없기 때문에 원하는 것을 결정해야합니다.

  1. 시도 할 때마다 10 %의 확률이 있습니다. 두 번 연속으로 맞은 다음 200 회 시도에 맞지 않을 수도 있습니다. 그러나 장기적으로 볼 때, 그것은 10 %의 시간을 치고 있습니다.

  2. 10 회 시도 할 때마다 한 번만, 결코 더 많이, 결코 적게는 안된다는 것을 보장합니다.

위의 첫 번째 것은 적절한 난수 픽업 및 비교를 사용하면됩니다. 그러나 예상보다 많은 히트와 예상보다 적은 안타를 얻을 수 있습니다. 시간이 지나면 평균 히트 수가 10 %가됩니다.

function getRandomTenPercentOutcome() { 
    return Math.random() < 0.1; 
} 

두 번째 것은 최근 이벤트를 추적하는 임의 생성기를 결합한보다 복잡한 구현이 필요합니다. 보장 된 1 in 10 히트를 구현하는 가장 간단한 방법은 서버가 0으로 채워진 것을 만들고 배열에서 하나의 셀을 무작위로 선택하여 1로 변경하는 것입니다.

그런 다음 무작위로 선택해야하므로 결과, 당신은 .shift() 배열의 첫 번째 항목을 끄고 그 값을 사용하십시오. 배열이 비어지면 새 배열을 만듭니다. 이것은 처음부터 시작하여 10 개의 결과 중 1 개를 정확히 강요합니다. 주어진 10 개의 결과는 새 배열을 만드는 경계를 넘을 때 2 또는 0이 될 수 있지만 그 이상은 될 수 없습니다.

배열을 시스템 전체 (모든 사용자에 대해 하나의 배열) 또는 사용자별로 (각 사용자마다 고유 한 결과 배열이 있음) 만들 수 있습니다. 각 사용자가 개인적으로 1 : 10에 매우 가깝게 인식되도록하려면 각 사용자에 대해 별도의 결과 배열을 만들어야합니다.

배열의 길이를 조정하여 허용 할 분산을 제어 할 수 있습니다. 예를 들어 배열 50을 길게 만들고 배열에서 5 개의 셀을 임의로 선택할 수 있습니다. 즉하지만 여전히 두 가지 방법이 장기적으로 10 %의 평균 것 (50)


내에서 5 안타를 강제, 50 내에서 더 다양성을 허용합니다. 첫 번째 간격은 주어진 간격에서 10 %보다 큰 편차가있을 수 있지만 훨씬 더 무작위입니다. 두 번째는 10 %에서 훨씬 더 작은 편차를 가지지 만 일부는 덜 무작위라고합니다 (반드시 나쁜 것은 아니며 목표에 따라 다름). 둘 다 "공평"합니다.

나는 내 아들의 게임을 통해 일련의 무작위 사건으로 인해 종종 예상되는 결과 내에 조그마한 상황이 발생하더라도 상황이 좋지 않을 때 "불공평하다"고 인식합니다. 그래서 때로는 진정으로 무작위 적으로 때때로 때때로 산발적 인 특성 때문에 참가자에게 공평하지 않은 것처럼 보일 수도 있습니다.

+0

정말 좋은 배열 방법, 좋은 생각이 좋아. –

3

이 질문은 다른 stackoverflow 페이지에서 여러 언어를 묻는 것 같습니다.

여기 예를 들어이 자바를위한 것입니다 몇 가지 아이디어에 대한 링크 밖으로 Java: do something x percent of the time

확인하지만 결국 큰 샘플을 주어진 시간의 10 % 경향이 기억, 당신은 즉시 10 %를 예상하지 못할 전화 몇 번.

매 시간마다 항목에 보람을 느끼는 것은 방법이 아닙니다.

+0

정답입니다. 10 %는 평균값이며 보증 치가 아닙니다. – DeepS1X

+0

비록 각 사용자에 대해 10 %를 계산하고 100 명의 사용자를 고려한다면 기회가 낮아질 것이라는 점을 내 계산에 따르면 방향에 대해 고마워 할 것입니다 (내가 잘 할 수는 없습니다). –

+0

사용자가 100 명이면 상금을 확인하는 횟수를 늘릴 수 있지만 상금을받을 확률은 여전히 ​​10 %입니다. 예를 들어, 한 명에게 동전을 던지고 상금을 주면 사용자가 50 %의 확률로 상금을 받겠다는 예를 들어, 실시간으로 예를 들어 설명하면 100 명이 있고 각자에게 동전을 뒤집어서 머리를 쓰면 각자 50 %의 확률을 보일 것입니다. 유일한 차이점은 더 많은 동전이 뒤집혀지고 더 많은 총상이 수여되는 것입니다.하지만 여전히 승리 할 확률은 50 %입니다. 각 – brakon

관련 문제