最近無事 抽出點時間來整理一下演算法 希望對自己有進一步的幫助和對學習演算法的同行有一些幫助吧!
講到演算法 這個詞是很重乙個解決問題的途徑 無論在什麼行業 演算法都是很重要的。
不管你是否承認,無論哪種軟體開發專案,幾乎所有的程式設計師,開發者在日常工作中都要同資料結構和演算法打交道。當我們閱讀原始碼,對大型軟體專案進行層層抽絲剝離之後,呈現我們面前的不再是複雜的層次結構和模式,而是回歸到了程式的本質——資料結構和演算法上來。有關資料結構和演算法題材的經典書籍有很多,如《計算機程式設計藝術》、《演算法導論》等,但本書絕對不同於之前的相關書籍 。當我們在學習資料結構和演算法時,往往花費了大量的時間糾結於各種公式和理論證明上,學究氣息過於濃厚而少了幾分實踐感。但相關主題的書籍多是與偽碼的形式來表達演算法思路,缺乏同軟體開發實踐的集合。試問,當我們辛辛苦苦「學會」了一些演算法和資料結構,但在實際標稱中往往要麼一寫就錯(偽碼畢竟是只是用來表達演算法思路,但具體程式設計時會遇到很多實現 上的細節問題),要麼面對問題不只如何下手解決(因為沒有實際的應用,不知道如何對問題建模),此時會不會覺得自己白學了?畢竟,我們學到的東西要懂得利用才能體現價值。將乙個實際問題同我們學到的演算法和資料結構相結合起來,這正是軟體開發中的乙個項重要技能——抽象建模能力。
這主要的體現在一下幾點上:
1.第一部從講述相關的c語言基礎知識和演算法分析方法入手,在隨後的章節中採用軟體工程中的良好準則,結合作者的實踐經驗將基於介面的c程式設計理念貫穿全書。使用本書中的資料結構和演算法實現能夠以介面的形式充分得到復用。
2.書中的**實現主要以教學為目的,但也同樣考慮到了實現效率的問題。對於實現方案的選擇和取捨,都有詳細的說明和解釋。每章末尾的「問與答」將加深讀者對相關章節的理解。
3.除了對資料結構和演算法本身的介紹,書中所有的應用舉例都來自於真實的應用,這絕不是一般的練習題,而是演算法和資料結構在真實世界中的應用。包括作業系統中的頁幀管理、和頁面置換演算法、表示式處理等等。通過實際的例子向讀者展示了資料結構和演算法的威力,有助於培養我們抽象建模的能力,從而更有效的將學到了知識用於解決實際問題中。
總的來說,這是一本對「打基礎」很有幫助的書。書中對常見的資料結構如鍊表、棧、佇列、結合、何其表、樹、堆、圖都做了詳細的分析並給出了具體的實現。演算法方面除了最為常見的排序和檢索外,還有數值計算、資料壓縮、資料加密、幾何計算等方面的主題。
當譯者第一次看法哦本書的英文版時,立刻被本書都有的風格所吸引。在看看出版時間居然超過10年之久,令人奇怪的是,這樣一本優秀的技術類圖在這麼長時間裡居然從未引進到國內,無論是譯作還是影印都難覓其蹤,因此我們鼓足勇氣開始了本書的翻譯。感謝機械工業出版社引進了本書,這才得以讓本書的中譯本得以和大家見面。由於時間的倉促,和水平有限,在翻譯過程中難免會出現一些錯誤,希望讀者能批評指正。
演算法精解五(C語言版)
指標操作 在c語言中,對於任何型別t,我們都可以在t所在的記憶體位址處產生乙個包含對此物件位址的對應變數。如果用比較直觀方式來看待這種變數,它們實際上是一種指向物件的變數,如果用比較直觀方式來看待這種變數,它們實際上是一種指向物件的變數 因此,這些變數稱為指標。在c語言中,指標是構建資料結構和操作記...
演算法精解七(C語言版)
儲存空間分配 擋在c中宣告乙個指標時,與宣告其他型別的變數類似,一定量的儲存空間會分配給這個指標。通常情況下指標會占用乙個機器字長的儲存空間,但有些時候他們的大小也有所不同。因此 為了保證 的可移植性,不應該假設每個指標都占有乙個特定大小的儲存空間,指標變數的大小通常與編譯器的設定以及某些特定的c實...
演算法精解十六(C語言版)
尾遞迴 如果乙個函式所有遞迴形成的呼叫都出現在函式的末尾,我們稱這個遞迴函式是尾遞迴的。當遞迴呼叫是整個函式中最後執行的語句且它的返回值不屬於表示式的一部分時,這個遞迴呼叫就是尾遞迴。尾遞迴函式的特點是在回歸過程中不用做任何操作,這個特性很重要,因為大多數現代的編譯器會利用這個特點自動生成優化的 當...