前言:最近做各大廠的筆試題,發現動態規劃和排列組合的題挺多的,於是認真研究了一下,寫在這裡備忘。
1.先丟擲數學上的公式
當a=b=1的時候,該二項式變成了
雖然二項式有很多特性,但是在計算機中我們只關注兩個特徵:即遞推關係和邊界條件,對應著兩個公式:
也就是動態規劃的狀態方程和初始狀態,如上圖所示的兩個關係,這樣看著很抽象,那麼先看如下圖的推導:
通過二項式與楊輝三角型的對比可以出它們是一一對應的,由此也就得出了這個重要的遞推關係:
它表示任意時刻 ( 第k個時刻,k是介於[0-n]之間任意的值) 的中間狀態,都是可以由上以時刻的值遞推出來的,這是二項式與楊輝三角型直觀對應得出的公式,當然也可以通過數學證明(太麻煩省略)。
因為計算機的變數在某乙個時刻只能存乙個值,這個值可以由之前的變數推出來,因此建立了依賴關係,用遞推關係來求解問題就可以保證在多項式時間複雜度內完成,比暴力搜尋要快。同時為了避免重複計算先前的結果,因此使用乙個二維表(矩陣)來快取結果。那麼按照楊輝三角型的特點,相鄰兩個子結果,也就是矩陣的元素(表示子結果的狀態),是按照上述關係依賴的。
動態規劃中通常是從結果向開始逆向遞推,結束條件就是另外乙個公式:
因此排列組合公式:
所以動態規劃三個主要步驟:1.抽象出當前的狀態;2.確定遞推關係(也就是狀態方程);3.確定初始條件(邊界)。
1.當前狀態即:i表示什麼,j表示什麼,dp[i][j]表示什麼
2.遞推關係即:,這是乙個模版公式,對於不同的題目/場景會不同,核心思想是找到如果有上乙個結果推出當前的結果,以楊輝三角形為例,當前值應該其上一行的當前列k 和當前列的左邊一列k-1之和。對於01揹包問題,當前物品為i,如果不選它,則是m[i-1][j],如果選了它則是m[i-1][j-w[i]]+vi,選和不選的兩個值則是有上乙個狀態的兩個相鄰結果推出來的。01揹包問題見下圖。
3.初始條件即:
小q歌單:就是以楊輝三角形來存所有的組合項:
合唱團:從n個元素中選擇k個,使這k個元素的乘積最大
有 n 個學生站成一排,每個學生有乙個能力值,牛牛想從這 n 個學生中按照順序選取 k 名學生,
要求相鄰兩個學生的位置編號的差不超過 d,使得這 k 個學生的能力值的乘積最大,求最大的乘積?
先這樣把,後面再整理。
突然覺得數學和計算機息息相關啊,後悔當初數學沒學好。
迭代 遞迴 動態規劃求二項式係數
對於學習c語言的一般都知道我們需要練習使用程式求二項式係數。今天我主要給大家分享使用迭代 遞迴 動態規劃求二項式係數,同時分析演算法時間空間複雜性。對於迭代和遞迴的概念,我之前也有講解,現在呢?給大家講解一下動態規劃的概念。動態規劃是五大常用的演算法之一,動態規劃過程是 每次決策依賴於當前狀態。又隨...
球迷購票問題(累加求排列組合種數 動態規劃)
盛況空前的足球賽即將舉行。球賽門票售票處排起了球迷購票長龍。按售票處規定,每位購票者限購一張門票,且每張票售價為50元。在排成長龍的球迷中有n個人手持面值50元的錢幣,另有n個人手持面值100元的錢幣。假設售票處在開始售票時沒有零錢。試問這2n個球迷有多少種排隊方式可使售票處不致出現找不出錢的尷尬局...
《組合數學》學習筆記 之 二項式係數
換言之,楊輝三角。由其可發現3個性質 1 binom binom 2 sum limits n binom 2 n 3 楊輝三角的項 binom 的值代表從最上的點到這一項的路徑數。設 n 是正整數,對所有的 x 和 y 有 x y n sum limits n binom x ky 在 y 1 時...