快速获取位掩码以便传送到所有设备

时间:2010-02-25 14:07:59

标签: c algorithm bitmask

我有一个设备列表和一个通道的位掩码(通道编号为0..3)。最多可以有256个设备。

例如:

Device1: 1 0 0 1 (on channels 0, 3)
Device2: 0 1 1 0 (on channels 1, 2)
Device3: 1 1 0 0 (on channels 2, 3)

我需要找到一个通道的位掩码,这将导致所有设备都收到消息,并且可能的消息最少。

正确的结果位掩码例如数据为1 0 1 0(通道1传送到Device2,通道3传送到Device1和Device3)和0 1 0 1(通道0传送到Device1,通道2传送到Device2和Device3),其中一个都可以。

结果位掩码1 1 0 0会很糟糕,因为Device3会收到两次消息。

3 个答案:

答案 0 :(得分:3)

由于可能没有一个完美的解决方案,我们只有16种可能性,我只会使用强力方法并遍历所有16个可能的掩码,并查看哪个是最佳的(最小数量)重复的消息)。

答案 1 :(得分:1)

看看backtrack search

答案 2 :(得分:1)

您可以在每列中添加1的数量,以了解该频道上的消息将发生多少次“接收”。对于任何有效掩码(到达所有设备),您可以轻松地将所有设备接收的消息总数相加。然后,您可以强制执行所有16个可能的掩码,看看哪些掩码实际可行,并选择两个都有效且接收总数最少的掩码。绕过蛮力部分需要对整个矩阵进行操作。

奇怪的是,如果你真的有256台设备,你可能不得不在所有频道发送。