第一講內容來自《演算法問題實戰策略》【韓】具宗萬著
##典型示例
應用動態規劃最有名的示例是二項式係數(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...