2007-07-01から1ヶ月間の記事一覧

list(2)

STL

sequential access listにランダムアクセスはできないので、 これの速度を調べる。 const int m = 1000; // コンテナの大きさ const int n = (int)(1e10 / m); // 繰り返し回数void procVector() { vector v; for(int k = 0; k v.push_back(k); int sum = 0;…

list(1)

STL

仕事でlistを使っているところがあって、 こんなところでなにもわざわざlistを使わなくてもと思っていたが、 最近全部vectorにしたら、想像以上に速くなった。 listはどういうときに使えるか考えてみる。 以下のベンチマークは、 VC2003+Windows XPで行って…

大きな整数の表現

C++

例えば、定数で1億がほしいときふつうはこう書くだろうか。 const int n = 100000000;しかし、パッと見で1億とわかるだろうか。 こういうときは、コメントを書くとすぐにわかる。 const int n = 100000000; // 1億しかし、例えば一桁変えて、 でもすぐに戻す…

ジャンケンで決着がつくまでの回数(7)

期待値E(n)をもう一度代数的に検討してみよう。 (P(n, 1) + ... + P(n, n-1))E(n) = 1 + P(n, 1)E(n) + ... + P(n, n-1)E(n-1) の左辺は、 (2n - 2)/3nE(n) 整理して、 ここで、 という母関数を考えると、 となる。 これを解くのは難しそうだが、 とりあえず…

ジャンケンで決着がつくまでの回数(6)

平均と分散を求めたので、 今度は正確な分布を求めよう。 n人でm回かかる確率をp(n,m)とすると、 1回で1人になる場合、2人になる場合、…をたし合わせて、 p(n,m) = P(n,1)p(1,m-1) + ... + P(n,n)p(n,m-1) (m > 1) p(n,1) = P(n,1) ここで、P(k,l)はk人から1…

ジャンケンで決着がつくまでの回数(5)

分散も同じように求めることを考えよう。 事象iがpiで起こるとして、 その事象が起こったときの平均と分散が、 mi, σi2だとしたときに、 全体での平均と分散を考える。 ni : 事象iの全体の個数 とすると、全体では、 だから、平均は、 分散を同様に考える。 …

ジャンケンで決着がつくまでの回数(4)

前回の、 (P(n, 1) + ... + P(n, n-1))E(n) = 1 + P(n, 1)E(n) + ... + P(n, n-1)E(n-1) にしたがってプログラムを書くと、 E(2) = 1.5 E(3) = 2.2500000000000004 E(4) = 3.214285714285715 E(5) = 4.485714285714287 E(6) = 6.219815668202768 E(7) = 8.64…

ジャンケンで決着がつくまでの回数(3)

代数的に期待値を求めよう。 n人でジャンケンして決着がつくまでの回数の期待値をE(n)とする。 2人の場合、 どちらかが勝つ確率が2/3、あいこの確率が1/3だから、 1回で決着がつく確率は2/3、 2回で決着がつく確率は1/3 * 2/3 = 2/9、 3回で決着がつく確率は…

ジャンケンで決着がつくまでの回数(2)

ジャンケンを2〜10人で1万回を行う。 決着がつくまでにかかった回数の平均と標準偏差は次のようになった。9人を超えるあたりから急激に増えるようだ。 以下、ソース。

ジャンケンで決着がつくまでの回数(1)

例えば、10人でジャンケンしたら、何回で1人が残るだろうか。 まず、ジャンケンをシミュレートしてみよう。 グーを1、チョキを2、パーを4とする。 すなわちビットを立てる。 乱数を使いJavaScriptでこんな具合に実装する。 // 2.8s for(var i = 0; i var a; …