[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第4篇] P类复杂问题
這個是密碼學(xué)52件事第四篇,和理論密碼學(xué)的第一篇。在這篇中我被要求定義P類復(fù)雜問題。我對計算理論科學(xué)知道的非常少當(dāng)我開始我的PhD,而且我確信很多人和我一樣。因此這篇文章從最簡單的開始,如果你已經(jīng)會了你可以跳過前面的部分。首先我會描述復(fù)雜性的定義和為什么他很重要,然后我們定義圖靈機,最后是P類復(fù)雜問題,通過一個例子做總結(jié)。
這篇文章主要的內(nèi)容就是重寫Introduction to the Theory of Computation by Michael Sipser[1],我覺得他對我真的很重要。
Section 1: Complexity and Big O Notation
為了設(shè)計高效的程序,我們想知道計算機執(zhí)行給定任務(wù)有多難。問題在于,計算機的處理能力因硬件而異(例如,參考上周的52件事)。所以我們想要一個不依賴與執(zhí)行任務(wù)的機器的具體細(xì)節(jié)的任務(wù)難度的度量。其中一種方法就是限定一個特定型號的計算機執(zhí)行操作所需要的操作數(shù)。這就是所謂的(時間)復(fù)雜性理論。
不過操作的數(shù)量取決于任務(wù)的輸入,甚至輸入長度相同操作數(shù)都不相同。舉個栗子,假設(shè)我們設(shè)計一個程序來判斷你的輸入整數(shù)是不是質(zhì)數(shù)。如果我們輸入256,程序可能判斷的比輸入323更快。盡管它們的長度都是9.因為第一個數(shù)字的2就是它的一個因數(shù),第二個有更大的因數(shù)。因此我們通常給出一個最壞時間復(fù)雜的分析,當(dāng)我們記錄實際的運行長度的時候。因此我們獲得了一個t(n)的表達式。反應(yīng)了所有輸入的最長運行時間。
而且,當(dāng)輸入的長度n非常大的時候,我們能夠忽略表達式中除了最大項的項,也可以忽略任何實例的系數(shù)。這被叫做漸進分析。我們假設(shè)n是非常大的,并且詢問當(dāng)給定最差的n的時候。計算模型需要多少步能完成,然后我們把答案寫成O(t(n))。例如,如果我們發(fā)現(xiàn)需要 6n3-n2+1步。我們寫做O(n^3),因為所有的項都能被忽略。
Section 2:Turing Machines 圖靈機
如今我們給出這個第一節(jié)當(dāng)中最經(jīng)常被用的模型。首先,要明白一個字母表是一個非空有窮集。一個字符串是一個從字母表的符號序列。一個語言是字符串集的一部分。
圖靈機模型就是真實的計算機。它的內(nèi)存就是一個有限長度的紙條。任何時候,紙條的每一塊要么是空的要么是包含了字符表的中的字符。這個機器有一個讀寫頭能夠每次在紙帶上向左向右移動,或者在紙帶上進行讀寫。在機器運行的開始,紙帶最左邊n個都是輸入,剩下的都是空白的。(輸入中沒有空白的,這樣可以確定輸入結(jié)束的位置)。磁帶頭從最左邊的正方形開始,讀取一個輸入符號,然后根據(jù)轉(zhuǎn)換函數(shù)決定下一步要做什么。轉(zhuǎn)換函數(shù)取決于它當(dāng)前所讀取的內(nèi)容,和機器當(dāng)前的狀態(tài)。和返回:
- 一個新的狀態(tài)
- 另一個寫入的符號(可能跟之前的相同)
- 一個移動的方向(左或者右)
- 這個機器持續(xù)的運行,讀符號,計算轉(zhuǎn)換函數(shù),寫符號,移動,直到進入接受狀態(tài)或者拒絕狀態(tài)。
如果機器在一個接受狀態(tài)結(jié)束的話,我們說它接受了輸入。但是注意:它可能進入一個循環(huán)沒有接收也沒有拒絕。例如,它可能從不掛起。如果一個圖靈機接受一些語言的每個字符串和拒絕其它字符串,我們就說這個機器判定了這種語言。我們把這個過程看作機器測試這個輸入字符串是否是這個語言的一部分。給定一個語言,如果有一個圖靈機可以判定它,那么我們就說這個語言是可判定的。
這個模型的厲害就是一個圖靈機能做現(xiàn)代計算機所有的事情(被叫做Church-Turing論斷)。我們定義時間復(fù)雜類TIME(t(n))這樣的一類就是所有的能夠被時間復(fù)雜度為O(t(n))的圖靈所能判定的,然后我們就能把計算問題變成一個語言關(guān)系問題(輸入字符串是某種語言的成員嗎?這個表示整數(shù)的字符串屬于表示素數(shù)整數(shù)的字符串語言嗎?),同時可以將計算問題分類變成時間復(fù)雜度類。
Section 3: P類復(fù)雜問題
最終,我們終于到達了這個問題!如果t(n)=nk對一些k>0,同時O(t(n))被叫做多項式時間.P類復(fù)雜度問題就是那些圖靈機可以在O(t(n))時間內(nèi)可判定的語言。因為k可能非常大,圖靈機可能運行的非常慢。但是這個類是給粗略的模型,描述了計算機可以實現(xiàn)的功能。注意t(n)比如2n這樣時間的語言類與P類是完全不同的,增長速度如此之快,即使你對某些語言有一個決定,你可能會發(fā)現(xiàn)宇宙在你輸入之前就結(jié)束了!
我們用一個多項式時間的問題做一個例子。假設(shè)你有一個單向圖(一組點和邊,每兩個點之間最多有一條邊,每個邊有一個箭頭表示方向)。如果我們編碼這個圖,把兩個節(jié)點當(dāng)做一個單一字符串。我們可以形成一種由表示圖形的字符串和兩個節(jié)點組成的語言,這樣就可以沿著第一個節(jié)點的邊走,最終到達第二個節(jié)點。因此這個語言會有效率的回答是否有一個從節(jié)點A到節(jié)點B的路徑,這就是路徑問題,通過接受或者拒絕你輸入的圖或者節(jié)點。我們給出這樣的決策器,它能夠在多項式時間內(nèi)判定這個問題。
- 首先在A上做一個標(biāo)記
- 掃描圖的所有邊。如果你發(fā)現(xiàn)一個邊從標(biāo)記過的節(jié)點指向未標(biāo)記的節(jié)點,標(biāo)記這個未被標(biāo)記的節(jié)點
- 重復(fù)上述操作,直到?jīng)]有標(biāo)記新節(jié)點
- 如果B被標(biāo)記了,接受,否則,拒絕
這個過程成功的標(biāo)記了到A距離為1的所有節(jié)點,距離為2的所有節(jié)點。因此圖靈機顯然可以實現(xiàn)上面的過程?,F(xiàn)在我們考慮這個時間復(fù)雜度。步驟1和步驟4太容易了。所以我們集中注意力在步驟2和步驟3,步驟2包括了搜索輸入和在一個位置上放上標(biāo)記,這個過程明顯是多項式時間內(nèi)可以完成的。步驟3重復(fù)步驟2的次數(shù)不多于節(jié)點的數(shù)量,節(jié)點的數(shù)量肯定少于輸入的數(shù)量,因此這也是線性的。因此整個算法就是線性的。我們說這個路徑問題就是P類問題。
[1] http://www.amazon.co.uk/Introduction-Theory-Computation-Michael-Sipser/dp/0619217642
[2] http://en.wikipedia.org/wiki/Church–Turing_thesis
原文地址:http://bristolcrypto.blogspot.com/2014/10/52-things-number-4-complexity-class-p.html
轉(zhuǎn)載地址:https://www.cnblogs.com/zhuowangy2k/p/11517655.html
總結(jié)
以上是生活随笔為你收集整理的[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第4篇] P类复杂问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot中Word转PDF技
- 下一篇: unity开发罗技G29方向盘(制作操作