為什麼會讀到這本書?導師推薦的。可以說第一開始聽到這本書名時完全是一臉蒙蔽,就像選本科畢設題目時是一樣的。。。就是在上半年當老師告訴我他是做形式化的,我一度以為我特麼的難道聯絡到自動化學院了?我可是一門心思向計算機的。後來直到暑假在家閒的發慌翻翻本科時候的軟體課本書時,居然看到了一章講形式化的。。。蜜汁尷尬,畢竟當年這門課最後我得了優。咳咳,扯遠了。這本書還是蠻適合剛接觸形式化的人看的,但是得有一定的數學功底(所以說我一開始完全看不懂)。
寫這系列部落格的目的,第一遍讀完這本書後感覺還是有很多知識點沒吃透,而且老師一再提到這本書的重要性,所以現在打算利用一周的時間再次回顧下這本書。老師例會時曾經要求我能脫離書去講看到了什麼,所以利用這系列博文讓自己對這本書也是對形式化有乙個基本的認識以便後期看相關的**。
這本書的第一章沒什麼好說的,就是介紹形式化方法,自己看看就可以了。第二章離散、資料結構的知識考研的時候都看過了,所以略講。重點是第三章,這是整本書的基礎。
第二章 預備知識
本章中的集合表示法(離散數學)、圖(資料結構)、字串(編譯原理)的知識,都是本科時候學過的,包括計算複雜性在演算法設計中也學過。所以基本就是複習以前的知識。這裡我想介紹的只有可計算性和計算複雜性。
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 這一類的問題被認為非常非常之難解。但是這還是可計算的問題,在可計算理論中存在不可解的問題。
HIT軟體構造學習筆記 第二章
2.1軟體生命週期與配置管理 大綱 一.軟體的生命週期 lifecycle of a software from 0 to 1 從無到有 from 1 to n 從有到好 軟體雖然不會磨損,但是需要維護和公升級,需要增加新的功能 二.傳統的軟體開發過程 主要過程 三.敏捷的開發過程 敏捷開發和傳統開...
軟體工程 第二章 可行性研究
2.1.可行性研究的任務 1.目的 用最小的代價,在盡可能短的時間內確定問題是否能夠解決 2.簡化了系統的分析和設計過程 3.研究路線 1.分析和澄清問題 2.匯出系統邏輯模型 3.探索若干重可供選擇的主要解法 4.對每種解法進行可行性研究 5.對每種可行性解法制定乙個粗略的實現進度。4.技術可行性...
《軟體管理沉思錄》第二章讀書筆記
最近在看軟體管理方面的書,看到此書感覺比較有感覺,特作一些總結性筆記以供以後參考。第二章 為高質量的專案指定計畫 一 最難以制訂計畫的時候,也是最需要計畫的時候。當專案感覺無法完成的時候是需要計畫一下的,原因如下 1 和管理層博弈一般都是管理層贏,如果沒有詳實的計畫,想要獲得更多的時間誰又能同意呢。...