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