ADA 6.6: Pseudo Polynomial 到底是不是多項式時間呢?
Pseudo Polynomial Time
Polynomial
polynomial in the length of the input (#bits for the input)
定義:我考慮我input的length(假設是n),如果我的演算法是跟這個n,呈現多項式的關係的話,那我就是一個polynomial的演算法
Pseudo Polynomial
polynomial in the numeric value
the time complexity of 0-1 knapsack problem is
- : number of objects
- : knapsack's capacity (non-negative integer)
polynomial in the numeric value
= pseudo-polynomial in input size
= exponential inthe length of the input
在01背包問題中,因為演算法除了跟length有關之外,又跟了一個不定的數字值w有關,所以他不能算是多項式關係,在數學中是呈現指數關係,所以我們另外把它定義為偽多項式。
Time Complexity Definition
example 1
對電腦來說此時的n是的關係
Time Complexity:
此時 才是真正的執行關係
example 2
Time Complexity:
此時 就是真正的執行關係
- "Dynamic Programming": solve many subproblems in polynomial time for which a navie approach would take exponential time
動態編程是指一個原本需要指數型時間的問題,可以被許多的子問題在多項式時間內解決
- When to use DP
- Whether subproblem solutions can combine into the original solution
當子問題可以被組合成原始問題的答案時
- When subproblems are overlapping
可以一直重複使用之前的子問題計算的值(免去重複計算)的時候(空間換時間)
- Whether the problem has optimal substructure
大問題的部分OPT也是子問題的OPT的時候
- Common for optimization problem
處理最佳化問題的時候(找最大值或最小值)
- Two ways to avoid recomputation
- Top-down with memoization
不常用的,跳著填表
- Bottom-up method
常用的,當表格的值需要全部被填上的時候,就會用
- Complexity analysis
- Space for tabular filling
考慮要填的表有多大,每一格會花多少時間
- Size of the subproblem graph
考慮子問題的表