각 측면 k가 롤링 할 때 p k 가 올 확률이 n 인로드 된 다이를 가지고 있다고 가정 하십시오. 이 정보를 정적으로 (즉, 고정 된 확률 세트) 저장하는 알고리즘이 좋은지 궁금해서 임의의 주사위 굴림을 효율적으로 시뮬레이션 할 수 있습니다.
현재이 문제에 대한 O (lg n) 솔루션이 있습니다. 아이디어는 모든 k에 대한 첫 번째 k면의 누적 확률 테이블을 저장하고 [0, 1) 범위의 난수를 생성하고 테이블에서 이진 검색을 수행하여 누적되는 가장 큰 인덱스를 얻는 것입니다. 값이 선택한 값보다 크지 않습니다. 나는이 솔루션을 좋아하지만 런타임이 확률을 고려하지 않는 것이 이상해 보입니다. 특히 한쪽이 항상 나타나거나 값이 균일하게 분포되는 극한의 경우 순진 접근 방식을 사용하여 O (1)의 롤 결과를 생성 할 수 있지만 내 솔루션은 여전히 많은 단계를 거쳐야합니다.
누구든지 런타임에서 어떻게 "적응"적인 방식 으로이 문제를 해결하는 방법에 대한 제안이 있습니까?
편집 :이 질문에 대한 답변을 바탕으로, 나는 이 문제에 대한 많은 접근 방식 과 그들의 분석 을 설명하는 기사를 작성했습니다 . Vose의 앨리어스 방법 구현은 Θ (n) 전처리 시간과 다이 롤당 O (1) 시간을 제공하는 것처럼 보입니다. 희망적으로 이것은 답변에 포함 된 정보에 유용한 추가 기능입니다!