我正在研究IP多播,并确定解决N个主机所有可能组合所需的唯一多播组数量。
例如,如果我们有3个终端主机(A,B,C),则需要创建总共4个多播组,以便能够解决这些主机的所有可能组合(AB,AC,BC,ABC) ),不包括正在寻址1或0个主机的实例。
据我所知,排除1或0主机被寻址的实例的唯一组数可以表示为[2 ^ N - (N + 1)],其中N =主机数。< / p>
但是,我很想看到只有至少一定比例的系统被解决时存在多少组。
例如,如果我们有5个系统,那么我们总共有26个组播组。但是,如果我们排除了正在处理3个或更少系统的组(仅查看组为4或所有系统都已解决),我们将只有6个组。我可以手动确定,如下所示。
我可以使用一个公式来计算这个吗?因此,如果我们有N个主机并且只想创建包含Y主机或更多主机的多播组,则意味着我们有Z个多播组。在上面的例子中,Y = 4,Z被确定为6。
始终感谢任何帮助或反馈
1 with 0 bits set
00 - 00000
5 with 1 bit set
01 - 00001
02 - 00010
04 - 00100
08 - 01000
16 - 10000
10 with 2 bits set
03 - 00011
05 - 00101
06 - 00110
09 - 01001
10 - 01010
12 - 01100
18 - 10010
20 - 10100
17 - 10001
24 - 11000
10 with 3 bits set
07 - 00111
11 - 01011
13 - 01101
14 - 01110
19 - 10011
21 - 10101
22 - 10110
25 - 11001
26 - 11010
28 - 11100
5 with 4 bits set
15 - 01111
23 - 10111
27 - 11011
29 - 11101
30 - 11110
1 with 5 bits set
31 - 11111
答案 0 :(得分:3)
Sum[i=0 to N] N{C}i = Sum of all combinations of i hosts out of N hosts = 2^N
--- [1]
Sum[i=0 to Y] N{C}i = Sum of all combinations of multicast groups with Y or fewer hosts, including single hosts.
--- [2]
您正在寻找([1] - [2])。
答案 1 :(得分:2)
将此视为组合问题应该会有所帮助。见http://en.wikipedia.org/wiki/Combination
在N位中,您想知道设置了Y到N位的组合之和。
像这样的伪代码:
for k from Y..N
total += (N choose k)
其中N choose k
可以计算为N! / (k! * (N-k)!)
对于你的例子,你会得到:
5 choose 4 = 5
5 choose 5 = 1
--------------
total = 6