- 算法訓練營:海量圖解+競賽刷題(進階篇)
- 陳小玉
- 2273字
- 2024-01-22 18:54:22
前言
近年來,算法行業非?;鸨?,越來越多的人在學習算法。目前,計算機的最重要領域之一是人工智能,而人工智能的核心是算法,算法已滲透到互聯網、商業、金融業、航空、軍事等各個領域,正在改變著這個世界。
寫作背景
在IT領域,數據結構與算法的應用無處不在。數據結構與算法是計算機開發人員的基本功,很多面試都要考查數據結構與算法。學習數據結構與算法不僅可以培養我們的算法思維,提高我們分析問題、解決問題的能力,還可以讓我們快速學習新技術,以更高的視角看待問題。
數據結構與算法教材一般晦澀難懂。為了讓更多的人輕松學習算法、愛上算法,筆者寫作了《趣學數據結構》《趣學算法》兩本書。筆者發現,讀者特別喜歡搭配了大量圖解的通俗易懂的講解方式。很多讀者也在呼吁筆者寫一本結合算法競賽實例進行講解的書。經過近兩年的籌備,《算法訓練營:海量圖解+競賽刷題(入門篇)》和《算法訓練營:海量圖解+競賽刷題(進階篇)》兩本書終于要和大家見面了,非常感謝各位讀者的大力支持。
學習建議
算法學習的過程,實際上是通過大量實例,充分體會遇到問題時該如何分析:采用什么數據結構,使用什么算法策略,算法的復雜性如何,是否有優化的可能,等等。這里有以下幾個建議。
◇ 第1個建議:學經典,多理解。
算法書有很多,初學者最好選擇圖解較多的入門書,當然,也可以選擇多本書,從多個角度進行對比和學習。先看書中的圖解,理解各種經典問題的求解方法,如果還不明白,則可以看視頻講解,理解之后再看代碼,嘗試自己動手上機運行。如有必要,則可以將算法的求解過程通過圖解方式展示出來,以加深對算法的理解。
◇ 第2個建議:看題解,多總結。
在掌握書中的經典算法之后,可以在刷題網站進行專項練習,比如貪心算法、分治算法、動態規劃、網絡流等。算法比數據結構更加靈活,對同一道題目可以采用不同的算法解決,算法復雜性也不同。如果想不到答案,則可以看題解,比較自己的想法與題解的差距。要多總結題目類型及最優解法,然后找相似的題目并自己動手解決問題。
◇ 第3個建議:舉一反三,靈活運用。
通過專項刷題,見多識廣,總結常用的算法模板,熟練應用套路,舉一反三、靈活運用,逐步提升刷題速度,力爭“bug free”(無缺陷)。
如何進行刷題實戰
刷題的過程就是熟練應用數據結構與算法的過程。在刷題過程中,要學會分析問題、解決問題的方法,總結常用的算法模板和套路,快速寫出代碼,通過鍛煉達到“bug free”??梢约袝r間進行系統性專項刷題,不可三天打魚、兩天曬網,也不可隨機刷題。題不在多,在于精。通過看書掌握一種數據結構與算法之后,便可找該知識相關的簡單題目試手,從易到難。刷題時,可以先在編譯系統中編譯通過,等測試用例通過且檢查無誤后再提交,因為在比賽中多次提交會被罰時。刷題網站有很多,算法競賽刷題網站有Vjudge、POJ、HDU、Code Forces、洛谷等,找工作刷題網站有LeetCode。提交結果類型如下。
? AC(Accepted):通過。
? WA(Wrong Answer):答案錯誤。
? TLE(Time Limit Exceed):超時。
? OLE(Output Limit Exceed):超過輸出限制。
? MLE(Memory Limit Exceed):超出內存。
? RE(Runtime Error):運行時錯誤。
? PE(Presentation Error):格式錯誤。
? CE(Compile Error):無法編譯。
測試用例通過而提交不通過是很正常的,因為在測試用例中僅有一兩組數據,而在后臺有大量測試數據。遇到提交不通過的情況時,要首先根據提示判斷錯誤類型,根據錯誤類型分析原因;然后冷靜分析算法邏輯、易錯點、特殊情況判斷等,看看選擇的數據結構和算法是否合適,是否存在死循環。在刷題過程中會發現很多“坑”,一定要記錄下來,避免下次“踩坑”。
看題目時要看數據規模、時間限制和空間限制,看看設計的算法是否會超時超限,做到心中有數。如果限制時間為1s,則問題規模(n)和算法時間復雜度之間的關系如下。
? n≤11:O(n!)。
? n≤25:O(2n)。
? n≤5000:O(n2)。
? n≤106:O(nlogn)。
? n≤107:O(n)。
? n>108:O(logn)。
本書特色
本書具有以下特色。
(1)完美圖解,通俗易懂。本書對每個算法的基本操作都有圖解演示,通過圖解,許多問題都變得簡單,可迎刃而解。
(2)實例豐富,簡單有趣。本書結合大量競賽實例,講解如何利用數據結構與算法解決實際問題,使復雜難懂的問題變得簡單有趣,幫助讀者輕松掌握算法知識,體會其中的妙處。
(3)深入淺出,透析本質。本書透過問題看本質,重點講解如何分析和解決問題。本書采用了簡潔易懂的代碼,對數據結構設計和算法的描述全面細致,而且有算法復雜性分析及優化過程。
(4)實戰演練,循序漸進。本書在對每個數據結構與算法講解清楚后,都進行了實戰演練,使讀者在實戰中體會數據結構與算法的設計和操作,從而提高獨立思考、動手實踐的能力。書中有豐富的練習題和競賽題,可幫助讀者及時檢驗知識掌握情況,為從小問題出發,逐步解決大型復雜性工程問題奠定基礎。
(5)網絡資源,技術支持。本書為讀者提供書中所有范例程序的源代碼、競賽題及答案解析,讀者對這些源代碼可以自由修改編譯,以符合自己的需要。本書提供博客、微信群、QQ群技術支持,可隨時為讀者答疑解惑。
建議和反饋
寫書是極其瑣碎、繁重的工作,盡管筆者已經盡力使本書的內容和網絡支持接近完美,但仍然可能存在很多漏洞和瑕疵。歡迎讀者提供關于本書的反饋意見,因為對本書的評論和建議都有利于我們改進和提高,以幫助更多的讀者。如果對本書有什么評論和建議,或者有問題需要幫助,則可以致信rainchxy@126.com與筆者交流,筆者將不勝感激。
讀者資源請參照本書封底提示。
致謝
感謝筆者的家人和朋友在本書寫作過程中提供的大力支持。感謝電子工業出版社工作嚴謹、高效的張國霞編輯促成本書的早日出版。感謝提供寶貴意見的同事們。感謝提供技術支持的同學們。感恩遇到這么多良師益友!
- MySQL高可用解決方案:從主從復制到InnoDB Cluster架構
- Hands-On Data Structures and Algorithms with Rust
- 達夢數據庫編程指南
- 數據庫基礎與應用:Access 2010
- 數據之巔:數據的本質與未來
- SQL Server入門經典
- Python金融大數據分析(第2版)
- 商業分析思維與實踐:用數據分析解決商業問題
- 智能數據時代:企業大數據戰略與實戰
- Power BI智能數據分析與可視化從入門到精通
- 計算機組裝與維護(微課版)
- Mastering ROS for Robotics Programming(Second Edition)
- SQL Server 2008寶典(第2版)
- 數據分析思維:產品經理的成長筆記
- MySQL數據庫應用與管理