胡侃學習計算機--理論之外
理論電腦科學漫談
早就答應russel的,今天有點時間,把欠債還上。
電腦科學和數學的關係有點奇怪。二三十年以前,電腦科學基本上還是數學的乙個分支。而現在,電腦科學擁有廣泛的研究領域和眾多的研究人員,在很多方面反過來推動數學發展,從某種意義上可以說是孩子長得比媽媽還高了。
但不管怎麼樣,這個孩子身上始終流著母親的血液。這血液是the mathematical underpinning of computer science(電腦科學的數學基礎),-- 也就是理論電腦科學。
現代電腦科學和數學的另乙個交叉是計算數學/數值分析/科學計算,傳統上不包含在理論電腦科學以內。所以本文對計算數學全部予以忽略。
最常和理論電腦科學放在一起的乙個詞是什麼? 答:離散數學。這兩者的關係是如此密切,以至於它們在不少場合下成為同義詞。
傳統上,數學是以分析為中心的。數學系的同學要學習三四個學期的數學分析,然後是復變,實變,泛函等等。實變和泛函被很多人認為是現代數學的入門。在物理,化學,工程上應用的,也以分析為主。
隨著電腦科學的出現,一些以前不太受到重視的數學分支突然重要起來。人們發現,這些分支處理的數學物件與傳統的分析有明顯的區別:分析研究的物件是連續的,因而微分,積分成為基本的運算;而這些分支研究的物件是離散的,因而很少有機會進行此類的計算。人們從而稱這些分支為「離散數學」。「離散數學」的名字越來越響亮,最後導致以分析為中心的傳統數學分支被相對稱為「連續數學」。
離散數學經過幾十年發展,基本上穩定下來。一般認為,離散數學包含以下學科:
1) 集合論,數理邏輯與元數學。這是整個數學的基礎,也是電腦科學的基礎。
2) 圖論,演算法圖論;組合數學,組合演算法。電腦科學,尤其是理論電腦科學的核心是演算法,而大量的演算法建立在圖和組合的基礎上
3) 抽象代數。代數是無所不在的,本來在數學中就非常重要。在電腦科學中,人們驚訝地發現代數竟然有如此之多的應用。
但是,理論電腦科學僅僅就是在數學的上面加上「離散」的帽子這麼簡單嗎?一直到大約十幾年前,終於有一位大師告訴我們:不是。
d.e.knuth(他有多偉大,我想不用我廢話了)在stanford開設了一門全新的課程concrete mathematics。 concrete這個詞在這裡有兩層含義:
第一,針對abstract而言。knuth認為,傳統數學研究的物件過於抽象,導致對具體的問題關心不夠。他抱怨說,在研究中他需要的數學往往並不存在,所以他只能自己去創造一些數學。為了直接面向應用的需要,他要提倡「具體」的數學。
在這裡我做一點簡單的解釋。例如在集合論中,數學家關心的都是最根本的問題--公理系統的各種性質之類。而一些具體集合的性質,各種常見集合,關係,對映都是什麼樣的,數學家覺得並不重要。然而,在電腦科學中應用的,恰恰就是這些具體的東西。knuth能夠首先看到這一點,不愧為當世計算機第一人。
第二,concrete是continuous(連續)加上discrete (離散)。不管連續數學還是離散數學,都是有用的數學!
前面主要是從數學角度來看的。從計算機角度來看,理論電腦科學目前主要的研究領域包括:可計算性理論,演算法設計與複雜性分析,密碼學與資訊保安,分布式計算理論,平行計算理論,網路理論,生物資訊計算,計算幾何學,程式語言理論等等。這些領域互相交叉,而且新的課題在不斷提出,所以很難理出乙個頭緒來。下面隨便舉一些例子。
由於應用需求的推動,密碼學現在成為研究的熱點。密碼學建立在數論(尤其是計算數論),代數,資訊理論,概率論和隨機過程的基礎上,有時也用到圖論和組合學等。
很多人以為密碼學就是加密解密,而加密就是用乙個函式把資料打亂。這就大錯特錯了。現代密碼學至少包含以下層次的內容:
第一,密碼學的基礎。例如,分解乙個大數真的很困難嗎?能否有一般的工具證明協議正確?
第二,密碼學的基本課題。例如,比以前更好的單向函式,簽名協議等。
第三,密碼學的高階問題。例如,零知識證明的長度,秘密分享的方法。
第四,密碼學的新應用。例如,數字現金,叛徒追蹤等。
在分布式系統中,也有很多重要的理論問題。例如,程序之間的同步,互斥協議。乙個經典的結果是:在通訊通道不可靠時,沒有確定型演算法能實現程序間協同。所以,改進tcp三次握手幾乎沒有意義。例如時序問題。常用的一種序是因果序,但因果序直到不久前才有乙個理論上的結果....
例如,死鎖沒有實用的方法能完美地對付。
例如,......
關於死鎖 re: 理論電腦科學漫談(6)
我簡單地覺得與「熵」這個東西有關. 沒有這麼複雜。關鍵在效率:對付死鎖的方法,例如死鎖檢測,都非常嚴重地減低效率,以至於得不嘗失,因為死鎖並不是一種經常出現的現象。所以在全域性上,一般都用所謂「鴕鳥演算法」,也就是假裝什麼都不會發生。在區域性上,例如你要設計乙個訪問共享資料的演算法,那麼你就要證明你的演算法在區域性上是deadlock free。至於它會不會導致全域性的死鎖,就煩不了許多了。
機器學習 計算學習理論
分析學習任務的困難本質,為學習演算法提供理論保證,並根據分析結果指導演算法設計。由於 d 是 的同分布取樣,因此 h 的泛化誤差等於經驗誤差的期望。經驗風險最小化 empirical risk minimization 原則令 h 為學習演算法 的輸出假設,滿足e h minh e h 則稱 滿足經...
機器學習 計算學習理論
如果你不是數學系的,就不要看這個了。由於下面內容是用來證明機器學習的方法的正確性,你能夠用機器學習來得到你想要的結果。然而對於程式設計或者使用這種方法的人來說,你僅僅要放心大膽地用即可了。就像你知道1 1 2,你並不須要知道它為什麼等於,反正你能夠用。下面使用到的來自上海交大楊暘老師的課件。例如以下...
計算機理論
作業系統跟計算機硬體是很大的關聯性,所以了解計算機理論對於學習 linux是有好處的。以下內容均摘自鳥哥的私房菜一書 計算機其實是 輸入指令與資料,經過 處理器和邏輯單元運算處理 後,產生或儲存成有用的資訊。簡單來說只要你有輸出裝置和輸入裝置,並且輸入資料讓機器產生資訊,這就可以叫做計算機了。計算機...