n개의 원소가 있고
각 원소는 [0,1]의 확률을 가짐
모든 원소의 확률합은 1.0임
각 원소는 순차적으로 직렬화됨 (예 : 0.2 , 0.2 , 0.3 , 0.1 , 0.2 )
이때 랜덤을 돌려서 [0,1] 사이의 값을 얻었을때
이걸로 어떤 원소를 pick 해야 되는지 알아낼려면 어떻게 해야될까?
수도코드로
sum = 0.0f
for( i < list.size -1 )
{
sum += list[i];
nextSum = sum + list[i+1];
if(sum < randomvalue < nextSum ) return i;
}
대충 이렇게 하면 될 것 같긴한데 무식한 방법 같음
이런 문제는 흔할거라고 생각하고 분명히 좋은 방법이 있을건데
가르침을 주셈 형님들
바이너리서치 - dc App
접두사합(1..i합)을 만들어두고 바이너리서치해
쿼리당 O(logN)
예시처럼 0.1 배수면 10칸짜리 배열 만들면 O(1)나오긴함 - dc App
ㄱㄳㄳ