Question

Considérez le scénario J'attribue des valeurs comme celles-ci

  

Amazon -1

     

Walmart -2

     

Cible -4

     

Costco -8

     

Bjs -16

DB, les données sont stockées par masquage de ces valeurs en fonction de leur disponibilité pour chaque produit. ex.,

  

Masque Description du produit

     

1 ordinateur portable Disponible dans Amazon

     

17 iPhone Disponible en Amazon   et BJ

     

24 matelas Disponible en   Costco et BJ

Comme ces tous les produits sont masqués et stockés dans le DB.

Comment puis-je récupérer tous les détaillants en fonction de la valeur Masqué., par exemple., Pour matelas est la valeur masquée 24. Ensuite, comment pourrais-je trouver ou liste Costco et BJ programme. Tout algorithme / logique serait très appréciée.

Était-ce utile?

La solution

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

Les lignes de déclaration de if les bits, si la valeur de matelas a le même bit que le jeu de masque, puis le magasin dont le masque est vend des matelas. Un ET de la valeur de matelas et de la valeur de masque ne sera pas zéro lorsque le magasin vend des matelas. Pour chaque itération on déplace le bit de masque une position à gauche.

Notez que les valeurs de masque doivent être positifs, pas négatif, le cas échéant, vous pouvez multiplier par un négatif.

Autres conseils

En supposant que vous voulez dire dans une base de données SQL, puis dans votre SQL récupération, vous pouvez généralement ajouter par exemple OU (ET MyField 16) = 16, où (MyField ET 24) = 24 etc.

Toutefois, notez que si vous essayez d'optimiser ces récupérations, et le nombre de lignes correspondant généralement une requête est beaucoup plus petit que le nombre total de lignes, alors c'est probablement pas une très bonne façon de représenter ces données . Dans ce cas, il serait préférable d'avoir une table « ProductStore » séparée qui contient (ProductID, StoreID) paires représentant ces informations (et indexé sur StoreID).

Y at-il au plus deux détaillants dont les stocks somme égale à la valeur « masquée » dans chaque cas? Dans ce cas, vous devrez toujours vérifier toutes les paires pour les récupérer, ce qui prendra du temps n². Il suffit d'utiliser une boucle imbriquée.

Si la valeur représente la somme d'un nombre quelconque de stocks des détaillants, alors vous essayez d'essayer de résoudre le algorithme de Knuth [pdf] pour générer tous les k-combinaisons (et l'exécuter pour 1 ... k) donnée dans TAOCP Vol 4a Sec 7.2.1.3.

http://www.antiifcampaign.com/

Rappelez-vous ceci. Si vous pouvez supprimer le « si » avec une autre construction (carte / modèle de stratégie), pour moi, vous pouvez le laisser là, sinon que « si » est vraiment dangereux !! (F.Cirillo)

Dans ce cas, vous pouvez utiliser la carte de carte avec le fonctionnement de bitmask.

Luca.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top