1. 程式人生 > >動態規劃與貪心演算法

動態規劃與貪心演算法

貪心演算法:

典型的應用有Huffman樹,直接構造兩個最小的連續相加,得到目標樹。

目標函式f=sum(li*wi);就是權重乘以葉節點的深度求和再求最小值。

如果目標函式修改為f=sum(li+wi)或max(li+wi)或任意函式g(li,wi),是否可以求解呢?

經過幾天研究,發現上面這兩個特殊的函式是可以求解的。

參見引理16.2,16.3。證明兩點。

1 最優方案等價於取兩個最小的合併最優。

2 取兩個最小的合併最優等價於構造新的葉節點最優。

對於求和,上述1 等價於對角之和之差恆為非負值。

上述2 等價於可以構造新節點的權重保持函式形式。完全類似於兩個引理。

動態規劃:

動態規劃是很強大的工具。

典型的有常見的矩陣鏈,最優二叉搜尋樹。

最優二叉搜尋樹其實和上面的貪心演算法有些聯絡。可以認為目標函式是很像的。

ARC問題目標函式也可歸結為Huffman樹的形式,只是有一些順序約束。只能用動態規劃來求解。

參考書目:

Dynamic Programming, A Computational Tool

演算法導論