差異處
這裏顯示兩個版本的差異處。
兩邊的前次修訂版 前次修改 下次修改 | 前次修改 | ||
start:math:20121226 [2013/01/01 14:42] – jonathan | start:math:20121226 [2019/01/31 09:06] (目前版本) – [產生的程式碼] Jonathan Tsai | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== 半夜過橋(Bridge and Torch Problem) ====== | ||
+ | ==== 問題一 ==== | ||
+ | 有一座橋沒有路燈每次只能有兩個人通行, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | ==== 問題二 ==== | ||
+ | 當有六個人過橋速度分別是 2, 3, 8, 15, 18, 19 他們至少要花幾分鐘過橋呢? | ||
+ | |||
+ | < | ||
+ | # perl math03.pl 6 0 2 3 8 15 18 19 | ||
+ | People Cost List: | ||
+ | 1:(2) 2:(3) 3:(8) 4:(15) 5:(18) 6:(19) | ||
+ | Finish..100000! | ||
+ | Finish..200000! | ||
+ | Finish..300000! | ||
+ | Total Case:324000 | ||
+ | Min. Cost :53 | ||
+ | </ | ||
+ | |||
+ | ==== 問題三 ==== | ||
+ | 當有七個人過橋速度分別是 4, 8, 8, 9, 9, 9, 13 他們至少要花幾分鐘過橋呢? | ||
+ | |||
+ | < | ||
+ | # perl t.pl 7 3 4 8 8 9 9 9 13 | ||
+ | People Cost List: | ||
+ | 1:(4) 2:(8) 3:(8) 4:(9) 5:(9) 6:(9) 7:(13) | ||
+ | Guess Min. Cost:76 | ||
+ | Total Time:29 sec | ||
+ | Min. Cost :76 | ||
+ | </ | ||
+ | |||
+ | ==== 推論公式 ==== | ||
+ | * 推論 min. cost 公式: (需要先將過橋時間由小到大排列) | ||
+ | * 2個人: (2) [2] | ||
+ | * 3個人: (6) [1]+[2]+[3] | ||
+ | * 4個人: | ||
+ | * 4a:(11) [1]*1+[2]*3+[4] | ||
+ | - 最快的兩個[1][2]先過去(2), | ||
+ | - 最慢的兩個[3][4]再過去(2+1+4), | ||
+ | - 最快的兩個[1][2]再過去 | ||
+ | * 4b:(11) [1]*2+[2]+[3]+[4] | ||
+ | - 最快[1]和最慢[4]先過去(4), | ||
+ | - 最快[1]和第二慢[3]的過去(4+1+3), | ||
+ | - 最快的兩個[1][2]再過去 | ||
+ | * 所以當 ([1]+[2]*2+[4] < [1]*2+[3]+[4]) 採用 4a 方式, 否則就採用 4b 方式 | ||
+ | * 5個人: | ||
+ | * 先取最快兩個 [1] [2] 與最慢兩個 [4] [5] 來進行 4a 4b 的比較方式, | ||
+ | * 之後就變成 [1] [2] [3] 3個人的問題了 | ||
+ | * 6個人: | ||
+ | * 先取最快兩個 [1] [2] 與最慢兩個 [5] [6] 來進行 4a 4b 的比較方式, | ||
+ | * 之後就變成 [1] [2] [3] [4] 4個人的問題了 | ||
+ | |||
+ | ==== 產生的程式碼 ==== | ||
+ | https:// | ||
+ | |||
+ | ==== 產生的結果 ==== | ||
+ | {{tabinclude> | ||
+ | |||
+ | ==== 結論 ==== | ||
+ | * 可透過遞迴方式來產生所有可能的狀況來計算出每個狀況所需花費的時間 | ||
+ | * 出現最少時間的狀況有可能會超過一個 | ||
+ | * 只要推論 2個人, 3個人, 4個人, 5個人, 6個人 就可以獲得之後所有人數的 Min. Cost 計算方式 |