7

このように値が割り当てられているシナリオを考えてみましょう

アマゾン-1

ウォルマート-2

ターゲット-4

コストコ-8

Bjs -16

DBでは、各製品の可用性に基づいてこれらの値をマスクすることにより、データが保存されます。例えば。、

マスク製品の説明

1台のラップトップがAmazonで利用可能

17iPhoneはAmazonとBJで利用可能

コストコとBJで利用可能な24マットレス

これらのように、すべての製品はマスクされてDBに保存されます。

マスクされた値に基づいてすべての小売業者を取得するにはどうすればよいですか。たとえば、マットレスの場合、マスクされた値は24です。次に、Costco&BJをプログラムで検索または一覧表示するにはどうすればよいですか。任意のアルゴリズム/ロジックをいただければ幸いです。

4

4 に答える 4

9
int mattress = 24;
int mask = 1;
for(int i = 0; i < num_stores; ++i) {
    if(mask & mattress != 0) {
        System.out.println("Store "+i+" has mattresses!");
    }
    mask = mask << 1;
}

このifステートメントは、マットレスの値がマスク セットと同じビットを持っている場合、そのマスクがマットレスを販売している店のビットを並べます。マットレスの値とマスクの値の AND は、ストアがマットレスを販売する場合にのみ非ゼロになります。反復ごとに、マスク ビットを 1 位置左に移動します。

マスク値は負ではなく正でなければならないことに注意してください。必要に応じて、負の値を掛けることができます。

于 2010-03-01T00:21:48.317 に答える
1

それぞれのケースで、在庫の合計が「マスクされた」値になる小売業者は最大 2 つですか? その場合でも、すべてのペアをチェックして取得する必要があり、n² 時間かかります。ネストされたループを使用するだけです。

値が任意の数の小売業者の在庫の合計を表している場合、サブセット合計の問題を解決しようとしているので、残念ながら 2^n 時間よりも早く解決することはできません。

合計に貢献している小売業者を検索するための情報で元のデータ構造を拡張できる場合、これは理想的です。しかし、あなたが質問をしているので、データ構造が構築されている間はデータ構造にアクセスできないと仮定しているので、チェックのために小売業者のすべてのサブセットを生成するには、すべての k を生成するための Knuth のアルゴリズム[pdf] を調べる必要があります。 - TAOCP Vol 4a Sec 7.2.1.3で指定された組み合わせ (および 1...k で実行) 。

于 2010-03-01T01:13:25.607 に答える
1

SQL データベースを意味すると仮定すると、検索 SQL では、通常、WHERE (MyField AND 16) = 16、WHERE (MyField AND 24) = 24 などを追加できます。

ただし、このような取得を最適化しようとしていて、通常、クエリに一致する行数が行の総数よりもはるかに少ない場合、これはおそらくこのデータを表すのにあまり適した方法ではないことに注意してください。その場合、この情報を表す (ProductID、StoreID) ペアを含む (および StoreID でインデックス付けされた) 別の "ProductStore" テーブルを用意することをお勧めします。

于 2010-03-01T00:44:58.620 に答える
0

http://www.antiifcampaign.com/

これを覚えて。別の構造(マップ/戦略パターン)で「if」を削除できる場合は、私にとってはそこに置くことができます。そうしないと、その「if」は本当に危険です!! (F.シリロ)

この場合、ビットマスク操作でマップのマップを使用できます。

ルカ。

于 2013-04-22T15:06:34.860 に答える