考虑我分配了这样的值的场景

亚马逊-1

沃尔玛-2

目标-4

好市多-8

北京-16

在数据库中,数据是通过根据每个产品的可用性屏蔽这些值来存储的。例如。,

面膜产品说明

1 台笔记本电脑在亚马逊有售

17 iPhone在亚马逊和BJ中可用

24 Costco和BJ的床垫可用

像这些一样,所有产品都被屏蔽并存储在数据库中。

我如何根据蒙版值检索所有零售商。那么我如何以编程方式查找或列出 Costco 和 BJ。任何算法/逻辑都将受到高度赞赏。

有帮助吗?

解决方案

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语句行了的位,如果床垫值具有相同的位作为掩模组,然后其掩模即销售床垫存储。一个和床垫值和掩码值在商店出售的床垫只会是非零。对于每次迭代,我们移动屏蔽位的一个位置到左边。

注意屏蔽值应该是积极的,不是消极的,如果需要的话,你可以乘以负值。

其他提示

假设你在SQL数据库中的意思,然后在您检索SQL,通常可以添加例如WHERE(MyField的和16)= 16,其中(MyField的和24)= 24等。

但是,请注意,如果你想优化这些检索,通常匹配查询的行数比列总数少得多,那么这可能不是代表这个数据非常好办法。在这种情况下,这将是更好为具有包含表示该信息(产品ID,STOREID)对单独的“ProductStore”表(和索引上STOREID)。

在每种情况下,最多有两家零售商的库存总和等于“掩盖”价值吗?如果是这样,您仍然需要检查所有对来检索它们,这将花费 n² 时间。只需使用嵌套循环即可。

如果该值代表任意数量的零售商库存的总和,那么您正在尝试解决 子集和 问题,所以不幸的是你不能在超过 2^n 的时间内完成它。

如果您能够使用信息来增强原始数据结构,以查找对总金额有贡献的零售商,那么这将是理想的选择。但既然你问这个问题,我假设你在构建数据结构时无法访问数据结构,因此要生成零售商的所有子集进行检查,你将需要研究 高德纳算法 [pdf] 用于生成所有 k 组合(并运行 1...k) TAOCP 第 4a 卷第 7.2.1.3 节。

http://www.antiifcampaign.com/

记住此。如果你能删除“如果”与其他结构(图/策略模式),对我来说,你可以让它在那里,否则,“如果”,是非常危险的! (F.Cirillo)

在此情况下可以使用地图的地图与位掩码操作。

卢卡。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top