Pergunta

Considere o cenário que tenho valores designados como esses

Amazon -1

Walmart -2

Alvo -4

Costco -8

BJS -16

No banco de dados, os dados são armazenados mascarando esses valores com base em sua disponibilidade para cada produto. por exemplo.,

Máscara Descrição do produto

1 laptop disponível na Amazon

17 iPhone disponível na Amazon e BJ

24 colchões disponíveis em Costco e BJ's

Como esses, todos os produtos são mascarados e armazenados no banco de dados.

Como faço para recuperar todos os varejistas com base no valor mascarado., Por exemplo, para o colchão, o valor mascarado é 24. Então, como eu encontraria ou listaria programaticamente a Costco & BJ. Qualquer algoritmo/lógica seria muito apreciado.

Foi útil?

Solução

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

o if A declaração alinha os bits, se o valor do colchão tiver o mesmo pedaço do conjunto de máscara, a loja cuja máscara vende colchões. Um valor e o valor do colchão e o valor da máscara só serão diferentes de zero quando a loja vender colchões. Para cada iteração, movemos a máscara bit uma posição para a esquerda.

Observe que os valores da máscara devem ser positivos, não negativos, se necessário, você pode se multiplicar por um negativo.

Outras dicas

Supondo que você queira dizer em um banco de dados SQL e, em seguida, em seu SQL de recuperação, geralmente pode adicionar por exemplo (myfield e 16) = 16, onde (myfield e 24) = 24 etc.

No entanto, observe que, se você está tentando otimizar essas recuperações, e o número de linhas normalmente corresponde a uma consulta é muito menor que o número total de linhas, então isso provavelmente não é uma maneira muito boa de representar esses dados. Nesse caso, seria melhor ter uma tabela "ProductStore" separada que contém pares (ProductID, StoreID) representando essas informações (e indexadas no StoreID).

Existem no máximo dois varejistas cujos inventários somam o valor "mascarado" em cada caso? Nesse caso, você ainda terá que verificar todos os pares para recuperá -los, o que levará o tempo N². Basta usar um loop aninhado.

Se o valor representar a soma de qualquer número de inventários dos varejistas, você estará tentando resolver o subconjunto Problema, infelizmente você não pode fazê -lo em melhor de 2 anos.

Se você conseguir aumentar sua estrutura de dados original com informações para procurar os varejistas que contribuem para a soma, isso seria ideal. Mas como você está fazendo a pergunta, estou assumindo que não tem acesso à estrutura de dados enquanto ela está sendo construída, por isso, para gerar todos os subconjuntos de varejistas para verificar Algoritmo de Knuth pdf] para gerar todas as combinações k (e executá-lo por 1 ... k) dado em Taocp Vol 4A seg 7.2.1.3.

http://www.antiifcampaign.com/

Lembre-se disso. Se você pode remover o "se" com outro construto (mapa/padrão de estratégia), para mim, você pode deixar lá, caso contrário, "se" é realmente perigoso !! (F.Cirillo)

Nesse caso, você pode usar o mapa do mapa com a operação de máscara de bits.

Luca.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top