考虑一下我分配了如下值的场景
亚马逊-1 沃尔玛-2 目标-4 Costco 8 BJS-16
在DB中,数据是通过掩蔽这些值来存储的,这些值是根据每个产品的可用性来存储的。例如,
掩模产品描述 亚马逊提供1台膝上型计算机 17 iPhone可在亚马逊和BJ获得 在Costco和BJ's提供24张床垫
就像这些产品一样,所有的产品都被屏蔽并存储在DB中。
如何根据蒙面价值来检索所有零售商。例如,对于床垫,蒙面价值是24。然后,我将如何找到或列出Costco &BJ的程序。任何算法/逻辑都将受到高度赞赏。
发布于 2010-03-01 00:21:48
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;
}如果床垫值具有与掩码集相同的位,则if语句对这些位对齐,然后是出售床垫的掩码存储区。当商店出售床垫时,床垫值和面罩值只有非零。对于每次迭代,我们将掩码位向左移动一个位置。
注意,掩码值应该是正的,而不是负的,如果需要的话,可以乘以负的。
发布于 2010-03-01 00:44:58
假设您是指在SQL数据库中,那么在检索SQL中,通常可以添加WHERE (MyField和16) = 16,其中(MyField和24) = 24等等。
但是,请注意,如果您试图优化这样的检索,并且通常与查询匹配的行数要比总行数小得多,那么这可能不是表示这些数据的非常好的方法。在这种情况下,最好有一个单独的"ProductStore“表,其中包含(ProductID,StoreID)对表示该信息(并在StoreID上进行索引)。
发布于 2010-03-01 01:13:25
在每一种情况下,是否最多有两家零售商的库存总和为“蒙面”价值?如果是这样的话,您仍然需要检查所有对来检索它们,这将花费n平方米的时间。只需使用嵌套循环即可。
如果该值表示任意数量零售商库存的总和,那么您正试图解决子集和问题,因此不幸的是,您不能在2^n以上的时间内完成它。
如果你能够增加你的原始数据结构与信息,以查找零售商贡献的总和,那么这将是理想的。但是,既然你问的问题,我假设你没有访问数据结构,而它正在建设,所以,为了生成所有的零售商子集检查,你会想要查看Knuth算法 pdf生成所有的k-组合(并运行1.k)给出在TAOCP第4a节7.2.1.3。
https://stackoverflow.com/questions/2353254
复制相似问题