Bitmaske Betrieb in java
Betrachten Sie das Szenario,
Ich habe Werte zugewiesen, wie diese
Amazon -1
Walmart -2
Ziel -4
Costco -8
Bjs -16
In DB, Daten werden durch Maskierung diese Werte basierend auf Ihrer Verfügbarkeit für jedes Produkt.
zB.,
Maske Produktbeschreibung
1 laptop in Amazon Erhältlich
17 iPhone in Amazon Erhältlich
und BJ24-Matratze Verfügbar
Costco und BJ ' s
Wie dieser alle Produkte werden maskiert und gespeichert in der DB.
Wie Kriege ich alle Einzelhändler auf der Grundlage der Maskierte Wert.,
zB., Für die Matratzen der maskierte Wert ist 24. Dann, wie würde ich das finden, oder die Liste Costco & BJ programmgesteuert. Jeder Algorithmus/Logik würde sehr geschätzt werden.
- Dies ist definitiv etwas, das Sie tun möchten in den Java-code, im Gegensatz zu tun es als Teil Ihres Datenbank-Abfrage? Es ist in der Regel der Fall, dass eine Filterung in der Datenbank-Abfrage ist effizienter...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
if
- Anweisung Zeilen, die die bits, wenn die Matratze Wert hat die gleiche bit der Maske gesetzt, dann den store, dessen Maske, die ist verkauft Matratzen. Ein UND der Matratze Wert und Maske Wert wird nur dann ungleich null sein, wenn der laden verkauft Matratzen. Für jede iteration bewegen wir die Maske bit eine position nach Links.Beachten Sie, dass die Maske die Werte sollten positiv sein, nicht negativ, wenn es sein muss können Sie vermehren, indem Sie negativ.
Vorausgesetzt, du meinst in einer SQL-Datenbank, die sich dann in Ihrem retrieval SQL können Sie in der Regel fügen Sie z.B., WO (MyField UND 16) = 16, WO (MyField UND 24) = 24 usw.
Beachten Sie jedoch, dass, wenn Sie versuchen zu optimieren sind solche Abfragen, und die Anzahl der Zeilen in der Regel die Anpassung einer Abfrage viel kleiner ist als die Gesamtzahl der Zeilen, dann dies ist wahrscheinlich nicht eine sehr gute Möglichkeit zur Darstellung dieser Daten. In diesem Fall wäre es besser, eine separate "ProductStore" - Tabelle, die enthält (ProductID, StoreID) - Paare repräsentiert diese Informationen (und indiziert auf StoreID).
Sind es höchstens zwei Einzelhändler, deren Vorräte Summe der "maskierte" Wert in jedem Fall? Wenn also Sie wird noch zu prüfen haben alle Paare um Sie abzurufen, die n2 Zeit. Nur verwenden Sie eine verschachtelte Schleife.
Wenn der Wert stellt die Summe einer beliebigen Anzahl von Einzelhändlern Vorräte, dann sind Sie versucht, zu lösen versucht die subset-sum problem, also leider nicht in besser als 2^n mal.
Wenn Sie sind in der Lage, erweitern Ihre original-Daten-Struktur mit Informationen zum nachschlagen die Einzelhändler einen Beitrag zu der Summe, dann wäre dies ideal. Aber da Sie die Frage, ich gehe davon aus, dass Sie keinen Zugriff auf die Daten-Struktur, während es gebaut wird, also zum generieren aller Teilmengen von Einzelhändlern für die Prüfung, die Sie wollen, zu schauen Knuth ' s Algorithmus [pdf] zur Generierung aller k-Kombinationen (und führen Sie es für 1...k) in TAOCP Vol 4a Sec 7.2.1.3.
http://www.antiifcampaign.com/
Daran erinnern. Wenn Sie entfernen die "wenn" mit einem anderen Konstrukt(Karte/Strategie-Muster), für mich können Sie lassen Sie es dort, ansonsten "wenn" ist wirklich gefährlich!!! (F. Cirillo)
In diesem Fall können Sie mit der Karte der Karte mit Bitmaske Betrieb.
Luca.