回覆列表
-
1 # 小鴿子看世界
-
2 # 強者道
按一個小時算,提高20%也就快了12分鐘,而且按前面的朋友的演算法,也就10分鐘左右,遇到個啥情況,被動地減兩次速,時間刷刷得往上漲,其實我也很疑惑這個問題,所以來說說我的想法。我平常上班就要跑兩段高速和兩段一般的路,但是我發覺我在高速路上跑120和跑80,到公司的時間都差不多。回想起來,可能我在高速路上最多就開個30分鐘,了不起了,30%的速度差也就10分鐘左右(大概45公里的高速路),全程也不可能完全120,所以時間差更小,幾分鐘,幾個收費站路口,幾個加塞,紅燈,就耗費完咯,所以有可能影響時間更大的因素是有幾個口子,有幾個紅綠燈,幾個加塞狗。。。
-
3 # 花落知多少15229076
我們單位經常兩輛車一起出去,路況不堵車,但是車流大,我開車快加塞超車,貌似我每次甩後車很遠,路程三十多公里,但每次到達目的地時間差超不過10分鐘。
因為我們是人類,我們發現即使與牛頓運動學有關的最簡單的計算都很難,而且要花費我們很多精力。因此,我們乾脆化繁為簡,用簡單的精神啟發式來計算速度、時間、距離之間的關係。
啟發式演算法十分簡單,而且往往“足夠好用”。一旦不好用的時候,問題也就隨之而來了。
從你提問的細節中可以明顯看出你也用到了精神啟發式演算法:
我自駕去過很多地方,平時也經常開車。我試過把車速提高10-20%,但不知道為什麼,即使一路暢通無阻也無法提前20%的時間到達目的地。
所以你運用精神啟發式演算法簡單地歸納得出:“速度提高x%= 行駛x固定距離的時間減少x%”。包括我在內的大多數人都經常這樣以為。這個方法適只用於小範圍的加速和減速,但對於大幅的速度增大和減少來說還“不夠好”。
下面我會有一道難題來向大家說明精神啟發式演算法的侷限性。
假設我們在進行長途拉力賽,比賽規定全程的平均速度必須達到每小時60公里。比賽進行到一半的時候,裁判員告知我們已經落後了,前半段的平均速度只有每小時30公里。那麼要在不違反規定的情況下達到終點,我們必須以多快的速度完成剩下的賽程呢?
先不看答案自己思考一下。
-
-
-
提示:答案不是每小時90公里。
-
-
-
現在公佈答案:不可能完成。因為這時候我們已經輸了。
假設賽程全長100公里。要符合比賽規定,我們必須在100分鐘內完成整個比賽。但如果到賽程中點即50公里處時,我們的平均速度才達到每小時30公里,那100分鐘早就已經過了。
問題就在於計算平均速度時應該以時間而不是距離為參照。如果你以每小時90公里的速度前進10秒,再以每小時30公里的速度前進10秒,那麼你的平均速度確實是每小時60公里。於是我們就會從心裡認定這種計算方法適用於所有情況,但其實它並不適用於以距離為參照來計算平均速度。
考慮到這一點,我們再回來解決你提出的問題。速度的定義是:
t=dvt=dv
用ΔΔ表示速度增加的百分比,實際上需要花的時間是:
t′=dv(1+Δ)=t1+Δt′=dv(1+Δ)=t1+Δ
這跟用精神啟發式方法得到的時間不同,用精神啟發式方法算出的時間是:
t′h=t(1−Δ).th′=t(1−Δ).
以ΔΔ變數為橫軸畫出上面兩個函式,我們就可以看出精神啟發式演算法的問題出在哪兒了。橙色線表示以正確方式計算出的時間差,藍色線表示用精神啟發式演算法計算出的時間差。
從圖中可以看出,當速度變化很小(即ΔΔ<10%)時,啟發式演算法得到的結果是比較準確的。當ΔΔ很小的時候,我們也可以用泰勒公式來進行分析,因為公式的前兩項和啟發式演算法的前兩項完全一致。因此,噹噹ΔΔ很小時,兩者的計算結果十分接近。
但是隨著ΔΔ不斷增加,兩者的計算偏差就會越來越大,因為泰勒公式的高次項就會變得越來越重要。速度增加到原來的20%的時候,精神啟發式演算法與實際結果的誤差就會達到4%左右。ΔΔ越大,誤差也會變得越來越大:橙色線跟藍色線的距離就會越來越遠,啟發式演算法計算得出的時間減少永遠不可能實現。。
如果想更多地瞭解我們的大腦如何用啟發的方法來代替耗時費力的思考,建議你可以看一下丹尼爾·卡尼曼的《快思維與慢思維》。書中並沒有用到我舉的這個例子,而是其他一些類似的錯誤例子。