看板 Math 關於我們 聯絡資訊
※ 引述《Desperato (Farewell)》之銘言: : D. 結論 : 四題的答案近似值分別為 : 1) ~= 0.000785711 : 2) ~= 0.000000945 | : 3) ~= 0.00152243884034744235876... : 4) ~= 0.00152243884034744481467... : | 寫了一個 JavaScript 代碼模擬遊戲,下方代碼可以用 node.js 執行, 或是開瀏覽器,在網頁右鍵選擇 inspect 找到 console,貼上代碼來執行 ===================================================================== // 宣告函式,不會執行 const WIN = 'win'; const LOSE = 'lose'; const FINISHED = 'done'; const GAME_OVER = 'game over'; function play([win_chances, lose_chances]) { const total = win_chances + lose_chances; if (total == 0) { return [FINISHED, null]; } const result = Math.floor(Math.random() * total); return (result < win_chances) ? [WIN, [win_chances - 1, lose_chances]] : [LOSE, [win_chances, lose_chances - 1]] ; } function game(win_chances, lose_chances, lose_threshold) { let chances = [win_chances, lose_chances]; let result; let current_wins = 0; let current_loses = 0; const play_series = []; while (chances) { [result, chances] = play(chances); // For debug // console.log(`Play ${series.length + 1}: ${result}, running next play with [${turns}]`) play_series.push(result); if (result == WIN) current_wins++; if (result == LOSE) current_loses++; if (current_loses - current_wins >= lose_threshold) { play_series.push(GAME_OVER); chances = null; break; } } return play_series; } function simulate_multiple_games(game_count, win_count, lose_count, lose_threshold) { let finished_counts = 0; let game_over_counts = 0; for (let i = 0; i < game_count; i++) { const play_series = game(win_count, lose_count, lose_threshold); const game_result = play_series.slice(-1).pop(); if (game_result == FINISHED) finished_counts++; if (game_result == GAME_OVER) game_over_counts++; // For debug // console.log(`Game ${i+1}: ${game_result} with ${play_series.length-1} plays`) } return { finished_counts, game_over_counts }; } ===================================================================== 要模擬 100萬次,53勝47負的賽局,起始有16份籌碼的比賽,可執行: simulate_multiple_games(1000000, 53, 47, 16) 我跑了10次,取平均和標準差,得到提早結束比賽 (GAME_OVER) 的發生機會為 ~= 0.0007760 ± 0.0000282 另外直接跑了 1 億次模擬 ~= 0.0007851 跟 Desperato 的計算結果差不多 感謝 D 大 :) 補充 要模擬 100萬次,60勝40負的賽局,起始有16份籌碼的比賽 simulate_multiple_games(1000000, 60, 40, 16) 一樣10次的平均和標準差為 ~= 0.00000710 ± 0.00000285 似乎和 D 大的數據有落差? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.72.90.193 ※ 文章網址: https://www.ptt.cc/bbs/Math/M.1546522960.A.D16.html ※ 編輯: leondemon (223.72.90.193), 01/03/2019 21:58:04
oblivion87 : 板上神人真的多== 01/03 23:17
Desperato : 沒錯又算錯了XD 已訂正 01/04 13:55
Desperato : ~= 0.00000580349 進標準差了 至少數量級正確 01/04 13:59
leondemon : 感謝!我研究一下公式 :P 01/04 17:18