最も頻繁に発生する「k」個のアルゴリズム


19

私は、データストリームで最も頻繁に発生する「k」個の要素をいつでも通知する最も効率的な(ストリーミング??)アルゴリズムを探してきました。この投稿:「分割統治」データストリームアルゴリズムに興味を持ちました。

たとえば、数字があると仮定します:(4,3,5,1,6,2,4,3,3,8,9,1)そして、最も頻繁に発生する3つの数字(たとえば)をクエリした後、答えとして(3,4,1)を取得します。

オンラインで検索しようとしましたが、アプローチを提供し、それが最良であると言う場所を見つけることができませんでした。些細な解決策は、ヒープまたはバランスの取れたバイナリツリーを使用することですが、より良い方法があると思い、それがどこかに文書化されているかどうかを知りたかったのです。

編集:私は、何らかの方法でデータの分布に依存する承認アルゴリズム(多くが検索結果にポップアップする)とは対照的に、常に正しい答えを与えるアルゴリズムを探しています


実際には、正確、近似、および「データ依存」の3種類のアルゴリズムがあります。あなたは最後の種類を除外しましたが、許容されるデータ分布に依存しない近似アルゴリズムですか?私が示したように、そうでない場合、ストリーム設定におけるこの問題の既知の下限のために、あなたは問題を抱えています。
Suresh Venkat

1
限られたメモリを使用するアルゴリズム(ストリーミングアルゴリズム)が実際に私が望んでいたことを実行できるかどうかに興味があり、あなたが指摘したようにできないようです。また、O(n)で保証されたワーストケース時間の問題を解決する非ストリーミングの正確なアルゴリズムが知られているかどうかは、ここで言及しました(CormodeとHadjileftheriouが提供したリンクからの論文で引用):citeseerx.ist.psu。 edu / viewdoc / summary?doi = 10.1.1.106.7889
dhruvbird

回答:


20

この問題に関する広範な文献があります。まず、場合でも問題は困難です。Alon、Matias、およびSzegedyが示すように、空間で最も人気のある要素の周波数に対する定数因子近似よりも優れていることはありません。 'ランダム化されます。k=1o(n)

ただし、1つの要素が厳密に50%以上の時間で発生することが保証されている場合、一定のスペースを使用してそれを見つける簡単なトリックがあります(これは人気のあるGoogleパズルの質問です)。より一般的には、このトリックの一般化を使用して、回以上発生する要素を見つけることができます。n/k

問題について知られていることの最終的な調査は、VLDB 2008からのCormodeとHadjileftheriouによる論文です。上記の方法と最新の方法の多くをカバーしています。一般的な考え方は、上位アイテムの近似リストを生成できることです(ここで近似とは、カウントが上位アイテムのカウントに近いアイテムを取得できることを意味します)。kk


1
+1。あなたが言及したように、時間アルゴリズムの> 50%はよく知られているもの(多数要素アルゴリズム)だと思います
-dhruvbird

2
ありがとう!! あなたが言及したCormodeとHadjileftheriouによる論文はこの論文を引用しています:citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.106.7889これは私が考えていたのと同じテクニックを持っています。2つのリンクリストを保持します。1つは頻度で、その中には同じ頻度を持つすべての要素の別のリストがあります。
dhruvbird

50パーセント以上のアルゴリズムを詳しく説明できますか?そしてグーグルパズル?あなたがたった今触れたばかりで、「よく知られているトリック」に完全に費やしていないので、私はこのずさんな推論に従うことはできません。ありがとう。

リンクは次のとおり
Suresh Venkat

これは、Suresh Venkatのリンクuserweb.cs.utexas.edu/users/misra/scannedPdf.dir/…に対するコメントです(評判が十分ではありません)。そこに提示されているアルゴリズムは、データの2回目の通過を必要とするようです。ここに。実際、O(1)スペース要件を持つワンパスアルゴリズムがどのように存在するかはわかりません。
トニーK

2

また、次の本のセクション8.1.3「データストリームの頻出パターンマイニング」を読むことをお勧めします。

ジアウェイ・ハン、ミシュリーン・カンバー。データマイニング---概念と手法、第2版、Morgan Kaufmann Publishers、2006年。

Lossy Countingとして知られるアルゴリズムを導入します。このアルゴリズムは、頻繁なアイテム(サポートがmin_supportを超えるアイテム)を任意の精度で近似します。

正確にあなたが望むものではありませんが、私はそれが役立つかもしれないと思いました。


多分あなたはここ
ベン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.