1. 程式人生 > >狀態壓縮類動態規劃(參考小藍書的總結)

狀態壓縮類動態規劃(參考小藍書的總結)

狀態壓縮類動態規劃

一、問題簡介

基於狀態壓縮的動態規劃,又叫集合動態規劃,顧名思義,這是一類以集合資訊為狀態的特殊的動態規劃問題,主要有傳統集合動態規劃和基於連通性狀態壓縮的動態規劃兩種。

如果有許多元素的狀態都直接影響到決策,都需要被考慮到,為每一個 元素的狀態都開一維陣列來儲存顯然是行不通的,於是就需要有一種便於識別和操作的方式記錄下各個元素的狀態,即對多個元素的狀態進行壓縮儲存,於是基於狀態壓縮的動態規劃應運而生。

二、特點

我們通常把這樣一類以一個集合內的元素資訊作為狀態且狀態總數為指數級別的動態規劃稱為基於狀態壓縮的動態規劃或集合動態規劃。基於狀態壓縮的動態規劃問題通常具有以下兩個特點。

①資料規模的某一維或幾維非常小。

②它需要具有動態規劃問題的兩個基本性質:最優性原理和無後效性。

三、預備知識

位操作是一種速度非常快的基本運算:有左移、右移、與、或、非等運算。

左移:左移一位,相當於某數乘以2,比如110左移1位變為1100<=>6變為12,表示為(110 << 1) = 1100,因此左移x位相當於該數乘以2^x。

右移:右移一位,相當於某數除以2,比如110右移1為變為11<=>6變為3,表示為(110 >> 1) = 11,因此右移x位相當於該數除以2^x。

與運算:按位進行“與”運算,兩數同一位都為1時結果為1,否則為0。例如101 & 100 = 100

或運算:按位進行“或”運算,兩位同一位都為0時結果為0,否則為1.例如101|100 = 111

非運算:按位取反。例如~101 = 010.

若當前狀態為s,對s有下列操作。