이 작업에 적합한 데이터 구조는 무엇입니까?가중치 항목의 빠른 샘플링 및 업데이트 (적 - 검은 나무와 같은 데이터 구조)
나는 N 개의 항목으로 구성되어 있습니다. N은 크다. 각 항목에는 양수 가중치가 있습니다.
나는 빨리, 다음을 수행하고 싶습니다 :
내부 루프 :
샘플 항목, 그것의 무게에 따라.
[공정 ...]
업데이트 K 상품의 중량, 여기서 K < < N.
I 중량 샘플을 말할 때, 이것은 균일 샘플링 다르다. 아이템의 우도는 그 무게에 비례합니다. 따라서 두 개의 항목이 있고 하나의 가중치가 .8이고 다른 하나의 가중치가 .2 인 경우 각각 80 %와 20 %의 가능성이 있습니다.
항목 수 N은 고정되어 있습니다. 가중치는 한정된 범위, 즉 [0, 1]입니다. 가중치가 항상 1로 합 해지는 것은 아닙니다.
순진한 접근법은 샘플링에 O (n) 시간 단계를 필요로합니다. O (log (n)) 알고리즘이 있습니까?
이 작업에 적합한 데이터 구조는 무엇입니까? 빨강 - 검정 나무는 각 항목을 동일한 무게로 취급하기 때문에 부적절하다고 생각합니다.
같은 부동 소수점 등의 부정확 한 표현을 사용하는 경우 가중치의 합이 어려움에받을 수 있습니다 업데이트. –
큰 문제는 아니며 부정확 한 결과를 얻을 수 있습니다. – jpalecek