看板 java 關於我們 聯絡資訊
因為有在看棒球 想寫一支小小程式看一下比賽結果 規則是這樣,目前有 A, B, C, D 四隊比賽 假設 A 目前贏 10 場 B 目前贏 11 場 C 目前贏 10 場 D 目前贏 11 場 每一隊都有可能與其他三支隊伍比賽 而剩下的場次有 30 場以上,每一次勝負假設都一半一半 如果單純用 2^30 = 1073741824 (十億種可能) 最後要看 A 隊獲勝 > B,C,D 才算獲勝 我是用一個 array list 去存現在結果,目前是 (獲勝) = 10,11,10,11 假設下一場是 A vs B,則結果就會變成 11,11,10,11 (A 獲勝) 10,12,10,11 (B 獲勝) 下下一場假設是 A vs C,因為要根據上一輪的結果去排列組合就會變成四種可能 11,11,10,11 (第一場是 A 獲勝) --> 12,11,10,11 與 11,11,11,11 10,12,10,11 (第一場是 B 獲勝) --> 11,12,10,11 與 10,12,11,11 這樣排列組合就有四種結果 我想問的是,因為比賽還剩 30 場總共有 2^30 這麼多種可能 (應該算大數據計算吧) @@ 一定會 out of memory,有嘗試過加參數 -Xmx4096m 但是一樣會太大 有沒有大大知道要怎麼改良這種算法比較好的? 上網不知道要怎麼查關鍵字... 查詢 game, all result 或其他關鍵字都跑出程式比賽結果 先謝謝知道的大大了 (呃... 不知道有沒有人懂我想問的東西 orz) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.52.214 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1433085100.A.F24.html ※ 編輯: Lavchi (49.215.186.81), 05/31/2015 23:15:49
Killercat: 你不需要精確到把每種結果都算出來啊.... 05/31 23:17
Killercat: 你只需要設定好機率 跑很多次 拿平均值就可以了 05/31 23:17
Killercat: 或者你有什麼目的非得把「所有可能的未來」都算出來? 05/31 23:18
簡單說我想列出現在中華職棒四支隊伍打到最後 每一隊獲勝的機率 目前四隊獲勝分別為 (21, 26, 20, 24) 這四種 有想過大約計算 類似 K 大堤的概念,但感覺又不是很精準 總覺得應該有方法可以有效率的精準算出實際每一隊獲勝的可能 至少我的方法是非常沒有效率的算法 orz ※ 編輯: Lavchi (49.215.186.81), 05/31/2015 23:21:35 另外就是有球隊 B 與 C 有和局的狀況發生 所以最後的情況一定要 A 獲勝 > B 才算獲勝,如果最後的獲勝次數是 A = B 則判定 B 獲勝 A 與 C 一樣,因為 C 有和局在身,一定要 A > C 才算獲勝 而 A 與 D 因為都沒有和局在身,所以如果是 A = D 的況狀,則要多加開一局比出勝負 呃... 好像有點複雜 orz ※ 編輯: Lavchi (49.215.186.81), 05/31/2015 23:26:28
Killercat: 這數據一定會收斂的,而且A跟B打,贏面一定是50:50嗎? 05/31 23:35
Killercat: 你的假設其實已經隱含了「ABCD四隊實力相等」的前提了 05/31 23:36
Lavchi: 是的,我的第一部分是先假設 50/50 去計算結果 05/31 23:42
Lavchi: 第二部分才打算動態調整,現在 A 勝率 50%,贏一場後下一 05/31 23:42
Lavchi: 次對戰勝率會變成 51% 之類的去計算更真實的數據 05/31 23:42
chucheng: 基本上就是隨機去模擬,跑個十萬次 06/01 01:33
chucheng: Memory不會爆,然後跑愈多次結果愈準 06/01 01:33
ScottOAO: 這叫大數據...? 稱的上大數而已唄 06/01 07:49
NewSpec: 這是單純的機率問題, 不是big data 06/01 23:08
AI3767: 覺得用遞迴做DFS,每次到第30場只留統計值,應該夠用了? 06/01 23:13
kattte: 這只是機率問題吧 06/02 03:03
LaPass: 請問你要算什麼東西? 06/02 11:01
cyclone350: 我也覺得可以簡化成數學問題,用瓊舉法有點不恰當 06/02 22:49
k47100014: 大數據應該是要拿這四隊的全部的歷史比賽下去計算才對 06/07 12:14