整数を指定すると、小さなセットから一致するものを見つける必要があります。ほとんどの場合、整数はセットに含まれません。ほとんどの検索アルゴリズムでは、これが最悪のケースです (最も時間がかかります)。しかし、このアプリケーションの場合、検索時間は、検索が失敗する速さに左右されます。したがって、最良のケースが「見つからない」アルゴリズムが必要です。
そのようなものは存在しますか?
整数はランダムではなく、配列インデックスです。たとえば、0..10k (15 ビット) です。セットには 0..7 の整数が含まれますが、これは単純な線形検索には十分な数です。しかし、それはほとんどすべてのケースで最悪のケースです。
私が考えることができる唯一のものはブルームフィルターでしょう. F(int) = Set Bit (i AND 1Fh) を定義します (つまり、1 ビットが設定された 32 ビット整数)。各セットで、F(各要素) (n 要素に対して最大 n ビットが設定された 32 ビット整数) の OR 演算された値を一緒に格納します。検索は IF (F(i) AND F(set))>0 となり、線形検索を実行します。
したがって、少なくとも 1 つのセット要素がテスト整数 i と同じ下位 5 ビットを持たない限り、検索は実行されません。2 番目のテストは、次に低い 5 ビットに基づいて追加できます。
より良いアイデアはありますか?