Pregunta

Considere el escenario que tengo valores asignados como estos

Amazonas -1

Walmart-2

Objetivo -4

Costco-8

bjs-16

En DB, los datos se almacenan enmascarando estos valores según su disponibilidad para cada producto.p.ej.,

Descripción del producto de la máscara

1 portátil Disponible en Amazon

17 iPhone disponible en Amazon y BJ

24 colchones disponibles en Costco y BJ's

Al igual que estos, todos los productos están enmascarados y almacenados en la base de datos.

¿Cómo recupero a todos los minoristas en función del valor enmascarado?, Ej., Para el colchón, el valor enmascarado es 24.Entonces, ¿cómo podría encontrar o enumerar Costco & BJ's mediante programación?Cualquier algoritmo/lógica sería muy apreciado.

¿Fue útil?

Solución

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

Las líneas de la cuenta hasta los if los bits, si el valor colchón tiene el mismo bit como el conjunto máscara, a continuación, la tienda cuya máscara que se vende colchones. An y del valor colchón y valor de máscara sólo será distinto de cero cuando la tienda vende colchones. Para cada iteración nos movemos la máscara de bits una posición a la izquierda.

Tenga en cuenta que los valores de máscara debe ser positivo, no negativo, si es necesario se puede multiplicar por uno negativo.

Otros consejos

Suponiendo que quiere decir en una base de datos SQL, a continuación, en su SQL de recuperación, por lo general puede añadir, por ejemplo, DONDE (MyField y 16) = 16, donde (MyField y 24) = 24 etc.

Sin embargo, tenga en cuenta que si usted está tratando de optimizar dichas recuperaciones, y el número de filas que coincidan con una consulta normalmente es mucho menor que el número total de filas, entonces esto probablemente no es una muy buena forma de representar estos datos . En ese caso, sería mejor tener una tabla separada "ProductStore" que contiene los pares (ProductID, StoreID) que representan esta información (e indexado en StoreID).

¿Hay un máximo de dos minoristas cuya suma inventarios al valor "enmascarado" en cada caso? Si por lo que aún tendrá que comprobar todos los pares para recuperarlos, que llevará tiempo N². Sólo tiene que utilizar un bucle anidado.

Si el valor representa la suma de cualquier número de inventarios de los minoristas, a continuación, que está tratando de tratar de resolver el subconjunto de suma, así que por desgracia no se puede hacerlo en mejor que 2 ^ n tiempo.

Si usted es capaz de aumentar la estructura de datos original con información para buscar los minoristas que contribuyen a la suma, entonces esto sería ideal. Pero ya que usted está haciendo la pregunta Estoy asumiendo que usted no tiene acceso a la estructura de datos mientras está siendo construido, por lo que para generar todos los subconjuntos de los minoristas para comprobar que usted desee ver en la algoritmo de Knuth [pdf] para generar todas las combinaciones de k-(y ejecutarlo durante 1 ... k) dada en TAOCP Vol 4a Sec 7.2.1.3.

http://www.antiifcampaign.com/

Recuerde esto. Si se puede eliminar el "si" con otro constructo (patrón mapa / estrategia), para mí puede dejar que existe, de lo contrario que "si" es realmente peligroso !! (F.Cirillo)

En este caso se puede usar mapa de mapa con la operación de máscara de bits.

Luca.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top