가장 자주 발생하는 'k'에 대한 알고리즘


19

어떤 시점에서든 데이터 스트림에서 가장 자주 발생하는 'k'요소를 알려주는 가장 효율적인 (스트리밍 ??) 알고리즘을 찾고 있습니다. 이 게시물 : "분할 및 정복"데이터 스트림 알고리즘에 관심이있었습니다.

예를 들어, (4,3,5,1,6,2,4,3,3,8,9,1) 숫자가 있다고 가정하고 가장 자주 발생하는 3 개의 숫자 (예 :)를 쿼리하면 답으로 (3,4,1)을 얻습니다.

온라인 검색을 시도했지만 접근 방식을 제공하고 그것이 최고라고 말하는 곳을 찾을 수 없습니다. 사소한 해결책은 힙이나 균형 잡힌 이진 트리를 사용하는 것이지만 더 좋은 방법이 있다고 생각하며 어딘가에 문서화되어 있는지 알고 싶었습니다.

편집 : 나는 어떤 방식으로 또는 다른 방식으로 데이터의 분포에 의존하는 Appromixation 알고리즘 (검색 결과에 팝업되는)과는 달리 항상 정답을 제공하는 알고리즘을 찾고 있습니다.


실제로 정확한 알고리즘, 대략적인 알고리즘 및 "데이터 의존성"의 세 가지 알고리즘이 있습니다. 마지막 종류는 배제했지만 허용 가능한 데이터 분포에 의존하지 않는 대략적인 알고리즘입니까? 내가 지적했듯이, 그렇지 않으면 스트림 설정 에서이 문제에 대한 알려진 하한 때문에 문제가 있습니다.
Suresh Venkat

1
제한된 메모리 (스트리밍 알고리즘)를 사용하는 알고리즘이 실제로 원하는 것을 수행 할 수 있는지, 그리고 당신이 지적한대로 할 수없는 것 같습니다. 또한 스트리밍되지 않은 정확한 알고리즘이 알려 진지 여부에 대해 O (n)에서 최악의 시간을 보장하는 문제가 여기에 언급되어 있습니다 . edu / viewdoc / summary? doi = 10.1.1.106.7889
dhruvbird

답변:


20

k=1o(n)

n/k

kk


1
+1. 나는 시간 알고리즘의> 50 %가 잘 알려진 것 (주요 요소 알고리즘)이라고 생각합니다
dhruvbird

2
감사!! 언급 한 Cormode와 Hadjileftheriou의 논문은이 논문을 인용합니다 : citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.106.7889 이것은 제가 생각했던 것과 같은 기술을 가지고 있습니다. 2 개의 연결된 목록을 유지 관리합니다. 하나의 빈도로 그리고 그 안에 동일한 빈도를 가진 모든 요소의 다른 목록.
dhruvbird

50 % 이상의 알고리즘을 정교하게 다룰 수 있습니까? 구글 퍼즐? 당신이 방금 만졌고 "잘 알려진 트릭"에 완전히 소비하지 않았기 때문에 나는이 조잡한 추론을 따를 수 없습니다. 감사.


이 수레 쉬 벤 카트의 링크에 주석 (충분하지 않은 평판)입니다 userweb.cs.utexas.edu/users/misra/scannedPdf.dir/... : 알고리즘이 허용되지 않는 데이터를 통해 두 번째 패스를,이 요구되게처럼 보이는 여기. 실제로 O (1) 공간 요구 사항이있는 원 패스 알고리즘이 어떻게 존재할 수 있는지 알 수 없습니다.
TonyK

2

또한 다음 책의 섹션 8.1.3 "데이터 스트림의 빈번한 패턴 마이닝"을 읽는 것이 좋습니다.

한자 위, 미쉐린 캄버 데이터 마이닝 --- 개념과 기법, 제 2 판, Morgan Kaufmann Publishers , 2006.

Lossy Counting 이라는 알고리즘을 도입하여 자주 사용하는 항목 (일부 min_support 이상인 항목 )을 임의의 정밀도로 근사화 합니다.

정확히 당신이 원하는 것은 아니지만 도움이 될 것이라고 생각했습니다.


어쩌면 당신은 내 질문에 나를 도울 수 있습니다
Ben
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.