Sedgewick的算法(第四版)隨筆I

? ? 最近三天晚上翻完了這本書的PARTI和PARTII,所有的代碼都用JAVA實現(xiàn)了一遍,一本滿分好書。

? ? PARTI非常值得一讀,作者說清楚了algorithm和data structure的關系,手把手教你用JAVA內置數(shù)組和鏈表來實現(xiàn)Bag、Stack、Queue,并且給了一個Stack的常用實例:用雙棧來實現(xiàn)算術表達式求值。接著作者講了算法分析,并且給出了算法分析在工程中的意義。最后一小節(jié)用一個案例union-find來討論解決計算機問題的具體步驟:1、定義問題,確定解決問題的ADT,定義一份API;2、實現(xiàn)一種初級算法,給出用例框架并將實際數(shù)據作為輸入來驗證初級算法;3、用經驗性分析或數(shù)學分析來確定初級算法是否能解決當前輸入規(guī)模的問題;4、如果初級算法不能解決當前規(guī)模輸入的問題,改進算法。

? ? PARTII講了Selection_sort、Insection_sort、Shell_sort、Merge_sort、Quick_sort、Heap_sort,作者不僅僅是教你如何實現(xiàn)這些經典算法,更告訴你如何優(yōu)化這些經典算法,并且教你在面對不同輸入規(guī)模的數(shù)據、不同特性數(shù)據時如何選擇這些算法。你會知道為什么嵌入式系統(tǒng)中Shell_sort會被使用(因為簡單但是效率高)、Heap_sort是唯一能夠最優(yōu)利用時間和空間的算法,他在最壞情況下保證用~2NlgN次比較和恒定額外空間就能完成排序,但是他只在嵌入式系統(tǒng)中常用,在現(xiàn)代系統(tǒng)中很少利用:因為他無法利用緩存、緩存未命中次數(shù)遠遠大于Quick_sort和Merge_sort。最后你會知道JAVA庫中的Arrays.sort()是如何實現(xiàn)的:原始數(shù)據類型是Quick_sort,引用類型是Merge_sort(穩(wěn)定排序),當你不需要穩(wěn)定性而且內存要求比較高的時候你可以換成其他排序算法而不是簡單的用Arrays.sort()。

? ? 排序是很多商業(yè)計算、信息搜索、運籌學、數(shù)值計算、組合搜索和很多算法的基礎。之前一直沒完全理解,這本書算是給我開了竅。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容