最近我遇到了一个有趣的C拼图: 我们有一个N节点和M边缘的网络。每个节点包含一些数据包。最初,节点i包含多个数据包。在每个时间步,每个数据包随机选择其中一个邻居并移动到它。我们必须在K个时间步之后找出每个节点的数据包数量。
我在这个问题上面临的主要问题是如何使用概率。 “随机”这个词很令人困惑,并没有向我提出任何逻辑。有人可以帮忙吗?
答案 0 :(得分:0)
最简单的方法是使用srand()
和rand()
函数。
srand()
初始化随机数生成器。典型用法是:
srand(time(NULL));
根据当前时间设置种子。它并非安全随机,但它避免了每次运行程序时获得相同的结果(除非您在非常快速的连续运行两次)。在拨打srand()
之前,您应该在执行程序期间仅拨打rand()
一次。
rand()
函数返回0到RAND_MAX
范围内的随机数; RAND_MAX
的值可能因系统而异。您可以操纵结果以获得所需范围内的随机数;例如,rand() % 2
会为您提供一个值为0
或1
的随机数。
comp.lang.c FAQ的第13节涵盖了这一点。
请注意,rand()
通常不会生成非常高质量的随机数。为了您的目的,这可能没问题。如果不是,则还有其他特定于系统的方法来生成更好的随机数。