어떤 시점에서든 데이터 스트림에서 가장 자주 발생하는 'k'요소를 알려주는 가장 효율적인 (스트리밍 ??) 알고리즘을 찾고 있습니다. 이 게시물 : "분할 및 정복"데이터 스트림 알고리즘에 관심이있었습니다.
예를 들어, (4,3,5,1,6,2,4,3,3,8,9,1) 숫자가 있다고 가정하고 가장 자주 발생하는 3 개의 숫자 (예 :)를 쿼리하면 답으로 (3,4,1)을 얻습니다.
온라인 검색을 시도했지만 접근 방식을 제공하고 그것이 최고라고 말하는 곳을 찾을 수 없습니다. 사소한 해결책은 힙이나 균형 잡힌 이진 트리를 사용하는 것이지만 더 좋은 방법이 있다고 생각하며 어딘가에 문서화되어 있는지 알고 싶었습니다.
편집 : 나는 어떤 방식으로 또는 다른 방식으로 데이터의 분포에 의존하는 Appromixation 알고리즘 (검색 결과에 팝업되는)과는 달리 항상 정답을 제공하는 알고리즘을 찾고 있습니다.
실제로 정확한 알고리즘, 대략적인 알고리즘 및 "데이터 의존성"의 세 가지 알고리즘이 있습니다. 마지막 종류는 배제했지만 허용 가능한 데이터 분포에 의존하지 않는 대략적인 알고리즘입니까? 내가 지적했듯이, 그렇지 않으면 스트림 설정 에서이 문제에 대한 알려진 하한 때문에 문제가 있습니다.
—
Suresh Venkat
제한된 메모리 (스트리밍 알고리즘)를 사용하는 알고리즘이 실제로 원하는 것을 수행 할 수 있는지, 그리고 당신이 지적한대로 할 수없는 것 같습니다. 또한 스트리밍되지 않은 정확한 알고리즘이 알려 진지 여부에 대해 O (n)에서 최악의 시간을 보장하는 문제가 여기에 언급되어 있습니다 . edu / viewdoc / summary? doi = 10.1.1.106.7889
—
dhruvbird