보통 프로그래밍을 할때 랜덤 값을 구하는 경우가 간혹 있다.
도메인에 따라 랜덤 함수를 사용하는 방법은 다르겠지만,
경우에 따른 방법을 정리해보고자 한다.
1. 랜덤하게 선택하는 경우
2. 여러개의 데이터 중 x % 확률로 데이터를 선택하는 경우
이 두가지 경우를 고려해볼 수 있는데, 사실 의미적으로 볼때 매우 애매하다.
누군가 나에게 2번을 질문 하였다. 즉, 1000개의 데이터가 있는데, 우리는 이 데이터를 분석해야한다. 하지만 분석 시간이 오래 걸리기 때문에 이중에 30%만 뽑아서 데이터를 분석하려 한다. 어떻게 하겠는가?
나의 대답은 인덱스를 랜덤하게 선택하는 것이였다.
- rand()%1000 을 300개의 유니크한 데이터를 얻을때 까지 반복한다.
이게 나의 대답이였다.
하지만 이것은 좋은 방법일 수도 있지만 단점을 찾자면 연산시간은 항상 다르다. 중복 데이터가 계속해서 선택이 되면 많은 시간을 허비 하기 때문이다.
그래서 다른 한가지 방법은
각 데이터에 대해서 선택과 미선택을 확률에 근거한 랜덤 값으로 데이터를 뽑는다
x =rand()%10;
if(x <= 3)
데이터 선택
else
데이터 선택 안함.
즉 위의 의사코드와 같이 랜덤 함수에 의해서 확률을 기반으로 선택을 할 것인가 안할 것인가 로 결정한다.
다시 말하면 첫번째 답은 어떤 것을 선택할지에 대해서 랜덤으로 결정하는 것이고
두번쨰는 어떤 객체를 확률 기반으로 선택 할지 안할지 결정하는 것이다,
이러한 확률기반에 의한 선택은 Particle Filter에서도 사용하는 원리이다.
본 게시물이 도움이 되었다면, 꾸~욱~ 눌러주세요.
포스팅 하는데 많은 힘이 됩니다~~~
'Programming > MFC-C++' 카테고리의 다른 글
AR 구현 관련 자료 (0) | 2012.11.06 |
---|---|
[Kinect] 설치 방법 (0) | 2012.05.10 |
[Kinect] 자료 모음 (0) | 2012.05.10 |
ActiveX로 해당 브라우저 종료하기 (0) | 2011.10.30 |
템플릿(Templete) 프로그래밍 (0) | 2011.10.23 |