아 이거 정말 재밌다고 느꼈던 인터뷰 질문중에 하나입니다.
4바이트 데이터가 스트림으로 계속 해서 들어오고, 즉 전체 데이터가 몇개인지 알 수 없는 상황에서, 여러분이 할 일은 100개의 셈플을 취하는 겁니다.
데이터의 양은 엄청 많고, 언제 셈플을 취하라는 명령이 떨어질지는 모릅니다.
데이터 형태는 중요하지 않습니다. 다르게 질문해보면.
여러분은 Bing팀 개발자 입니다. 빙이 뭐냐고요? 구글에서 찾아보세요. ㅋㅋ
Search Query가 실시간으로 들어오고 있습니다. 엄청난 양이지요.
잘난 보스는 아무때나 와서 100개의 랜덤 셈플 Query를 실시간으로 요구합니다.
늘 현재까지 들어온 Query중에 100개의 셈플을 Track/Maintain하고 있어야 합니다.
생각할 여유를 드리기 위해 답을 나중에 별도의 포스팅으로 달도록 하겠습니다.
문제를 잘 설명 못했나 봅니다.
실제 상황으로 다시 예를 들어보면, 부장님이 와서 오늘 지금까지 검색어중에 셈플 검색어 100개만 뽑아와. 이 작업을 매 분마다 해야 하다면?
100개의 데이터가 들어왔다면, 생각할 것도 없이 100개를 다 취하면 되겠죠.
200개의 데이터가 들어왔다면, rnd()%200을 100번 해서 100개의 셈플을 구하면 되겠고.
300개의 데이터가 들어왔다면, rnd()%300을 100번 해서 100개의 셈플을 구하면 되겠고.
근데 데이터 하나 들어올때마다 셈플을 리프레쉬하면 제일 쉽겠지만, 스트림으로 데이터가 들오는 것이고, 데이터의 양이 많다면...
스트림에서 샘플을 100개 취할 때 랜덤한 간격으로 한다는 말인감? 문제를 잘 이해 못함... :-(
답글삭제작성자가 댓글을 삭제했습니다.
답글삭제http://en.wikipedia.org/wiki/Reservoir_sampling
답글삭제정답은 여기에 가서 찾아보세요.