Domanda

Si consideri lo scenario Ho valori assegnati come questi

  

Amazon -1

     

Walmart -2

     

Target -4

     

Costco -8

     

Bjs -16

Nel DB, i dati vengono memorizzati mascherando questi valori in base alla loro disponibilità per ogni prodotto. ad es.,

  

Maschera descrizione del prodotto

     

1 laptop Disponibile in Amazzonia

     

17 iPhone Disponibile in Amazzonia   e BJ

     

24 Materasso Disponibile in   Costco e BJ di

Come questi tutti i prodotti sono mascherati e memorizzati nel DB.

Come faccio a recuperare tutti i rivenditori in base al valore mascherato., ad es., per materasso il valore mascherato è 24. E allora come avrei trovato o un elenco Costco e BJ di programmazione. Qualsiasi algoritmo / logica sarebbe molto apprezzato.

È stato utile?

Soluzione

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

I if righe di istruzioni su per le i bit, se il valore materasso ha lo stesso bit come l'insieme maschera, poi il negozio la cui maschera che è vende materassi. An e del valore di materasso e valore della maschera sarà diverso da zero solo quando il negozio vende materassi. Per ogni iterazione passiamo posizione di bit maschera uno a fianco.

Si noti che i valori della maschera dovrebbe essere positivo, non negativo, se necessario si può moltiplicare per uno negativo.

Altri suggerimenti

Supponendo che si intende in un database SQL, quindi nel vostro SQL recupero, si può generalmente aggiungere per esempio WHERE (MyField e 16) = 16, DOVE (MyField E 24) = 24 ecc.

Tuttavia, tenere presente che se si sta cercando di ottimizzare tali recuperi, e il numero di righe in genere corrispondenti a una query è molto più piccolo rispetto al numero totale di righe, allora questo probabilmente non è un buon modo per rappresentare questi dati . In questo caso, sarebbe meglio avere una tabella separata "ProductStore" che contiene (ProductID, StoreID) coppie che rappresentano queste informazioni (e indicizzati su StoreID).

ci sono al massimo due rivenditori le cui scorte sommare al valore "mascherato" in ogni caso? Se è così si avrà ancora per controllare tutte le coppie per recuperarli, che avrà n² tempo. Basta usare un ciclo nidificato.

Se il valore rappresenta la somma di un numero qualsiasi di scorte dei rivenditori, quindi si sta cercando di cercare di risolvere il sottoinsieme-sum problema, quindi, purtroppo, non è possibile farlo in meglio di 2 ^ n tempo.

Se si è in grado di aumentare la vostra struttura dati originale con le informazioni di ricercare i rivenditori che contribuiscono alla somma, allora questo sarebbe l'ideale. Ma dal momento che si sta ponendo la domanda che parto dal presupposto che non si ha accesso alla struttura dei dati mentre è in fase di costruzione, in modo da generare tutti i sottoinsiemi di rivenditori per il controllo si vuole prendere in considerazione algoritmo di Knuth [pdf] per generare tutti i k-combinazioni (ed eseguirlo per 1 ... k) data in TAOCP Vol 4a Sec 7.2.1.3.

http://www.antiifcampaign.com/

Ricordate questo. Se è possibile rimuovere il "se" con un altro costrutto (mappa modello / strategia), per me si può lasciare lì, altrimenti che "se" è davvero pericoloso !! (F.Cirillo)

In questo caso è possibile utilizzare mappa di carta con il funzionamento maschera di bit.

Luca.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top