1

最近我遇到了一个有趣的 C 难题:我们有一个有 N 个节点和 M 个边的网络。每个节点包含一定数量的数据包。最初,节点 i 包含 ai 个数据包。在每个时间步,每个数据包随机选择一个它的相邻邻居并移动到它。我们必须在 K 个时间步之后找出每个节点的数据包数。

我在这个问题中面临的主要问题是如何使用概率。“随机”这个词非常令人困惑,对我来说没有任何逻辑。有人可以帮忙吗?

4

1 回答 1

0

最简单的方法是使用srand()andrand()函数。

srand()初始化随机数生成器。典型用法是:

srand(time(NULL));

它根据当前时间设置种子。它不是安全随机的,但它避免了每次运行程序时都得到相同的结果(除非你非常快速地连续运行两次)。srand()在程序执行期间,您应该只调用一次,然后再调用rand().

rand()函数返回一个 0 到RAND_MAX;范围内的随机数。的值RAND_MAX可能因一个系统而异。您可以操纵结果以获取所需范围内的随机数;例如,rand() % 2给你一个随机数,其值为01

comp.lang.c FAQ的第 13 节很好地涵盖了这一点。

请注意,rand()通常不会生成非常高质量的随机数。出于您的目的,这可能没问题。如果不是,还有其他特定于系统的方法可以生成更好的随机数。

于 2012-10-12T22:57:03.407 回答