我想到了一些东西,但我对它不是 100% 有信心,它是这样的:
S = {s1 : 1, s2 : 2.5, s3 : 2}
M = {s1 : t1t2, s2 : t1t2t3, s3 : t2t3}
现在,我们构建一个表示target x sensor
地图的矩阵:
[1, 1, 0]
[1, 1, 1]
[0, 1, 1]
所以行是目标(t1 -> R0, t2 -> R1 etc.)
,列表示覆盖它们的传感器。
接下来,我们逐行处理,同时收集将覆盖当前目标集的传感器列表。例如:
Row - 0:
{t1} -> [s1 : 1], [s2 : 2.5]
请注意,我们正在构建一个答案列表。然后我们继续到下一行,我们需要添加t2
到我们的目标集,同时计算这样做所需的最小传感器重量。
Row - 1:
{t1, t2} -> [s1 : 1], [s2 : 2.5]
请注意,RHS 上没有任何变化,因为两者都s1
覆盖s2
了t2
。接下来是最后一行:
Row - 2:
{t1, t2, t3} -> [s1, s3 : 3], [s2 : 2.5]
请注意,我必须添加s3
到第一个答案,因为它具有最小的权重覆盖t3
。
最后浏览答案列表会发现这[s2 : 2.5]
是最好的候选人。
现在,我对动态编程没有那么自信,所以不确定我在这里所做的是否正确。如果有人可以确认/质疑我在这里所做的事情,那就太好了。
编辑:根据传感器的重量对列进行排序可能是有意义的。这样就可以轻松选择覆盖给定目标的重量最小的传感器。