為什麼是算法導論?
偷偷告訴你:
《算法導論》可以說是最易被人謊稱讀過和聽說過最多的IT技術書籍,謊稱讀過的人可以提高逼格,聽到的人覺得對方真牛,好吧,然後就只是剩下兩個人之間面面相覷了~
所以為了能可以順利裝B~假期當然推薦《算法導論》!
《算導》的地位
在江湖忠流傳的各種版本「所有程式設計師必讀之書」的清單中,《算法導論》就佔據了半壁江山。
這本書將嚴謹性和全面性融為一體,深入討論了各種算法。實際上,幾乎沒有讀者會讀完整本書。不過,全書各章自成體系,可以作為獨立的學習單元。
它是全球讀者最多的算法聖經。
該書的特點是選材經典,內容翔實,結構合理,邏輯清晰。每章前半部分介紹了講授和學習算法的有效方法,後半部分為更專業的讀者和求知慾強的學生提供了更引人入勝的資料來討論這個迷人領域的各種可能性和挑戰,對本科生的數據結構課程和研究生的算法課程而言是非常棒的教科書。
NP完全問題與多項式時間
《算導》第一章第一節就出現了NP完全問題,那麼何為NP完全問題呢?
我們知道,生成問題的一個解通常比驗證一個給定的解時間花費要多得多。如果沒有提示而尋找問題的解決方案永遠是最耗時間的,我們就以例子引入:在一個周六的晚上,你參加了一個盛大的晚會。由於感到局促不安,你想知道這一大廳中是否有你已經認識的人。你的主人向你提議說,你一定認識那位正在甜點盤附近角落的女士羅絲。不費一秒鐘,你就能向那裡掃視,並且發現你的主人是正確的。然而,如果沒有這樣的暗示,你就必須環顧整個大廳,一個個地審視每一個人,看是否有你認識的人。
有些計算問題是確定性的,比如加減乘除之類,你只要按照公式推導,按部就班一步步來,就可以得到結果。但是,有些問題是無法按部就班直接地計算出來。比如,找大質數的問題。有沒有一個公式,你一套公式,就可以一步步推算出來,下一個質數應該是多少呢?這樣的公式是沒有的。再比如,大的合數分解質因數的問題,有沒有一個公式,把合數代進去,就直接可以算出,它的因子各自是多少?也沒有這樣的公式。
這種問題的答案,是無法直接計算得到的,只能通過間接的"猜算"來得到結果。這就是非確定性問題。而這些問題的通常有個算法,它不能直接告訴你答案是什麼,但可以告訴你,某個可能的結果是正確的答案還是錯誤的。這個可以告訴你"猜算"的答案正確與否的算法,假如可以在多項式時間內算出來,就叫做多項式非確定性問題。而如果這個問題的所有可能答案,都是可以在多項式時間內進行正確與否的驗算的話,就叫做完全多項式非確定問題。
完全多項式非確定性問題可以用窮舉法得到答案,一個個檢驗下去,最終便能得到結果。但是這樣算法的複雜程度,是指數關係,因此計算的時間隨問題的複雜程度成指數的增長,很快便變得不可計算了。
人們發現,所有的完全多項式非確定性問題,都可以轉換為一類叫做滿足性問題的邏輯運算問題。既然這類問題的所有可能答案,都可以在多項式時間內計算,人們於是就猜想,是否這類問題存在一個確定性算法,可以在多項式時間內直接算出或是搜尋出正確的答案呢?這就是著名的NP=P?的猜想。
何為多項式時間呢?
多項式時間就是指時間複雜度是個多項式 或者說,就是這個程序運行的時間隨著數據規模n變化的函數為 f(n) 那麼,f(n)是個多項式函數,那麼就可以說是控制在多項式之內.
關於《算導》的初步介紹就到這裡了!是不是感覺到《算導》的高大上了?假期真的不要去看看嗎?
註:本篇文章僅代表作者個人觀點