STL random_sample
함수는 주어진 간격에서 샘플링하기 위해 대체 전략을 사용합니다. 왜 우리는 감소 확률이 필요합니까, 나는 대체 확률을 감소시키지 않고 유사한 알고리즘을 보았습니다. 그 차이점은 무엇입니까? 이는 첫 번째 요소 (실제로, 제 n
요소) 1
확률 (이하 "을 기입"단계)로 선택되어야한다는 것을 분명STL random_sample이 감소 확률로 바꿉니다.
/*This is an excerpt from STL implementation*/
template <class InputIterator, class RandomAccessIterator, class Distance>
RandomAccessIterator __random_sample(InputIterator first, InputIterator last,
RandomAccessIterator out,
const Distance n)
{
Distance m = 0;
Distance t = n;
for (; first != last && m < n; ++m, ++first) //the strategy is also used in mahout
out[m] = *first;//fill it
while (first != last) {
++t;
Distance M = lrand48() % t;
if (M < n)
out[M] = *first;//replace it with a decreasing probability
++first;
}
return out + m;
}
선행 밑줄이있는 전역 이름을 만들지 마십시오. 예약되어 있습니다. –
그리고 여러분의 함수가 표준 라이브러리의 함수와 다른 점은 무엇입니까? –
@JoachimPileborg 이것은 STL 구현의 발췌 부분이며, 버전은 sgi-2.9입니다. 물론 이것은 내부에서 사용되는 함수이며 사용자 인터페이스의 일부가 아닙니다. 내 질문은 왜 전략이 사용되는지, 기본적으로 나는 확률이 감소하고있는 것을 방황하고있다. – zoujyjs