---
# System prepended metadata

title: ":::danger\nDesign Strategies for Computer Algorithms"

---

:::danger
Design Strategies for Computer Algorithms 
===
:::
# Prune and Search(一)
---
## 1.Definition 
**Divide and Conqure**的一個特例，**Divide and Conqure**是將原本的大問題
拆成許多小問題，將小問題解決就等於將原本的問題解決了。而**Prune and Search**是**Divide and Conqure**的一個特例，將原本問題分成許多小問題後，挑出其中對於解決問題有重要性的小問題來解決(**Search**)，放棄其他小問題(**Prune**)來減少解決問題所需要花的時間。
時間複雜度大多是$O(N)$
而通式為 $T(n) \leq T((1-\alpha)n) + p(n)$
$0 < \alpha < 1$ is the fraction to prune the solution sapce in each iteration 
而$p(n)$是每次iteration所花的時間


---
## Ex.The Selection Problem
#### Given distinct number $a_1, a_2,...,a_n$, determine the $kth$ smallest one.
#### 從一個數列中找到第$~kth~$個小的數字。
>解決問題的原則為
>*Median in the Median* 

**時間複雜度$~O(N)$**
1.先將所有數字分成數群，分群的時間複雜度為$O(N)$。
2.在將每群分別做排序，對常數數量排序的時間複雜度為$O(1)$(目前$O(N)*O(1)=O(N)$)
3.用Recurrsive找出每群中間的數字，並在找出在這些中間數字中的中間數(**Median and Median**)
   *假設總數為$~n~$分成$~r~$群在這Recurrsive中所花的時間複雜度為$T(\frac{n}{r})$*
4.將中間值當成$P$，用此$P$來作為index，來區分出$~<P~$或$~>P~$的區域在根據題目要求在特定區域尋找特定值。
![PIDS](https://i.imgur.com/EdvEu6a.png "")
所使用的Recurrsive function會有以下時間複雜度。

> $T(n) \leq T(n/5) + T(3n/4) + O(n)$
---
找到$P$要用$O(n)$的時間複雜度，在用$T(3n/4)$的時間去找在特定$P$範圍內答案
因為其他小問題因為$P$的原因而直接被捨棄所以會為$T(3n/4)$。

## Ex. The 2-dimensional linear programming problem

 **時間複雜度$~O(N)$** 
**Minimize**   $~~~a'x'+b'y'$
**Subject to**  $~a_ix+b_iy+c_i \leq 0\quad$ $i = 1,2,...,n$
先將其Simplify變成
找到最小的 $y$ 在 $a_ix + b_i y + c_i \leq 0$的限制條件下。
這個轉換須花$~O(N)~$的時間複雜度

### 問題分析
------
>- 在滿足給訂條件情況(Constraint)會產生一個半平面(Fig2直線上箭頭朝向的方向)。
>- 而這些Constraint所圍起來的範圍為Fessible Region。
>- 在Fessible Region中的最小$~y~$所對應的$~x~$值為$Optimal~Solution$。

### 問題分析(續)
1.先將$N$個Constraints分成三個群，分別是$~I^0, I^+, I^-$。(用$~b_i$來決定箭頭朝上朝下)
  >- $I^0~$ 
     May be combined into a single constraint 
     $u_1 \leq x \leq u_2$
  >- $I^+$
     $b_i$ 為正
     ![PIDS](https://i.imgur.com/DGhqgoa.png)
     $b_i$ 為負
  >- $I^-$
     ![PIDS](https://i.imgur.com/PqvXrAV.png)
  
2.不斷的跑$~x_m$就能求出在fessible region上$~I^-$最高點$~\alpha~$和$~I^+~$最低點$~\beta~$
(此處可用Prune來將問題簡化)
$\alpha=(\alpha_x,\alpha_y)~~$ $\beta=(\beta_x, \beta_y)$
$\alpha_x \leftarrow x_m\quad~~~\beta_x \leftarrow x_m~$
$\alpha_y \leftarrow max\{(-a_ix_m-c_i)/b~|~a_i+b_iy+c_i \leq 0 \in~I^-\}$
$\beta_y \leftarrow min\{(-a_ix_m-c_i)/b~|~a_i+b_iy+c_i \leq 0 \in~I^+\}$

3.在求出通過$~\alpha~$和$~\beta~$的$~maximum(mininum)~slope$分
別為$Smax(Smin)$和$Tmax(Tmin)$

![PIDS](https://i.imgur.com/K1nVdUb.png)

4.根據以上資料可以求出六種情況。

#### 六種情況
>- 最佳解在右邊
>![PIDS](https://i.imgur.com/5JJPnlf.png)
>- 最佳解在左邊
>![PIDS](https://i.imgur.com/9DqF38q.png)
>- 最低點即為最佳點
>![PIDS](https://i.imgur.com/v05RsTf.png)
>- 如果存在fessible region，最佳解會在右邊
>![PIDS](https://i.imgur.com/3eX1B9v.png)
>- 如果存在fessible region，最佳解會在左邊
>![PIDS](https://i.imgur.com/7qZSycs.png)
>- fessible region不存在(無解)
>![PIDS](https://i.imgur.com/7TSfCQk.png)
>

根據以上性質就能利用Prune and Search來解決這個問題
而詳細內容請看




