カテゴリ
全体プログラミング scheme verilog 未分類 以前の記事
2016年 04月2016年 03月 2016年 02月 2016年 01月 2015年 12月 2015年 11月 2015年 10月 2015年 09月 2015年 08月 2015年 07月 2015年 06月 2015年 03月 お気に入りブログ
PHPで競技プログラミングメモ帳
最新のトラックバック
ライフログ
検索
タグ
racket
その他のジャンル
ブログパーツ
最新の記事
外部リンク
ファン
記事ランキング
ブログジャンル
画像一覧
|
前回の続きです。とりあえずソースコードから。
ソースコード #lang racket (define (for-each-permutation proc n) (define (req header rest) (if (null? rest) (proc (reverse header)) (for-each (lambda (n) (req (cons (list-ref rest n) header) (append (take rest n) (drop rest (add1 n))))) (range (length rest))))) (req empty (range n))) (define (let-go-and-catch perm t) (define tmp-top (if (zero? t) -1 (apply max (take (take perm t) t)))) (define (get-point lst) (if (false? lst) 0 (add1 (first lst)))) (get-point (memf (curryr > tmp-top) (drop perm t)))) (define (factorial n) (apply * (range 1 (+ n 1)))) (define (solve-expectation-value t n) (let ((sum 0)) (for-each-permutation (lambda (perm) (set! sum (+ (let-go-and-catch perm t) sum))) n) (/ sum (factorial n)))) (define (solve-probability-of-the-best t n) (let ((sum 0)) (for-each-permutation (lambda (perm) (when (= (let-go-and-catch perm t) n) (set! sum (add1 sum)))) n) (/ sum (factorial n)))) (define (solve-probability-not-married t n) (let ((sum 0)) (for-each-permutation (lambda (perm) (when (= (let-go-and-catch perm t) 0) (set! sum (add1 sum)))) n) (/ sum (factorial n)))) 自分が何番目の異性と結婚することができるかの期待値はsolve-expectation-value関数で算出します。0〜10の範囲のスコアで算出しています(10は一番の相手と結婚、0は未婚)。 t=0: 5.50 t=1: 7.20 t=2: 7.07 t=3: 6.48 t=4: 5.70 t=5: 4.84 t=6: 3.91 t=7: 2.96 t=8: 1.99 t=9: 1.00 t=10: 0.00 期待値だけで見た場合は、「最初の相手は見送って、2人目からは最初の人よりもいいひとなら結婚」するのがいいようです。 自分が出会う10人の人のうち、1番相性のいい人と結婚できる確率はsolve-probability-of-the-best関数で算出します。 t=0: 10.0% t=1: 28.3% t=2: 36.6% t=3: 39.9% t=4: 39.8% t=5: 37.2% t=6: 32.7% t=7: 26.5% t=8: 18.9% t=9: 10.0% t=10: 0.0% 1番相性のいい人と結婚したい場合、「お付き合いする人を3人見送って、4人目からはそれまでの人比べていい人なら結婚」するのがいいようです。 最後に最後まで未婚で終わってしまう確率を算出しました。 t=0: 0.0% t=1: 10.0% t=2: 20.0% t=3: 30.0% t=4: 40.0% t=5: 50.0% t=6: 60.0% t=7: 70.0% t=8: 80.0% t=9: 90.0% t=10: 100.0% この結果は、上の2つに比べて単純です。例えば、1番狙いで3人見送ると未婚になる確率は30%です。1番の相手を探すのって意外にリスキーなのがわかります。
by tempurature
| 2015-12-23 14:14
| scheme
| ||||||||||||||||||||||
ファン申請 |
||