1

最近、興味深いCパズルに出くわしました。N個のノードとM個のエッジを持つネットワークがあります。各ノードには、いくつかのパケットが含まれています。最初に、ノードiにはai個のパケットが含まれています。すべてのタイムステップで、各パケットは隣接するネイバーの1つをランダムに選択し、そこに移動します。Kタイムステップ後のすべてのノードでのパケット数を調べる必要があります。

この問題で私が直面している主な問題は、確率をどのように使用するかです。「ランダムに」という言葉は非常に紛らわしく、私には論理を示唆していません。誰か助けてもらえますか?

4

1 に答える 1

0

最も簡単な方法は、srand()andrand()関数を使用することです。

srand()乱数発生器を初期化します。一般的な使用法は次のとおりです。

srand(time(NULL));

現在の時刻に基づいてシードを設定します。安全にランダムではありませんが、プログラムを実行するたびに同じ結果が得られることはありません (非常に短い間隔で 2 回実行しない限り)。srand()を呼び出す前に、プログラムの実行中に一度だけ呼び出す必要がありますrand()

このrand()関数は、0 ~ の範囲の乱数を返しますRAND_MAX。の値は、RAND_MAXシステムによって異なります。結果を操作して、目的の範囲の乱数を取得できます。たとえば、値またはrand() % 2の乱数を返します。01

comp.lang.c FAQのセクション 13 では、これについて詳しく説明しています。

rand()通常、高品質の乱数は生成されないことに注意してください。あなたの目的のために、それはおそらく大丈夫です。そうでない場合は、より良い乱数を生成するシステム固有の方法が他にもあります。

于 2012-10-12T22:57:03.407 に答える