2011/5/6
ion problem
Decision problem: 輸出是 yes/no (1/0) ( 可不可以找到答案 )
Optimization problem: 輸出是最好的解 ( 可以的答案中找出最好的那個 )
例子 : Shortest path v.s. Path
NP-Complete 只適用於 decision problems
Decision problem v.s. optimizat ion problem
怎麼將 optimization problem 轉換成 decisio n problem 呢 ?
對要 optimize 的值設定一個 bound
將 Shortest path 轉換成 decision problem:
給定 graph G, vertices u & v, integer k, 有沒有從 u 到 v 的路徑使用少於 k 個 edge?
用 Reduction 證明”一樣難”
假設以下兩樣存在
則 B 也沒有 polynomial-time algorithm 可以 解
使用反證法 , 假設有
A: no polynomial-time algorithm exist
Polynomial-time reduction algorithm:
instances of A instances of B
B: polynomial-time algorithm Polynomial-time reduction
algorithm:
instances of A instances of B
A: polynomial-time
algorithm 矛盾 . 所以 B 也沒有 .
易解” ?
雖然是 polynomial time, 但實務上這麼高次的多項 式並不常見
通常如果找到一個 polynomial-time algorithm, 比 較快的方法很快也會被找到
通常使用不同的 computation model( 之後自動機會 教到 , 現在可以想像是單 CPU v.s. 多 CPU 的機器 ) , 某 model 可用 polynomial-time 解的問題在另外一 個 model 也可用 polynomial-time 解
Polynomials are closed under addition, multipl ication, and composition.
Abstract problem
I: instances
of problem S: solutions
Q: Abstract problem
(binary relation) Decision problem:
S={0,1}
Example: PATH
�=
⟨ �,�,� ,� ⟩
����
(�
)= 0
if a shortest path from u to v has at most k edges
otherwise
Encoding
A set S of
abstract objects The set of
binary strings encoding:
mapping Polygons,
numbers, graphs, functions,
ordered pairs, programs, …
Some more definitions
Concrete problem: 一個 problem 的 instance 是 binary string 的 set, 則稱為 concrete p roblem.
An algorithm solves a concrete problem in O(T(n)): 一個 problem 的 instance 長度為 n (i 的長度 , 即為 binary string 長度 ), 而 此 algorithm 可在 O(T(n)) 時間產生解
A concrete problem is polynomial-time sol vable: 有一個的 algorithm 可以解此 problem
P 的正式定義
The complexity class P:
The set of concrete decision
problems that are polynomial-
time solvable
Abstract problem 轉換成 encoding problem
I: instances of problem
S: solutions Q: Abstract
problem
(binary relation) Decision problem:
S={0,1}
e(I): {0,1}*
�: � →
{ 0,1 }
∗e(Q): Concrete problem
Encoding 和花的時間有關嗎 ?
有 !
極端的例子 : unary
input: integer k, running time:
假設 encoding 是 unary: 11111…1111
則在這樣的 case 下
input length: n running time:
可是如果以正常的 binary encoding 表示
input lennth: running time:
Encoding 決定是 or !!
k 個
Encoding 和花的時間有關嗎 ?
然而如果我們不考慮這麼極端的例子 (unary), 大部分的 e ncoding 都不會影響到一個問題是否可以在 polynomial ti me 解決 .
例 : 使用三進位數和二進位數是沒有差別的 , 因為我們 可以在 polynomial time 裡面將三進位數轉換成二進位數 .
f: {0,1}*{0,1}*
input output
如果 f 花 polynomial time 可以把任何 input 轉成 output, 則稱為 polynomial-time
computable
Polynomially related
I: instances of problem
�
1 : { 0,1 } ∗
� 1:� →
{
0,1}
∗ � 2:� →{
0,1}
∗�
2 : { 0,1 } ∗
�
12( �
1( �) ) =�
2( �)
�
21( �
2( �) ) =�
1(�)
如果有和是 polynomial-time computable, 則和為
polynomially related.
I: instances
of problem S: solutions
Q: Abstract problem
(binary relation) Decision problem:
S={0,1}
�
1 : { 0,1 } ∗
� 1:� →
{
0,1}
∗: Concrete problem
� 2 : { 0,1 }
� 2:� →
{
0,1}
∗: Concrete problem
polynomial ly related
if:
Then: if and only if
因為是對稱的 , 所以只需要證明一個方向 .
假設可以在時間內解決 (for some constant k)
假設對每個 problem instance i, 轉換成需花 (for some constant c),
則解決 (input 為 ) 先花轉換成
再解決 (input 為 ), 花
c, k 都是 constant, 因此為 polynomial time
只要 encoding 都是”合理的” (“ 簡要的” ) 表示方式 , 一個問題的
複雜度 ( 能否在 polynomial time 裡面解掉 ) 不會被 encoding
影響 .
A Formal-language Framework
An alphabet : a finite set of symbols
A language over : 使用裡面的 symbol 組合 而成的字串 ( 不一定包含全部可能的字串 )
Ex: , (over )=
empty string:
empty language:
: the language with all strings over
Operations on languages:
Union, intersection
Complement:
Concatenation of :
Closure or Kleene Star:
…
concatenation 自己 k 次
應用 formal language framework…
Decision problem Q 的 set of instances 為
Q 的主要特性可以想成是會產生答案為 1(yes) 的這些 instances
因此可以把 Q 重新定義為一個 language over , 而
例子 : PATH= is an undirected graph, is an int eger, and 從 u 到 v 在 G 裡面有一條路徑含有最多 k 條 edge
x, A outputs 1
An algorithm A rejects a string if, given input x, A outputs 0
The language accepted by an algorithm A is the s et of strings
注意 : L is accepted by A, 不一定表示會被 A reje ct! (ex. 無窮迴圈 )
A language is decided by an algorithm A if every binary string in L is accepted by A and every bi nary string not in L is rejected by A
A language is accepted in polynomial time if it
is accepted by A and if A accepts x in time for
a constant k and any length-n string .
: PATH
The language PATH can be accepted in polynomia l time. 這句話什麼意思 ?
如果可以找到解 ( 從 u 到 v 在 G 裡面有一條路徑含 有最多 k 條 edge), 則可以在 polynomial time 裡面 說”有 (1, yes)”!
可以嗎 ? 可以 ! 用 BFS 找出最短路徑 , 然後看有 沒有比 k 大 ( 只需 polynomial time)
假設我們設計這個 algorithm 發現比 k 大的話就無窮 迴圈 , 這樣的話就沒有 decided in polynomial ti me.
義 complexity class P
Complexity class: a set of languages, 是 不是在其中由 algorithm 的 complexity measu re 決定 (ex. running time), 而此 algorithm 是決定一個 string x 是否屬於 L.
使用這個方式 , 我們可以重新定義 P 這個 com plexity class:
� ={ � ⊆ { 0,1 } ∗ :
Proof:
The class of languages decided by polynomi al-time algorithms 是 the class of languages accepted by polynomial-time algorithms 的 su bset.
所以我們只需要證如果 L is accepted by a poly nomial-time algorithm, 它也可以 decided by a polynomial-time algorithm.
假設 L 是被某 polynomial-time algorithm A acc ept.
我們要利用 A 做成一個 algorithm A’ 可以 decid
es L.
s for a constant c
對任何 input x, A’ 利用 A, 先執行 steps.
如果這時候 A accept x 了 , A’ 就 accept x.
如果 A 還沒 accept x, A’ 就 reject x.
A’ 使用 A 的 overhead 不會超過一個 polynomi al factor, 所以 A’ 是一個可以 decide L 的 polynomial time algorithm.
accepts/rejects/decides L
告訴你某個 instance 是 不是有解 ( 在 L 裡面 )
Algorithms that verify L with a certificate
給你一個 certificate ( 可能是答案 ), 可以讓你 檢查某個 instance 是不 是有解 ( 在 L 裡面 )
給和一條 path p, 我們可以檢查 path 是不是 真的是在 G 中 uv 的 path, 且長度是不是不 超過 k. 此 p 是一個 certificate, 用來幫助 algorithm 看此 instance 是不是屬於 PATH.
對 PATH 來說其實沒有太大差別 , 因為本來就可以在 polynomial time decide PATH. 但是對於其他問題可能有差別 !
G=(V,E) is a simple cycle that contains eac h vertex in V.
Not all graph is Hamiltonian ( 找不到 Hamilt onian cycle)
HAM-CYCLE={: G is a Hamiltonian graph}
Hamiltonian cycles
暴力法 ?
假設使用 adjacency matrix, n= 是 G 的 encod ing 的長度 ( 也就是 ,m 是 G 中 vertex 數 )
檢查所有的 vertex permutation 需要 not fo r any constant k.
目前還找不到 polynomial time algorithm to decide/accept HAM-CYCLE
Verify 會簡單一點嗎 ?
會 !
假設告訴你某一個 graph G 是 Hamiltonian, 然後告訴你一個 vertex 的序列 (certificate) 可以組成 Hamiltonian cycle.
則我們可以在 polynomial time 裡面檢查 :
這個 vertex 序列是不是真的是 G 裡面的 vertex 的 permutation
vertex 序列的相鄰 vertices 之間是不是在 G 中
有那個 edge
Verification Algorithm
Verification Algorithm: Algorithm
A
with two arguments : Ordinary input string x
Binary string y (certificate)
A
verifies an input string x if there exists a certifi cate y such that A(x,y)=1. The language verified by a verification algorithm A is
如果 x 在 L 裡面 , 則一定找得到 y.
如果 x 不在 L 裡面 , 則一定找不到 y.
The complexity class NP
Complexity class NP: the class of languag es that can be verified by a polynomial-t ime algorithm.
A language L belongs to NP if and only if there exist a two-input polynomial-time a lgorithm A and a constant c such that
L=
Then algorithm A verifies L in polynomial time.
What is in NP?
HAM-CYCLENP
if , then . Why?
可以做出一個 algorithm 是完全不甩 certific ate 的 , 就可以模擬出 verification algorit hm 的效果
意思就是說 .
但 P=NP or not? ( 尚未得知 )
class NP is closed under complement? ( 尚 未得知 )
意思就是說的話 , 否 ?
co-NP: all languages that satisfies
NP-Complete languages
“The hardest languages in NP”
If NP-P is nonempty, then these in NP-Com plete are in NP-P (such as HAM-CYCLE)
Reducibility 解一個破全部 , 一箭千雕
Reducibility
如果 Q 可以 reduce 成 Q’, 則表示任何一個 Q 的 instance 都可以”換句話說”變成 Q’ 的一 個 instance
一元一次方程式 : ax+b=0 可以視為一元二次方 程式的特例 : , 解出來可以得到對應的一元一 次方程式解 .
如果一個問題 Q 可以 reduce 成另外一個問題 Q
’, 則 Q 不會比 Q’ 難解 .
Reduction
is polynomial-time reducible to , ( 寫 成 ) if there exists a polynomial-time co mputable function f: such that for all , if and only if .
f: reduction function
用來計算 f 的 polynomial-time algorithm F : reduction algorithm