動態規劃詳解(第一講)

2021-08-17 07:11:58 字數 974 閱讀 5889

第一講內容來自《演算法問題實戰策略》【韓】具宗萬著

##典型示例

應用動態規劃最有名的示例是二項式係數(binomial coefficient)的計算,二項式係數(nr

)\dbinom

(rn​

)表示在n個互不相等的元素中無順序的挑選出r個元素的方法的總數。二項式係數具有如下遞迴式:

( nr

)=(n

−1r−

1)+(

n−1r

)\dbinom=\dbinom+\dbinom

(rn​)=

(r−1

n−1​

)+(r

n−1​

)利用此遞迴式就可以編寫出對給定的n和r返回(nr

)\dbinom

(rn​

)結果值的函式bino(n,r),如**1-1所示:

//**1-1

int bino(int n,int r)

int main(){

//利用memset()初始化cache陣列

memset(cache,255,sizeof(cache));

//小技巧:用memeset函式想賦值-1的話,寫255

##分析製表的時間複雜度

分析這種"分治思想"的演算法的複雜度有乙個簡單的公式:

(子問題的個數)x(解乙個子問題時迴圈語句的執行次數)

利用上述公式計算bino2()的時間複雜度:r的最大值是n,所以計算bino2(n,r)時能夠分割的最大子問題個數是o(n

2n^2

n2)(注意並不嚴格等於n

2n^2

n2)。求解子問題時,因為沒有迴圈語句,所以時間複雜度為o(1),所以bino2()耗費的時間複雜度為o(n

2n^2

n2)xo(1)=o(n

2n^2

n2).

第一講 遞迴

遞迴 recursion 程式呼叫自身的程式設計技巧。遞迴滿足2個條件 1 有反覆執行的過程 呼叫自身 2 有跳出反覆執行過程的條件 遞迴出口 一 階乘 include using namespace std int recursive int i int main main 三 斐波那契數 inc...

矩陣第一講

特殊矩陣1.零矩陣 所有矩陣的所有元素全都為0 2.對角矩陣 乙個n階方陣除對角線上的所有元素都為0 2.數量矩陣 對角矩陣中對角線上元素為常數,3.單位矩陣 數量矩陣中對角線上上常數為1.4.行階梯矩陣 乙個矩陣的每個非零行 元素不全為零 的非零首元 第乙個非零元素 所在列的下標隨著行標的增大,並...

第一講 遞迴

遞迴 recursion 程式呼叫自身的程式設計技巧。遞迴滿足2個條件 1 有重複執行的過程 呼叫自身 2 有跳出重複執行過程的條件 遞迴出口 一 階乘 include using namespace std int recursive int i int main main 三 斐波那契數 inc...