我甚至不确定这是否可能,但我认为还是值得问一下。
假设我们在一个网络中有100个设备,每个设备都有一个唯一的ID。
我想通过仅广播一个数据包来告诉这些设备中的一组设备要做什么。 例如,如果我想让设备2、5、75、116和530执行某项任务,我必须广播以下内容:2-5-75-116-530。 但是,如果我想让其中95个设备执行某项任务,这个数据包就会变得相当长!!! 因此,我需要一种方法来缩短这个数据包的长度。
经过一段时间的思考,我想到了一个主意:
如果我只使用质数作为设备ID,那么我可以将我需要的设备组的设备ID的乘积作为数据包发送,每个设备将检查接收到的数字与其设备ID的余数是否为0。
例如,如果我想让设备2、3、5和7执行某项任务,我将广播2 * 3 * 5 * 7 = 210,然后每个设备将计算“210 mod 自身ID”,只有ID为2、3、5和7的设备才能得到0,所以它们知道该执行某些操作。
但这种方法并不高效,因为第100个质数是541,广播的数字可能会变得非常大,而“mod”计算可能会变得非常困难(设备具有8位处理器)。
因此,我只需要一种方法让设备确定它们是否应该执行操作或忽略接收到的数据包。同时,我需要尽可能缩短数据包的长度。
我尽力解释了问题,如果还不清楚,请告诉我详细说明。
假设我们在一个网络中有100个设备,每个设备都有一个唯一的ID。
我想通过仅广播一个数据包来告诉这些设备中的一组设备要做什么。 例如,如果我想让设备2、5、75、116和530执行某项任务,我必须广播以下内容:2-5-75-116-530。 但是,如果我想让其中95个设备执行某项任务,这个数据包就会变得相当长!!! 因此,我需要一种方法来缩短这个数据包的长度。
经过一段时间的思考,我想到了一个主意:
如果我只使用质数作为设备ID,那么我可以将我需要的设备组的设备ID的乘积作为数据包发送,每个设备将检查接收到的数字与其设备ID的余数是否为0。
例如,如果我想让设备2、3、5和7执行某项任务,我将广播2 * 3 * 5 * 7 = 210,然后每个设备将计算“210 mod 自身ID”,只有ID为2、3、5和7的设备才能得到0,所以它们知道该执行某些操作。
但这种方法并不高效,因为第100个质数是541,广播的数字可能会变得非常大,而“mod”计算可能会变得非常困难(设备具有8位处理器)。
因此,我只需要一种方法让设备确定它们是否应该执行操作或忽略接收到的数据包。同时,我需要尽可能缩短数据包的长度。
我尽力解释了问题,如果还不清楚,请告诉我详细说明。
ceil(100 / 8)
= 第 13 个字节),并对该字节按位进行 AND 运算以得到100 % 8
=4
=0b00000100
。4 字节 = 32 位 = 足够存储 2^32 设备 ID 的空间。 - elixenide