1

这些整数可以是 IP 地址 (DHCP) 或会话 ID 或隧道 ID(例如在 L2TP 中)。每个整数都可以是免费的或使用的。我们需要它有效地找到免费的。

还定义了最小值和最大值。

4

3 回答 3

1

你希望有更多的空闲或更多使用的整数吗?你想同时保存 IP、SessIds 和 TunIds 还是各自排除其他的?

对我来说,最平衡的将是一棵树,但正如您所知道的最大大小,如果没有频繁更改,数组可能就足够了。

当您不关心某些订单时,最好使用动态列表。

于 2011-06-14T11:23:23.950 回答
1

我会保留一个空闲列表和一个使用列表。分配一个数字意味着将它从空闲列表移动到已使用列表,并反向释放。

维护列表会产生成本,但找到免费号码会很快

于 2011-06-14T11:27:49.707 回答
1

好的,因为你有一个最大值和最小值,我有以下想法:你动态地维护这个最大值或最小值,并有一个空闲整数列表。首先,您从一个空列表和完整范围开始。当有人租用一个整数时,如果列表为空,则范围减小一,否则我们从列表中获取。如果他释放他的整数,有两种可能性:

  1. 它适合您的最大/最小范围的边缘,因此您可以增加范围大小
  2. 它远离范围,因此您将其放入列表中

这应该使您有可能以低成本维持高和低的自由整数计数。当然,您也可以尝试保存几个范围以将整数聚集在一起,但这需要更复杂的操作。

于 2011-06-15T07:34:42.637 回答