문제

나를 구현하 룰렛,선택과 유지하는 가능한 한 많은 코드를 SQL.내 시가 나왔고 쿼리 아래.$1 는 임의 변수를 동일한 범위의 무게 보낼 SQL 코드(그것은 명확하지 않을 만드는 방법 random()호출을 한 번만).량은 크기의 행의 슬롯에 있습니다.random()은 SQLITE 를 반환하는 함수를 무료로 액세스 할 수 있습니다.여기에서 쿼리를 전체:

SELECT id
FROM items
WHERE weight >= $1
ORDER BY random()
LIMIT 1

나의 질문은 이것은 여전히 룰렛?기본 알고리즘을 필요로 합계의 모든 무게를 임의의 값의 범위 0..합--이를 확인하는 것이는 행의 선택되었습니다.신이 먼저 일상적인 필터는 모든 행이 만나 하나의 난수를,그 후에 스크램블의 순서와 줍니다.

하나는 미묘한 변화가 사용하는$1 대신 두 번째 호출 random().이 만들 수 있습니다 더 공정하게,하지만 나는 특정하지 않은 것은--그것이 의미하는 것은 각 행에 주어졌다 그것의 자신의 기회를 필터링하거나지 않습니다.

그래서 나는 나는 이 얼마나 거울 룰렛 때문에,그것은 분명히 다음과 같이 서로 다른 단계가 있습니다.하지만 그것은 거울 결과는?

도움이 되었습니까?

해결책

하나는 일은 내가 단지에 대한 생각입니는 이것이 룰렛 이 때문에 단순한 증거에 의해 예제:

는 경우에 당신은 세 가지 항목의 각 무게 한 다음,룰렛을 선택할 것이 그들과 함께 1/6 일,2/6ths3/6ths 확률입니다.그러나 나의 일상적인 것 바이어스 더 높은 무게:

Filter, A  ,   B,   C
  1   , 1/3, 1/3, 1/3
  2   , 0  , 1/2, 1/2
  3   , 0  , 0  , 1

위 당신이 볼 수 있는 각각의의 값 filter ($1 질문에),항목 A, B, 고 C 다음과 같 그들의 각각의 기회를 선택합니다.추가 이 모든 것을 제공합 의 가능성 A, BC 2/18ths,5/18ths11/18ths.

이것은 다른 룰렛,쿼리에서 질문을 것 같다는 편견에 큰 무게.그래서 대답하는 내 자신의 문제 쿼리가 거울이지만과 일치하지 않습니다.

이것은 궁금해 하는 날은 경우 필터링에서 특히 비선형 분포 수,당신은 여전히 이 쿼리 뿐만 아니라울만치 룰렛?고 무엇을 배포 것입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top