1

我目前正在研究 IP 多播,并确定解决 N 主机的所有可能组合所需的唯一多播组的数量。

例如,如果我们有 3 台终端主机(A、B、C),则需要创建总共 4 个多播组才能使这些主机的所有可能组合(AB、AC、BC、ABC)能够被寻址,不包括正在处理 1 或 0 个主机的实例。

据我所知,不包括正在寻址 1 或 0 个主机的实例的唯一组数可以表示为 [2^N - (N + 1)],其中 N = 主机数。

但是,我有兴趣查看在仅处理至少一定百分比的系统时存在多少组。

例如,如果我们有 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
4

2 回答 2

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])。

于 2012-06-05T17:48:50.560 回答
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
于 2012-06-05T17:59:17.430 回答