セットのうち少なくとものアイテムを検索します


11

検討値の組は、(無重複とソート配列として表され、既知の大きさ(すなわちサイズはO(1))の値がOに等しいかどうかを試験することができる。(1)時間を得ることができる。私が欲しいです中で少なくとも異なるセットに存在する値のセットを取得します。nkn

これを行うための明らかなアルゴリズムは、すべてのセットを調べて、各値の出現回数をカウントし、カウントがより大きい値を返すことです。しかし、場合によっては、より良い方法もあります。たとえば、で、一方のセットが他方のセットよりもはるかに小さい場合、すべての項目を調べてバイナリ検索を実行する方が効率的です。それぞれについて:バイナリ検索アプローチのコストはあるのに対し、ナイーブアプローチのコストはです。kn=k=2S1S2S1S2O(|S1|log(|S2|))O(|S1|+|S2|)|S1|<<|S2|

これを念頭に置いて、どのような状況でナイーブアルゴリズムよりもうまくやることができますか?(これがよく知られている問題である場合、その通常の名前を知っており、参考にしていただければ幸いです)


3
これは、「トップK」結果または「ヘビーヒッター」の一般的なカテゴリに分類されます。後者は、探しているものに近いものです。ただし、この分野でのほとんどの作業は、大規模なデータセットとサブリニアメモリの制限に焦点を当てています。
スレシュヴェンカト

9
指定した「S1のS1のすべての場所を検索する」方法は、常に時間で実行することができます。 。O(|S1|log(|S2|/|S1|))
デビッドエップスタイン

回答:


2

OK、私は、関連する何かを見つけたと思う:この論文は、(。P 2)のセクションIIIの「T-発生の問題」を言及まさに我々の問題である(ここで、私たちが呼んだものである)、いくつかのドメイン固有の専門用語の後ろに隠れて。彼らが提案するScanCountアルゴリズムは、私の質問で提案した素朴なアプローチです。MergeOptアルゴリズムは、バイナリ検索トリックの一般化です。彼らの主な提案(DivideSkip)は、このバイナリ検索トリックと複数の値をスキップする別のトリック(MergeSkip)の組み合わせです。実験的には、巧妙なアプローチは単純なアプローチよりもはるかに優れているようです(8ページの「フィルターなし」列を参照してください。フィルターはドメイン固有のものに対するヒューリスティックです)。Tk

これは、複数のバイナリ検索をより効率的にするためのDavid Eppsteinのトリックと、バイナリ検索の代わりに補間検索を使用するという考え(同じ分野のこの他の論文からの考え)と組み合わせることができます。S2


1

あなたの問題は、アソシエーションルール学習とも呼ばれる、頻繁なアイテムセットを見つけるデータマイニングの問題に似ています。正しく理解できれば、問題は、サポート > = kのカーディナリティー1(つまりシングルトン)の頻出アイテムセットを見つけることに帰着するかもしれません。もちろん、問題に使用可能なアルゴリズム(Apriori、Eclat、D-CLUBなど)を使用すると、カーディナリティが1を超える頻出アイテムセットを判別することもできます。

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