マインドマップギャラリー 演算法通識
演算法通識完整版分享!內容包括認識演算法,設計演算法,演算法策略以及演算法前言。導圖豐富且詳細,朋友們快學習起來吧~
2023-03-14 21:49:53 に編集されました演算法通識
認識演算法
本質
演算法對明確性有極為嚴苛的要求
eg. 媒婆經驗:住得近-多近算近?離家近?離工作地點近?多地間優先順序…
演算法透過確定性保證解決問題
模型化是演算法優勢的本質
eg. 網購保溫壺,就一直推薦保溫壺;搜尋一個《風聲》,就推薦各種諜報片
模型化:對不同的問題,用同樣的方式看待,用同一套演算法解決
演算法沒有好壞之分,背後都是人的思想
複雜度
評價演算法效率的難題:用絕對時間評判效率不適用
硬體依賴
無窮大
時間複雜度
“基本操作的總數量”隨著演算法“輸入規模”而增長的“函數關係”
eg. 蓋一座10公尺高的金字塔,設計圖決定了要壘10萬塊石頭還是50萬塊石頭: 壘石頭=基本操作;10公尺=輸入規模;圖=壘石頭總量;壘石頭總量跟金字塔高度之間的函數關係就是時間複雜度
降低時間複雜度的方法
空間換時間
空間複雜度:演算法佔據的空間資源隨著輸入規模變大而成長的函數關係
犧牲一些儲存空間(硬碟/記憶體),換來更快的搜尋速度,是非常划算的
分治思想
eg. 從傅立葉變換到快速傅立葉變換,壓縮音訊耗時從1天到1秒
啟發
效用選擇模型:近似現實且保持可解性
效用:滿足感
eg. 美國選民投不投票受性別、族裔、教育程度、職業等多因素影響;影響效用的因素太多,甚至有些因素之間還有複雜的相關關係
模型太複雜就求不出解;這時必須簡化模型;假設所有因素之間的關係只是線性疊加,沒有複雜的交互作用;這叫線性效應模型
德州撲克:問題規模的減小
規模大到計算機也無法處理,就得想辦法丟掉一些訊息
eg. 德州撲克:把相似的狀態合併
探索與利用:迭代得到結果
eg. 影片網站剛開始推薦你各種內容,過一段時間開始推薦你最常看的內容
反思:演算法只會執行,不能負責;演算法出了問題,要回到人身上找答案
演算法不能對問題負責
eg. 兩家書店都以對方價格的倍數為自己定價,導致價格異常高
演算法不能對數據負責
eg. 拿冰紅茶做尿液檢查,糖超標,懷疑糖尿病
演算法不能對解釋負責
eg. IBM打造沃森醫療診斷系統,演算法無法提供解釋
設計演算法
演算法藍圖
明確問題
明確目的
eg. 配對到所有叫車乘客 or 盡可能快速地配對到更多乘客
明確限制條件
eg. 市區乘客等待時間不能超過1分鐘
明確評價標準
eg. 時間 or 成本 收益
建立模型
就是把現實問題轉化成演算法問題的過程,也是大量細節被抽象掉的過程
設計演算法之前,一定要建立數學模型
模型迭代非常重要
演算法選擇
由達成目標水準的高低,時間複雜度決定
迭代
演算法,硬體
建立模型
確定假設
確定對預測結果的精度要求,捨棄不重要的細節,模糊問題明確化、量化
驗證模型
用常識驗證;用歷史資料驗證
權衡可行性
要貼近現實,也要容易求解
演算法選擇
關係:模型與演算法並非一一對應
eg. 背包問題
選擇:品質與效率的權衡
eg. 投放線上廣告的決定需要瞬間完成,用貪心演算法;
eg. 規劃保護野生動物,要盡可能找到最優解,用分支定界演算法
進階:演算法工程師的更多考量
更偏好資料敏感度低、限制條件少、對資料依賴小的演算法
演算法策略
迭代
迭代演算法:透過循環重複某個固定操作,每一步以前一步的結果為出發點,逐步逼近答案的演算法
迭代演算法有效的條件:一,演算法必須收斂,二,不動點必須唯一
迭代策略允許在找解的過程中有誤差,而這個誤差減少的速度很快,所以迭代演算法的速度也很快
eg. 把芝加哥搜遍找車,很慢,這叫暴力演算法
eg. 用迭代演算法找車,第1步離車距離10公里,轉第1次彎進入第2步迭代時距離變成1公里,再迭代一次變成100米,這個距離在迭代算法中叫“殘差”
分治
分治演算法:拆大為小的回溯演算法;透過回溯,不斷分解同樣的問題,直到問題小到可以直接解決,然後再把小問題的解合併成原來問題解的演算法策略
eg. 網球比賽總裁判層層分包裁判工作
回溯:巢狀循環呼叫自己的過程
分治演算法有效的條件
能不能用:確保問題可以分解成與原問題類似的子問題,且這些子問題之間相互獨立
求解快不快
分治中的兩個重要操作-分解和合併,不是免費的
eg. 碰撞偵測:計算空間中100個運動的圓球哪些撞在了一起,要計算兩兩之間的距離,共計算4950次;把空間分成兩部分獨立檢測,就降低到2450次。分割空間時找到適合的分割位置,需要額外的計算成本。合併時發現某些球被從中間割斷,要判斷有沒有發生碰撞,還得額外計算,這是合併結果的成本。
如果分解問題&合併結果計算不複雜,分治策略能減少演算法的複雜度
分治演算法可以多CPU並行計算,而迭代演算法要求每一步以前一步的結果為出發點,依步驟依序計算,因此無法多CPU並行計算
動態規劃
解決想法:以終為始,以小建大
eg. 取糖果遊戲:最後誰面對4顆糖,誰輸
eg. 火箭垂直軟著陸:最後位置必須離指定位置非常近,火箭與地面的角度必須非常接近90度,著陸的速度必須非常接近0
面對多步驟的決策問題時,某一步決策的最優,包含且依賴對更小規模問題的最優策略,這就是最優子結構
eg. 拿糖果遊戲:最優策略應該是一開始拿兩顆糖;但如果未來在面對更少糖果的時候,不遵守最優策略,那現在拿兩顆糖也不會贏
動態規劃的效率會受圍度爆炸的影響。這時演算法工程師不一定會精確求解所有的子問題,很可能只求解其中的一部分,而且是非精確求解,對另外的子問題的解,只進行一個估計
分支定界
組合最佳化
要找到一個可行的解不難,但要找到最優解,特別難
eg. 找出樹上最大的蘋果:剪掉蘋果明顯小的分枝,留下少量樹枝再做比較
分支定界
eg. 找一個中學裡最高的學生
分支:國中/高中
定界:初中部春遊山洞1.8公尺高,無人需彎腰-「1.8公尺」就是初中部這個分支的上界
剪枝:若高中部有一個1.8公尺以上,即可淘汰整個初中部
當某個子搜尋空間能獲得的目標上屆,比不上某個已知的可行方案,就直接把這個子空間淘汰
如何讓分支定界法高效
取決於能多有效地剪枝;如果只分支,不剪枝,就和全部算一遍沒有差別
「提前停止」策略:若已求出的臨時最優解離真正最優解已很近,提前停止可大大節省時間
啟發式
遇到特別複雜的組合最佳化問題是,如果找不到最優解,可以改用啟發式演算法,找到不錯的可行解
啟發式演算法:要嘛符合人類直覺認識,要嘛符合自然法則
蒙特卡羅
適用:可能性太多,計算不了
蒙特卡羅:將問題中的隨機事件進行取樣,為有限個樣本進行獨立計算,最後把樣本結果進行統計
非常依賴參數的正確性,對揭示問題本質沒有太大幫助
演算法前沿
機器學習
機器學習演算法是一系列讓電腦自主學習的演算法,最適合用在人類無法用明確規則解決的問題上
機器學習學到很多人類沒教過、自己也不懂的細節
機器學習學到的是事物之間的複雜關係
學習策略:機器學習演算法是怎麼學習的
K鄰近演算法,基於記憶,最後表達出一堆歷史數據
eg. 英美法系中的判例法
決策樹模型,透過資料歸納,總結條件判斷,最後表達出一些複雜的條件判斷
神經網路模型,模擬神經訊號的傳遞,以及神經對外界不同訊息反應強弱不同的過程,最後表達出一系列參數的數值