# Hw14 - Q2
###### tags: `演算法`, `109-2`
## Question
**Exercises 34.1-5**
Show that if an algorithm makes at most a constant number of calls to polynomial time subroutines and performs an additional amount of work that also takes polynomial time, then it runs in polynomial time.
Also show that a polynomial number of calls to polynomial-time subroutines may result in an exponential-time algorithm.
## Mein Answer
### 1
**題目**
呼叫 常數 次 polynomial-time 的子程式後,再多做一些 polynomial-time 的事情後,這支程式依舊會是 polynomial-time
**證明**
假設子程式總共有 $y$ 個,其中複雜度最高為 $O(n^k)$
多做的事情複雜度為 $O(n^d)$
則子程式們總複雜度最多為 $O(n^{yk})$
加上多做的事情,複雜度仍為 $O(n^{yk+d})$
因為 $y, k, d$ 為常數,所以這還是 polynomial
### 2
**題目**
呼叫 polynomial 次 polynomial-time 的子程式可能會讓整隻程式變成 exponential-time
**舉個正例:**
演算法魔王錦汶
在段考出 c 道演算法題目
結果錦汶出的每一題都超爆贛難
學生連看都看不懂,更遑論能答對了
不過因為怕被學校關切,錦汶設有補考機制,
補考的題目數依上一次題目數量而定,每一輪是上一輪的平方
假設學生在某次補考中,突然出竅竟然能及格,這次補考一共幾題?
轉換成蘇東code會變這樣
```python=
PROCEDURE JINWEN_HELL():
c = sqrt(c)
for round in 1 to n:
c = ALGORITHM_QUIZ(c)
PROCEDURE ALGORITHM_QUIZ(q_count):
q_count *= q_count
for q in 1 to q_count:
DO_ALGORITHM()
return q_count
PROCEDURE DO_ALGORITHM()
# Fuck up the question
# Complexity: 1
```
| 第幾輪補考 | 有幾題 |
| ---------- | ------ |
| 1 | c |
| 2 | c^2 |
| 3 | c^3 |
| 4 | c^4 |
| n | c^n |
JINWEN_HELL 考試的輪數為 $n$,是 linear,小於 polynomial
ALGORITHM_QUIZ 的複雜度 $n^2$,也是 polynomial
但是總複雜度會變成 $c^n$,可怕的 exponential