是一種在數學、管理科學、電腦科學、經濟學和生物資訊學中使用的,通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。
動態規劃常常適用於有重疊子問題[1]和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於樸素解法。
動態規劃背後的基本思想非常簡單。大致上,若要解乙個給定問題,我們需要解其不同部分(即子問題),再根據子問題的解以得出原問題的解。
通常許多子問題非常相似,為此動態規劃法試圖僅僅解決每個子問題一次,從而減少計算量:一旦某個給定子問題的解已經算出,則將其記憶化儲存,以便下次需要同乙個子問題解之時直接查表。這種做法在重複子問題的數目關於輸入的規模呈指數增長時特別有用。
動態規劃在查詢有很多重疊子問題的情況的最優解時有效。它將問題重新組合成子問題。為了避免多次解決這些子問題,它們的結果都逐漸被計算並被儲存,從簡單的問題直到整個問題都被解決。因此,動態規劃儲存遞迴時的結果,因而不會在解決同樣的問題時花費時間。
動態規劃只能應用於有最優子結構的問題。最優子結構的意思是區域性最優解能決定全域性最優解(對有些問題這個要求並不能完全滿足,故有時需要引入一定的近似)。簡單地說,問題能夠分解成子問題來解決。
例項:斐波那契數列(fibonacci polynomial),最長公共子串行,01揹包問題
梯度提公升樹(gbt),還可以稱為梯度提公升決策樹(gbdt)、梯度提公升回歸樹(gbrt)等。是應用非常廣泛的機器學習演算法。gbdt屬於整合學習boosting演算法,其弱學習器可使用cart決策
幾種排序演算法思想
一 氣泡排序 已知一組無序資料a 1 a 2 a n 需將其按公升序排列。首先比較a 1 與a 2 的值,若a 1 大於a 2 則交換兩者的值,否則不變。再比較a 2 與a 3 的值,若a 2 大於a 3 則交換兩者的值,否則不變。再比較a 3 與a 4 依此類推,最後比較a n 1 與a n 的值...
幾種排序演算法的思想
一 氣泡排序 已知一組無序資料a 1 a 2 a n 需將其按公升序排列。首先比較a 1 與a 2 的值,若a 1 大於a 2 則交換兩者的值,否則不變。再比較a 2 與a 3 的值,若a 2 大於a 3 則交換兩者的值,否則不變。再比較a 3 與a 4 依此類推,最後比較a n 1 與a n 的值...
kNN演算法概要
一 演算法概述 1 knn演算法又稱為k近鄰分類 k nearest neighbor classification 演算法。最簡單平凡的分類器也許是那種死記硬背式的分類器,記住所有的訓練資料,對於新的資料則直接和訓練資料匹配,如果存在相同屬性的訓練資料,則直接用它的分類來作為新資料的分類。這種方式...