動態規划算法、分治法與貪心法都應用於:大問題可以分解為子問題求解的題目
一、分治法:
分治法容易理解,主要思想是:將大問題分解成子問題,求解出不同子問題的解,由各個子問題的解得到最終解。所有的子問題可能相關,也可能不相關,如果子問題相關,則求解子問題的解時,會重復計算,進行不必要的計算,這時應該考慮下面的動態規划算法。如果不相關用分治法最好,不會進行多余的計算。由不同的子問題求最終問題的解,這是自底向上的方法。
二、貪心法:
貪心法的主要思想是:在對問題求解時,總是做出在當前看來是最好的選擇,也就是說,不從整體最優上加以考慮,他所做的是在某種意義上的局部最優解。貪心選擇是指所求問題的整體最優解可以通過一系列局部最優的選擇,即貪心選擇來達到。這是貪心算法可行的第一個基本要素,也是貪心算法與動態規划算法的主要區別。貪心選擇是采用從頂向下、以迭代的方法做出相繼選擇,每做一次貪心選擇就將所求問題簡化為一個規模更小的子問題。當一個問題的最優解包含其子問題的最優解時,稱此問題具有最優子結構性質。一般是一維問題。
三、動態規划
與貪心法類似:大問題的解包含其子問題的解,每一步由子問題向最終問題靠近時,保留子問題的解,以供使用。一般是二維問題。動態規划算法通常用於求解具有某種最有性質的問題。在這類問題中,可能會有許多可行解。每一個解都對應於一個值,我們希望找到具有最優值的解。動態規划算法與分治法類似,其基本思想也是將待求解問題分解成若干個子問題,先求解子問題,然后從這些子問題的解得到原問題的解。不同於分治法的是,子問題有相關性,一般需要保存子問題的解以供下面的求解使用。