標籤:計算模型 如何 比較 定義 等價 電腦科學 字元 複雜 解決方案
時間:2016.11.12; 地點:南京江寧實驗室; 狀態:迷茫的研一;
為什麼會讀到這本書?導師推薦的。可以說第一開始聽到這本書名時完全是一臉蒙蔽,就像選本科畢設題目時是一樣的。。。就是在上半年當老師告訴我他是做形式化的,我一度以為我特麼的難道聯絡到自動化學院了?我可是一門心思向電腦的。後來直到暑假在家閑的發慌翻翻本科時候的軟體課本書時,居然看到了一章講形式化的。。。蜜汁尷尬,畢竟當年這門課最後我得了優。咳咳,扯遠了。這本書還是蠻適合剛接觸形式化的人看的,但是得有一定的數學功底(所以說我一開始完全看不懂)。
寫這系列部落格的目的,第一遍讀完這本書後感覺還是有很多知識點沒吃透,而且老師一再提到這本書的重要性,所以現在打算利用一周的時間再次回顧下這本書。老師例會時曾經要求我能脫離書去講看到了什麼,所以利用這系列博文讓自己對這本書也是對形式化有一個基本的認識以便後期看相關的論文。
這本書的第一章沒什麼好說的,就是介紹形式化方法,自己看看就可以了。第二章離散、資料結構的知識考研的時候都看過了,所以略講。重點是第三章,這是整本書的基礎。
第二章 預備知識
本章中的集合標記法(離散數學)、圖(資料結構)、字串(編譯原理)的知識,都是本科時候學過的,包括計算複雜性在演算法設計中也學過。所以基本就是複習以前的知識。這裡我想介紹的只有可計算性和計算複雜性。
1.可計算性
我們如何知道一個問題是可以計算的?所有的問題都可以計算嗎?存不存在通用的計算模型?這些都是理論電腦科學中的問題。在理論計算科學中利用一種只有四條語句的程式語言將其與可計算等價。如此可計算問題就可以等價為能否用這種語言寫出來。理論電腦科學已經證明了可計算的問題的規模是等價於自然數集,可是全部的問題是實數集的,這就意味著存在不可以被電腦計算的問題。圖靈提出的Turing機,可以與上面提到的程式等價,也就說明圖靈機是解決所有的可計算問題的通用機。
本章介紹了圖靈機,但是在後面完全沒用到啊,它只是問了後面的計算複雜度做引子,所以可以簡單看下,如果想深入學習可以看《可計算性與計算複雜性導引》這本書。
2.計算複雜度
演算法:求解一個問題需要遵循的、被清楚指定的簡單指令集合。
演算法的複雜度:估計一個演算法所需要消耗的時間或者空間的度量標準。
演算法的複雜性包括:時間複雜度和空間複雜度,確定或不確定的執行模型。利用圖靈機可以講時間複雜度等價為圖靈機的執行步數(圖靈機每次執行只消耗一個時間單位)。而空間複雜度則是圖靈機紙條的長度。
複雜度中的定義:
① O(f(N))如果存在兩個正常數c,c0使得當 N>=c 時有T( n ) <= O(f(N))
②Ω(f(N)) 如果存在兩個正常數c,c0使得當 N>=c 時有T(n)<= Ω(f(N))
③theta(f(N)) T(N) = theta(f(N)) 若且唯若T(N) = O(f(N)) 和 T(n)= Ω(f(N))
④o(f(N)) T( n ) 的增長率小於 o(f(N))
其中O(f(N))表示最壞情況下的複雜度,注意O(f(N))不確定,例如N^2 = O(N^2) 而N^2 = O(N^3)也是正確的。因為O這是定義了T(n)的複雜度小於O(f(n));在複雜度中,最重要的是最高階指數形式,並且一般捨去係數。
主要的複雜度類:
log --- 複雜度為O(logn)的問題
polylog----複雜度為O(P(logn))的問題
線性---複雜度為O(n)的問題
多項式---複雜度為O(P(n))的問題
指數---複雜度為O(2^P(n))的問題
二重指數-----複雜度為O(2^2^P(n))的問題
確定性與非確定性:確定性複雜度是指執行模型中每個狀態只有一個後繼選擇。而非確定的模型運行在繼續執行的路徑中作出非確定選擇,就是說在一個狀態上可以有多個後繼直接選取。
好了接下來就是比較重要(好用來裝逼)的定義了,考慮了上述三種元素的複雜度類:
①NL 非確定對數空間,很高效的演算法;
②P 確定多項式時間,這是一種高效的演算法,特別是多項式次數較低時;
③NP 非確定多項式時間,這類問題存在的問題是當將非確定轉換為確定的時候會引起時間上的指數級爆炸,但是很多這類問題可以使用啟發學習法的解決方案,其中機器學習中的很多技術就是解決NP問題的;
④PSPACE 多項式空間;
⑤EXPTIME 確定性指數時間,只能用到小規模問題上;
⑥NONELEMENTARY 這一類的問題被認為非常非常之難解。但是這還是可計算的問題,在可計算理論中存在不可解的問題。
《軟體可靠性方法》筆記(一)---第二章 預備知識