セットAがセットBのサブセットであるかどうかをチェックするアルゴリズムがありますか?セットAがセットBのサブセットであるかどうかをチェックするためのアルゴリズム
この問題を解決するためにデータ構造を作成しても、ランタイムにはカウントされません。
セットAがセットBのサブセットであるかどうかをチェックするアルゴリズムがありますか?セットAがセットBのサブセットであるかどうかをチェックするためのアルゴリズム
この問題を解決するためにデータ構造を作成しても、ランタイムにはカウントされません。
これは、A
の各要素を調べる必要があるため、少なくともA
のサイズの線形時間である必要があります。
ハッシュテーブル(ハッシュテーブルにB
という要素を格納してから、各要素を検索してA
を検索する)を使用するとアルゴリズムが簡単です。私はあなたがB
のいくつかの先進的な構造を知らない限り、あなたはどんなこともできるとは思わない。たとえば、B
がソート順に格納されている場合、バイナリ検索を使用してO(A log B)
を実行できます。
両方を並べ替えると、2つのコレクションの先頭項目を比較できます。このアルゴリズムのパフォーマンスはO(A + B) – Miguel
ブルームフィルタ(http://en.wikipedia.org/wiki/Bloom_filter)に行くかもしれません。しかし、そこの上にキースが言及した方法によって対処することができます偽陽性、あること(ただし、ハッシュの最悪の場合の複雑さはO(n)とされていませんが、あなたはO(nlogn)。
です。私の場合、後処理を行うのが非常に速いので、私はこのアルゴリズムが気に入っています。 Bloomフィルタはサーバー上で実行され、結果セットはクライアント側で実行されます。 – volni
を行う参照してください。最も一般的な文字と文字のペアでソートされたセットを保存し、できるだけ早くネガティブマッチを捨てる機会を最大限に活用してください。 これがブルームフィルタとどのくらいうまく組み合わされるかは分かりません。おそらく、多くのデグラムと文字がないため、ハッシュテーブルが実行します。
サブセットの最大サイズや共通サイズについての情報がある場合は、同じサイズのサブセットをすべて前述のようにブルームフィルタに入れることで同様にデータを事前処理できます。
これらの両方の組み合わせを実行することもできます。
この回答を見つけました:http://stackoverflow.com/a/1338515/174674 – volni
設定されたコンテンツに関する詳細情報が必要です。一般的なアルゴリズムは、あなたに一定の時間の複雑さを与えません。少なくとも、私が知っているものはありません。 –
セットされた要素は文字列ですが、高速のアルゴリズムが得られるならば、ハッシュを通してそれらを実行したり、ビットセット内の位置を割り当てることができます。 – volni