---
# System prepended metadata

title: Homework XV

---

---
title: Homework XV
---
# P1
[CLRS 3rd] Exercise 34.1-5
## Topic
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.
## Solution
### a.
若subroutine只call常數次,則時間複雜度最多為 $O( (((n^{d_1})^{d_2})\dots)^{d_m})$
達不到 $O(n^n)=O(2^{nlg(n)})\in$ exponential 
所以加上additional work後還是
$O\left ( n^{d_1+d_2+\dots+d_m} + n^{c}\right )$	$\in$ polynomial time
### b.
假設n個subroutine都做時間複雜度為O(n)的運算使 $n\to n^2$
則 $sub_1:n=n$
$sub_2:n^2$
$sub_3:n^4$
$sub_4:n^8$
...
$sub_n:n^{2^{n-1}}$
所以時間複雜度會是 $O(n^{2^n})\in$ exponential

# P2
[CLRS 3rd] Exercise 34.1-6
## Topic
Show that the class P, viewed as a set of languages, is closed under union, intersection, concatenation, complement, and Kleene star. That is, if $L_1,L_2$∈P, then $L_1​∪L_2$​∈P,  $L_1∩L_2$∈P,  $L_1L_2$∈P, $\bar L_1 \in P$, and$L_1^* \in P$
## Solution
union : $L_1​∪L_2$​∈P, polynomial time(return $L_1$ or $L_2$  )
intersection : $L_1∩L_2$∈P, polynomial time(return $L_1$ and $L_2$  )
concatenation : $L_1L_2$∈P, polynomial time(return True if ($L_1$ and $L_2$), else false )
complement : $\bar L_1 \in P$, polynomial time(return not $L_1$  ) 
Kleene star : $L_1^* \in P$, use dynamic programming,which is $n^3$, so it is polynomial time
![](https://i.imgur.com/Qp7meJR.png)
### Example of kleene star 
![](https://i.imgur.com/ThMIPiB.png)


# P3
[CLRS 3rd] Exercise 34.2-3
- [ ] [name=Haneul]
## Topic
Show that if $HAM-CYCLE∈P$, then the problem of listing the vertices of a hamiltonian cycle, in order, is polynomial-time solvable.
## Solution
假設$HAM-CYCLE∈P$，我們可以用下面pseudocode的方法來找hamiltonian cycle，由於line.4處判斷是否為hamiltonian cycle花了polynomial time，因此符合題目所述的polynomial-time solvable
```pseudo=
For all node v ∈ V:
    For each pair {e1,e2} ∈ Ev: //Ev 代表所有接著節點v的edge 
        construct graph G' = (V,(E-Ev)∪{e1,e2})
        if G' contains a hamiltonian cycle: //line.4
            record the pair of {e1,e2}
            break
    if no pair of Ev get recorded
        return false
print all recorded pairs in order
return true 
```

# P4
[CLRS 3rd] Exercise 34.2-7
## Topic
Show that the hamiltonian-path problem from Exercise 34.2-6 can be solved in polynomial time on directed acyclic graphs. Give an efficient algorithm for the problem.

==Exercise 34.2-6:==
A hamiltonian path in a graph is a simple path that visits every vertex exactly once. Show that the language $\text{HAM-PATH}$ ={⟨G,u,v⟩:=  there is a hamiltonian path from u to v in graph G} belongs to $\text{NP}$.
## Solution
為了證明找到DAG上的HAM-PATH屬於$\text{NP}$, 要找到一個polynomial-time的驗證演算法
符合以下條件者為hamiltonian path:
1. 路徑為n個相異點 O(n)
2. 路徑中相鄰點在DAG裡有邊連結 O(n+m)
3. 路徑頭尾為u, v O(1)

在O(n+m)時間內可以驗證一條路徑是否為hamiltonian path, 因此找到DAG上的HAM-PATH屬於$\text{NP}$


# P5
[CLRS 3rd] Exercise 34.2-10
- [ ] [name=民]
## Topic
Prove that if NP≠co-NP, then P≠NP.
## Solution
假設 NP≠co-NP，讓 L ∈ NP\co-NP。因為P ⊂ NP ∩ co-NP 且 L ∉ NP ∩ co-NP，我們可得到 L ∉ P. 因此 P≠NP。
# P6
- [ ] [name=Joe]

[CLRS 3rd] Exercise 34.2-11
## Topic
Let G be a connected, undirected graph with at least 3 vertices, and let $G^3$ be the graph obtained by connecting all pairs of vertices that are connected by a path in G of length at most 3. Prove that $G^3$ is hamiltonian. (Hint: Construct a spanning tree for G, and use an inductive argument.)
![](https://i.imgur.com/8MIuwEi.png)
![](https://i.imgur.com/kIqrM0v.png)
## Solution
將G畫成spanning tree T，並將T中隨機一點v刪除，
這時T會因為斷點形成好幾個獨立的connected components，
依照這些connected components的大小分成三個部分討論。
PART1:size = 1
因為這些點到v的距離=1，所以到彼此的距離為2，根據定義$G^3$中的這些邊也有edge，所以可以把他們全部連在一起形成一個ham-cycle。
PART2:size = 2
假設x是和v連結的點，y是connected component中另一個點，
所以y到v的距離為2，根據定義$G^3$中y和v也相連，所以每個connected components都可以形成ham-cycle
PART3:size >= 3
根據size=2的結果，這些connected components中至少有兩點和v相連，又他們彼此間可以相連成為ham-cycle，所以同樣可以和v形成ham-cycle
因為這些ham-cycle都和v相連，彼此必定可以相連(距離<=3)，所以可以把這三個部份的connected components全部連成一個大的ham-cycle
因此$G^3$必定是ham-cycle
> 覺得有甚麼問題在跟我說一下[name=Joe][color=#f33]
> 再[name=Lin]
> 柏喬很棒[name=周]

# P7
[CLRS 3rd] Exercise 34.4-7
## Topic
Let $\text{2-CNF-SAT}$ be the set of satisfiable boolean formulas in $\text{CNF}$ with exactly 2 literals per clause. Show that $\text{2-CNF-SAT} \in P$. Make your algorithm as efficient as possible. (Hint: Observe that $x \vee y$ is equivalent to $\neg x \to y$. Reduce $\text{2-CNF-SAT}$ to an efficiently solvable problem on a directed graph.)
## Solution
(x $\wedge$ y)等價於 $\neg x \to y$, 一個括號的值若為true, 只有兩種可能:
1. $\neg x為true且y為true$
2. $\neg y為true且x為true$

所以為了讓CNF的值為true, 每個括號都要符合這個條件

若建立一個圖, 圖中的點是把所有括號裡的literals和他的相反值(x和$\neg x$), 邊是括號裡的literals決定的((x $\wedge$ y) 圖中就有$\neg x連到y$和$\neg y連到x$)
若有任何一個路徑的終點是自己的相反值(x到$\neg x$或相反), 則代表有一組布林值讓每個括號都是true, 因為每條邊都確定兩個布林值, 連成路徑代表布林值的一致性

對圖跑Floyd-Warshall algorithm$O(n^3)$可以確定點是否連通, 如果有一個路徑的終點是自己的相反值, 怎有答案, 找不到一條這樣的路徑則沒有答案
