? ? 最近三天晚上翻完了這本書的PARTI和PARTII制圈,所有的代碼都用JAVA實現(xiàn)了一遍容贝,一本滿分好書伞租。
? ? PARTI非常值得一讀,作者說清楚了algorithm和data structure的關(guān)系十性,手把手教你用JAVA內(nèi)置數(shù)組和鏈表來實現(xiàn)Bag叛溢、Stack、Queue劲适,并且給了一個Stack的常用實例:用雙棧來實現(xiàn)算術(shù)表達(dá)式求值楷掉。接著作者講了算法分析,并且給出了算法分析在工程中的意義霞势。最后一小節(jié)用一個案例union-find來討論解決計算機(jī)問題的具體步驟:1靖诗、定義問題,確定解決問題的ADT支示,定義一份API;2鄙才、實現(xiàn)一種初級算法颂鸿,給出用例框架并將實際數(shù)據(jù)作為輸入來驗證初級算法;3攒庵、用經(jīng)驗性分析或數(shù)學(xué)分析來確定初級算法是否能解決當(dāng)前輸入規(guī)模的問題嘴纺;4、如果初級算法不能解決當(dāng)前規(guī)模輸入的問題浓冒,改進(jìn)算法栽渴。
? ? PARTII講了Selection_sort、Insection_sort稳懒、Shell_sort闲擦、Merge_sort、Quick_sort场梆、Heap_sort墅冷,作者不僅僅是教你如何實現(xiàn)這些經(jīng)典算法,更告訴你如何優(yōu)化這些經(jīng)典算法或油,并且教你在面對不同輸入規(guī)模的數(shù)據(jù)寞忿、不同特性數(shù)據(jù)時如何選擇這些算法。你會知道為什么嵌入式系統(tǒng)中Shell_sort會被使用(因為簡單但是效率高)顶岸、Heap_sort是唯一能夠最優(yōu)利用時間和空間的算法腔彰,他在最壞情況下保證用~2NlgN次比較和恒定額外空間就能完成排序叫编,但是他只在嵌入式系統(tǒng)中常用,在現(xiàn)代系統(tǒng)中很少利用:因為他無法利用緩存霹抛、緩存未命中次數(shù)遠(yuǎn)遠(yuǎn)大于Quick_sort和Merge_sort搓逾。最后你會知道JAVA庫中的Arrays.sort()是如何實現(xiàn)的:原始數(shù)據(jù)類型是Quick_sort,引用類型是Merge_sort(穩(wěn)定排序)上炎,當(dāng)你不需要穩(wěn)定性而且內(nèi)存要求比較高的時候你可以換成其他排序算法而不是簡單的用Arrays.sort()恃逻。
? ? 排序是很多商業(yè)計算、信息搜索藕施、運籌學(xué)寇损、數(shù)值計算、組合搜索和很多算法的基礎(chǔ)裳食。之前一直沒完全理解矛市,這本書算是給我開了竅。