描述
內容簡介
★★★★★【演算法】、【爆量題庫】★★★★★
演算法戰鬥營,招收各路英雄好漢。 300道競賽試題,淬鍊你的腦神經,讓你從菜鳥晉升成教官!
本書特色 ◎完美圖解,通俗易懂 本書對每個演算法的基本操作都有圖解演示。透過圖解,許多問題都變得簡單,可迎刃而解。
◎實例豐富,簡單有趣 本書結合大量競賽實例,講解如何利用資料結構與演算法解決實際問題,使複雜難懂的問題變得簡單有趣,幫助讀者輕鬆掌握演算法知識,體會其中的妙處。
◎深入淺出,透析本質 本書透過問題看本質,重點講解如何分析和解決問題。本書採用了簡潔易懂的程式,對資料結構設計和演算法的描述全面細緻,而且有演算法複雜性分析及最佳化過程。
◎實戰演練,循序漸進 本書在對每個資料結構與演算法講解清楚後,都進行了實戰演練,讓讀者在實戰中體會資料結構與演算法的設計和操作,從而提高了獨立思考、動手實踐的能力。書中有豐富的練習題和競賽題,可幫助讀者及時檢驗對知識的掌握情況,為從小問題出發、逐步解決大型複雜性工程問題奠定基礎。
◎網路資源,技術支援 本書為讀者提供書中所有範例程式的原始程式碼、競賽題及答案解析,讀者可以對這些原始程式碼自由修改編譯,以符合自己的需要。
本書技術重點 ✪貪婪演算法、分治演算法 ✪單鏈結、雙向鏈結、循環鏈結、靜態鏈結 ✪最短路徑、最小生成樹、拓撲排序、關鍵路徑 ✪雜湊表、字串模式比對、二元搜尋樹、平衡二元樹 ✪二分搜尋、深度優先搜尋、廣度優先搜尋、啟發式搜尋 ✪圖理論及圖理論的最強演算法 ✪歷史上經典演算法問題解決
|
作者簡介
陳小玉
副教授,高級程式設計師,主要研究方向為演算法優化和機器學習。 出版著作有《趣學演算法》、《趣學資料結構》、《演算法訓練營:海量圖解 競賽刷題(入門篇)》、《演算法訓練營:海量圖解 競賽刷題(進階篇)》,所教學生多次獲得ACM、藍橋杯等演算法競賽獎項。 |
目錄
01 語言基礎
1.1 開啟演算法之旅:hello world! 1.2 常見資料類型及其表達範圍 1.3 玩轉輸入輸出 1.4 人生就是不斷地選擇:if⋯else 1.5 每天都有很多次重複:for/while 1.6 如何輕鬆寫一個函數 ...........1-22 1.7 從前有座山,山裡有座廟:遞迴之法 1.8 資訊攜帶者:定義一個結構 1.9 巧用陣列—好玩貪吃蛇 1.10 玩轉字串—不一樣的風格
02 演算法入門 2.1 演算法之美 2.2 貪婪演算法 2.3 分治演算法 2.4 STL 應用
03 線性串列的應用 3.1 循序串列 3.2 單鏈結串列 3.3 雙向鏈結串列 3.4 循環鏈結串列 3.5 靜態鏈結串列
04 堆疊和佇列的應用 4.1 順序堆疊 4.2 鏈堆疊 4.3 順序佇列 4.4 鏈佇列
05 樹的應用 5.1 樹 5.2 二元樹 5.3 二元樹遍歷 5.4 霍夫曼樹
06 圖論基礎 6.1 圖的儲存 6.2 圖的遍歷 6.3 圖的連通性
07 圖的應用 7.1 最短路徑 7.2 最小生成樹 7.3 拓撲排序 7.4 關鍵路徑
08 尋找演算法 8.1 雜湊表 8.2 字串模式比對 8.3 二元搜尋樹 8.4 平衡二元樹
09 搜尋技術 9.1 二分搜尋 9.2 深度優先搜尋 9.3 廣度優先搜尋 9.4 啟發式搜尋
|
序
目前,資訊技術已被廣泛應用於網際網路、金融、航空、軍事、醫療等各個領域,在未來的應用將更加廣泛和深入。現在,很多中小學都已開設電腦語言課程,並且越來越多的中小學生對程式設計、演算法感興趣,甚至在NOIP、NOI 等演算法競賽中大顯身手。大學生通常參加ACM-ICPC、CCPC 等演算法競賽,其獲獎者更是被各大名企所青睞。
學習資料結構與演算法,不僅可以使我們具備較強的思維能力及解決問題的能力,還可以使我們快速學習各種新技術,擁有超強的學習能力。
寫作背景 很多讀者都覺得資料結構與演算法太難,市面上晦澀難懂的各種教材更是「嚇退」了一大批讀者。實際上,資料結構與演算法並沒有我們想像中那麼難,反而相當有趣。每當有學生說看不懂某個演算法的時候,筆者就會讓他畫圖。筆者認為,畫圖是學習資料結構與演算法最好的方法,它可以把抽象難懂的資料結構、演算法展現得生動活潑、簡單易懂。本書以巨量圖解的形式,結合大量競賽實例進行講解。全書圖文並茂,可幫助讀者全面、系統地架設資料結構與演算法知識系統,以模組化方式逐一拆解演算法問題。以通俗易懂的方式講解演算法,讓更多的讀者愛上演算法,這也是筆者寫作這本書的初衷。
本書詳細講解常用的資料結構和演算法,還增加了語言基礎和STL 函數的內容。如果讀者已經熟悉C++,則可跳過這些基礎章節。本書不是基礎知識的堆砌,也不是貼上程式的簡單題解,而是將基礎知識講解和對應的競賽刷題融會貫通,可讓讀者在輕鬆閱讀的同時進行實戰,在實戰中體會演算法的妙處,感受演算法之美。
本書特色 本書具有以下特色。 (1)完美圖解,通俗易懂。本書對每個演算法的基本操作都有圖解演示。透過圖解,許多問題都變得簡單,可迎刃而解。 (2)實例豐富,簡單有趣。本書結合大量競賽實例,講解如何利用資料結構與演算法解決實際問題,使複雜難懂的問題變得簡單有趣,幫助讀者輕鬆掌握演算法知識,體會其中的妙處。 (3)深入淺出,透析本質。本書透過問題看本質,重點講解如何分析和解決問題。本書採用了簡潔易懂的程式,對資料結構設計和演算法的描述全面細緻,而且有演算法複雜性分析及最佳化過程。 (4)實戰演練,循序漸進。本書在對每個資料結構與演算法講解清楚後,都進行了實戰演練,讓讀者在實戰中體會資料結構與演算法的設計和操作,從而提高了獨立思考、動手實踐的能力。書中有豐富的練習題和競賽題,可幫助讀者及時檢驗對知識的掌握情況,為從小問題出發、逐步解決大型複雜性工程問題奠定基礎。 (5)網路資源,技術支援。本書為讀者提供書中所有範例程式的原始程式碼、競賽題及答案解析,讀者可以對這些原始程式碼自由修改編譯,以符合自己的需要。
建議和回饋 寫書是極其瑣碎、繁重的工作,儘管筆者已經竭力使本書和網路支持接近完美,但仍然可能存在很多漏洞和瑕疵。歡迎讀者提供關於本書的回饋意見,因為對本書的評論和建議有利於我們改進,可以幫助更多的讀者。如果對本書有什麼評論和建議,或有問題需要幫助,可以致信rainchxy@126.com 與筆者交流,筆者將不勝感激。
致謝 感謝筆者的家人和朋友在本書寫作過程中提供的大力支持。感謝電子工業出版社工作嚴謹、高效的張國霞編輯,她的認真負責促成本書的早日出版。感謝提供寶貴意見的同事們,感謝提供技術支援的同學們。感恩遇到這麼多良師益友! |