Frage

, um das Szenario vor Ich habe Werte wie diese zugewiesen

  

Amazon -1

     

Walmart -2

     

Ziel -4

     

Costco -8

     

Bjs -16

Im DB werden Daten durch Maskierung diese Werte für jedes Produkt ihrer Verfügbarkeit gespeichert. zB.,

  

Maske Produktbeschreibung

     

1 Laptop erhältlich Amazon

     

17 iPhone erhältlich Amazon   und BJ

     

24 Matratze erhältlich   Costco und BJ

Wie diese alle Produkte sind maskiert und in der DB gespeichert.

Wie rufe ich alle auf Basis Einzelhändler auf dem maskierten Wert., z. B. für Mattress der maskierte Wert ist 24. Dann, wie würde ich finden oder Liste Costco & BJ programmatisch. Jeder Algorithmus / Logik würde sehr geschätzt.

War es hilfreich?

Lösung

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;
}

Die if Aussage reiht sich die Bits, wenn die Matratze Wert hat die gleiche Bit als Maskensatz, dann den Laden, dessen Maske, ist verkauft Matratzen. Eine UND die Matratze Wert und Maskenwert werden nur nicht Null sein, wenn das Geschäft verkauft Matratzen. Für jede Iteration bewegen wir die Maske um eine Position nach links Bit.

Beachten Sie, dass die Maskenwerte positiv sein sollte, nicht negativ, wenn Bedarf Sie mehrfach sein kann durch negative.

Andere Tipps

Angenommen, Sie in einer SQL-Datenbank bedeuten, dann in Ihrem Abruf SQL können Sie in der Regel hinzufügen, z WHERE (MyField und 16) = 16, die (MyField und 24) = 24 etc.

Beachten Sie jedoch, dass, wenn Sie versuchen, solche Abfragen zu optimieren und die Anzahl der Zeilen der Regel eine Abfrage passend ist viel kleiner als die Gesamtzahl der Zeilen, dann ist dies wahrscheinlich nicht ein sehr guter Weg, um diese Daten darzustellen . In diesem Fall würde es besser sein, eine separate „ProductStor“ Tabelle zu haben, die (ProductID, StoreID) Paare repräsentieren diese Informationen enthalten (und indexierte auf StoreID).

Gibt es höchstens zwei Einzelhändler, deren Vorräte Summe den „maskierte“ Wert in jedem Fall? Wenn so dass Sie immer noch alle Paare zu überprüfen, um sie abzurufen, die n² Zeit in Anspruch nehmen wird. Verwenden Sie einfach eine verschachtelte Schleife.

Wenn der Wert der Summe aus einer beliebigen Anzahl von Einzelhändlern Vorräte darstellt, dann Sie versuchen, versuchen, die Knuth-Algorithmus [pdf] zur Erzeugung aller k-Kombinationen (und führen sie es für 1 ... k) gegeben in TAOCP Vol 4a Sec 7.2.1.3.

http://www.antiifcampaign.com/

Erinnern Sie sich daran. Wenn Sie die „if“ mit einem anderen Konstrukt (Karte / Strategie-Muster) entfernen können, für mich können Sie es dort lassen, sonst, dass „wenn“ ist wirklich gefährlich !! (F.Cirillo)

In diesem Fall, dass Sie Karte Karte mit bitmask Betrieb verwenden können.

Luca.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top