【算法學習筆記十一】計算複雜性

計算複雜性是指根據解決問題所需的時間、空間或任何其他資源(如處理器數量和通信成本)對問題進行分類。

 一.圖靈機

字母\Sigma是一組有限的符號。語言L是從\Sigma中選擇的所有有限長度的符號字符串集合的子集,用\Sigma*表示。

標準的圖靈機只有一個工作帶,它被分割成單獨的單元。

每個單元包含\Sigma中的一個符號。圖靈機具有讀取和重寫單元中包含的符號的能力。

圖靈機在任何時刻都處於某種狀態。

對於工作帶上的當前狀態和當前掃描的符號,有限狀態控件指定下一步進入哪個狀態,在工作帶的掃描單元上打印哪個符號,以及以何種方式移動工作帶頭。

     k帶圖靈機

一個不確定性的k帶圖靈機是一個6元組M=(S,\Sigma,\Gamma,\delta,p_0,p_f),

1)S是一個有限狀態集;

2)\Gamma是一個有限帶字符集,它包括了特殊字符B(空格符);

3)\Sigma \subseteq \Gamma - \{B\},表示輸入字符集;

4)\delta爲轉移函數,它是映射S \times \Gamma ^k的元素到S \times ( (\Gamma - \{B\}) \times \{L,P,R\})^k的有限子集的一個函數;

5)p_0 \in S,爲初始狀態;

6)p_f \in S,爲終止或接受狀態。

一個k帶圖靈機M=(S,\Sigma,\Gamma,\delta,p_0,p_f)是確定的,\delta(p,a_1,a_2,...,a_k)包含最多一個元素。

圖靈機M的帶上從左端起已有字符是a^nb^n,後面跟無限多個空白符號B,M開始動作的第一步先讀到第一個b,並改寫爲x,然後左移去讀第一個a,並改寫爲x,又右移當發現x時,再看緊接着x之後是否爲b,若爲b,將其改寫爲x,然後再左移找a,若緊接x之前是a,又將其改寫成x,如此反覆進行。當找a時,如果不再有a,M應轉向找b,如果還能找到b,說明b的個數多於a的個數,則M停止,表示不接受。如果找不到b,說明a與b的個數相同,M應該進入終止狀態,表示接受。當找b時,出現空白符,說明a的個數多餘b的個數,M停止,不接受。

格局

設M=(S,\Sigma,\Gamma,\delta,p_0,p_f)是一個k帶圖靈機,M的一個格局是一個(k+1)元組,K=(p, \omega _{11} \uparrow \omega _{12},\omega _{21} \uparrow \omega _{22},..., \omega _{k1} \uparrow \omega _{k2}),其中p \in S並且\omega _{j1} \uparrow \omega _{j2}是M的第j條帶的內容,1≤j≤k。(箭頭指向後面字符的第一個字符)

初始格局可記爲(p, \uparrow x, \uparrow B,..., \uparrow B),其中x是初始輸入。終止或接受格局集合是所有格局(p_f, \omega _{11} \uparrow \omega _{12},\omega _{21} \uparrow \omega _{22},..., \omega _{k1} \uparrow \omega _{k2})的集合。

計算

圖靈機M在輸入x上的計算是一個格局的序列K_1,K_2,...,K_t,對於某個t≥1,其中K_1是初始格局,並且對於所有的i,2≤i≤t,K_i是從K_{i-1}經過M的一次移動得到的。這裏t稱爲計算長度。如果K_t是終止格局,那麼這個計算稱爲一個接受計算。

圖靈機M在輸入x上所用的時間記爲T_M(x),定義如下:

1)如果存在一個M在輸入x上的接受計算,那麼T_M(x)是最短接受計算的長度;

2)如果M在輸入x上不存在接受計算,那麼T_M(x)= \infty

設L是一個語言,f是一個從非負整數集合到非負整數集合的函數,稱L在DTIME(f)或NTIME(f) 中,如果存在一個確定性(或不確定性)圖靈機M,它的性能如下,對於輸入x,如果 x∈L,那麼T_M(x)≤f(|x|);否則T_M(x)= \infty

對兩個類P和NP可以形式的定義如下:

一個離線圖靈機M在輸入x上所用的空間記爲S_M(x),定義如下:

1)如果存在一個M在輸入x上的接受計算,那麼S_M(x)是應用最小工作單元個數的一個接受計算所用的工作帶單元;

2)如果M在輸入x上不存在接受計算,那麼S_M(x)= \infty

設L是一個語言,f是一個從非負整數集合到非負整數集合的函數,稱L在DSPACE(f)或NSPACE(f) 中,如果存在一個確定性(或不確定性)圖靈機M,它的性能如下,對於輸入x,如果 x∈L,那麼S_M(x)≤f(|x|);否則S_M(x)= \infty

P \subseteq PSPACE,NP \subseteq NSPACE 

離線圖靈機

一個不確定性的離線圖靈機是一個6元組M=(S,\Sigma,\Gamma,\delta,p_0,p_f),

1)S是一個有限狀態集;

2)\Gamma是一個有限帶字符集,它包括了特殊字符B(空格符);

3)\Sigma \subseteq \Gamma - \{B\},表示輸入字符集,它包含了兩個特殊符號#和$(分別爲左端標誌和右端標誌);

4)\delta爲轉移函數,它是映射S \times \Sigma \times \Gamma的元素到S \times \{L,P,R\} \times (\Gamma - \{B\}) \times \{L,P,R\}的有限子集的一個函數;

5)p_0 \in S,爲初始狀態;

6)p_f \in S,爲終止或接受狀態。

L=\{\omega \subset \omega ^R | \omega \in \{0,1\}^*\}\omega ^R\omega的逆串;

1)從左到右掃描輸入帶,將輸入帶內容拷貝到工作帶,直到讀寫頭到達符號C;

2)輸入帶讀寫頭繼續右移,每讀一個符號就和工作帶讀寫頭所指單元內容比較;

3)如果相同,工作帶左移一格,輸入帶右移一格,繼續此過程直至所有輸入處理完畢;

4)若C兩旁符號個數相同且匹配則接受,否則拒絕。

L \in DTIME(n)

在離線圖靈機的情況下,一個格局由3元組K=(p,i, \omega _{1} \uparrow \omega _{2})定義。其中p是當前狀態,i是由輸入頭指向的輸入帶上的單元號碼,並且\omega _{1} \uparrow \omega _{2}是工作帶上的內容。這裏工作帶頭正指向\omega_2的第一個字符。

複雜類之間的關係

一個從非負整數集合到非負整數集合的全函數T稱爲是時間可構造的,當且僅當存在一個圖靈機,在每一個長爲n的輸入,恰在T(n)步時停機。一個從非負整數集合到非負整數集合的全函數S稱爲是空間可構造的,當且僅當存在一個圖靈機,對於每一個長爲n的輸入上,在一個格局裏,其中恰有S(n)個它的工作空間的帶單元是非空時停機,並且在計算過程中沒有用過其他的工作空間。幾乎所有大家熟悉的函數都是時間和空間可構造的,例如n^k,c^n,n!

                               

證明c):設M是一個不確定性離線圖靈機,使對於所有長度爲n的輸入, M使用一個由s(n)≥log n爲上界的工作空間。設s和t分別是M的狀態和工作帶字符數,因爲M是以S(n)爲空間界的,並且S(n)是空間可構造的, M在長度爲n的輸入x上可能進入的不同格局的最大數是s(n+2)S(n)t^{S(n)}。這個表達式是狀態數、輸入帶頭的位置數、工作帶頭位置數、可能工作帶內容數的乘積。因爲S(n)≥log n,這個表達式以d^{S(n)}爲上界, d≥2是某個常數。因此, M不能做多於d^{S(n)}次移動,否則一個格局將不斷重複,機器將永不停機。不失一般性,我們可以假定,如果M接受,在進人接受狀態前它把帶都擦去並且把帶頭移到第一個單元。考慮一個確定性圖靈機M‘,在長度爲n的輸入x上,生成一個以M所有格局爲頂點的圖,並且在兩個格局間設置有向邊當且僅當從第一個格局遵照M的轉移函數一步可到第二個格局。應用s的空間可構造性計算出格局個數,然後M‘檢查在圖中是否存在一條從初始格局到惟一接受格局的有向路徑,並且當且僅當是這種情況下接受。對某個常數c≥2,這能夠在O(d^{2S(n)})=O(c^{S(n)})時間內完成(有n個頂點的有向圖的最短路徑能在時間O(n^2)找到)。顯然, M'接受和M同樣的語言,並且因此對於某個常數c≥2,這個語言是在DTIME(c^{S(n)})中。

如果S是一個空間可構造函數且S(n)≥logn,那麼NSPACE(S(n)) \subseteq DSPACE(S^2(n))

對於任意k≥1,NSPACE(n^k) \subseteqDSPACE(n^{2k}),NSPACE(log^kn) \subseteqDSPACE(log^{2k}n),而且NSPACE=PSPACE;

存在一個確定性算法解GAP問題,它用O(log^2n)空間。

設S(n)和S(n')是兩個空間可構造的空間界限,假定S‘(n)是o(S(n)),那麼DSPACE(S(n))包含一個語言,它不在DSPACE(S'(n))。

如果L由一個k帶圖靈機在時間T(n)中被接受,那麼L由一個2帶圖靈機在時間T(n)logT(n)中接受。

設T(n)和T'(n)是兩個時間界,使T(n)是時間可構造的並且T'(n)logT'(n)是o(T(n)),那麼DTIME(T(n))包含一個不在DTIME(T’(n))中的語言。

 

二.下界

最優算法上界和問題的下界是漸進地相等的。

平凡下界

考慮用直觀的論據,並不藉助任何計算模型或進行復雜的數學運算就能夠推導出來的下界。

下面給出兩個建立平凡下界的例子。

考慮在n個數的表中尋找最大值的問題。顯然,假設這個表是沒有排序的,則必須檢查表中的每個元素,這意味着必須爲每個元素花費\Omega(1)時間。因此在一個沒有排序的表中尋找最大值的任何算法必須花費\Omega(n)時間。

考慮矩陣乘法問題。兩個nxn矩陣相乘的任何算法必須計算出恰好n^2個值。因爲在每個值的計算中至少要花費\Omega(1)時間,因此兩個nxn矩陣相乘的任何算法的時間複雜性是\Omega(n^2)

決策樹

分支程序的通常表示形式是一種稱爲決策樹的二叉樹。每個內部頂點表示一個決策。首先進行根表示的測試,然後根據結果將“控制”傳遞給它的子節點之一。控件繼續從一個頂點傳遞到它的一個子節點,每種情況下的選擇取決於在頂點處的測試結果,直到到達一個葉節點。所需的輸出在到達的葉子處可用。

搜索任何n個元素地排序序列地算法,在最壞情況下必須執行地比較次數不少於\lfloor logn \rfloor+1次;

設T是一顆至少有n!個葉子的二叉樹,則T地高度至少是nlogn-1.5n=\Omega(nlogn)

任何基於比較地對n個元素排序地算法,在最壞情況下必須執行\Omega(nlogn)元素比較。

代數決策樹

一個在有n個變量x1,x2, .,xn集合上的代數決策樹是一棵具有這樣性質的二叉樹,它的每個頂點用如下方法標記一個語句,與每個內部頂點聯結的實質上是一個測試形式的語句。如果f(x1, x2, .,xn ): 0則轉到左孩子,否則轉到右孩子。這裏“:"代表來自集合{=,<,≤}的任何比較關係。另一方面,一個yes或no的回答和每個葉子節點聯繫。

\Pi是一個判定問題,它的輸入是n個實數x1,x2, ...,xn的集合,則與\Pi聯結的是一個n維空間E^n的子集W,使得點(x1,x2,.,xn)在W中當且僅當問題\Pi在輸入爲x1, x2, .,xn時回答是yes。我們說,一棵代數決策樹T判定W中的成員資格,如果每當計算起始於T的根和某點p= (x1 ,x2,... ,xn),控制最終到達一個yes葉子當且僅當(x1, x2, ...,xn)∈W。

設W是E^n的子集,並設T是接受集合W的n個變量線性決策樹,則T的高度至少是\lceil log(\#W) \rceil

設W是E^n的子集,並設d是一個固定的正整數。則接受W的任意一個階爲d的代數決策樹的高度是\Omega(log(\#W)-n)

在代數決策樹計算模型下,對n個實數排序,在最壞情況下需要\Omega(nlogn)次元素比較;

在代數決策樹計算模型中,任何求解ELEMENT UNIQUENESS(元素唯一性問題)問題的算法在最壞情況下需要\Omega(nlogn)次元素比較。

線性時間歸約

如果A的下界是\Omega(f(n)),n=o(f(n)),A \propto _n B \Rightarrow B的下界爲\Omega(f(n))

推廣:

如果A的下界是\Omega(f(n)),g(n)=o(f(n)),A \propto _{g(n)} B \Rightarrow B的下界爲\Omega(f(n))

在代數決策樹計算模型中,求解CONVEX HULL(凸包問題)的任何算法在最壞情況下需要\Omega(nlogn)次元素比較。

在代數決策樹計算模型中,求解CLOSEST PAIR(最近點對問題)的任何算法在最壞情況下需要\Omega(nlogn)次元素比較。

在代數決策樹計算模型中,求解EUCLIDEAN MINIMUM SPANNING TREE(歐幾里得最小生成樹問題)的任何算法在最壞情況下需要\Omega(nlogn)次元素比較。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章