<nav id="mahnt"><p id="mahnt"></p></nav><source id="mahnt"><div id="mahnt"></div></source>
    1. <source id="mahnt"><menu id="mahnt"></menu></source>
      <address id="mahnt"><kbd id="mahnt"></kbd></address>
      <b id="mahnt"></b>
    2. <u id="mahnt"><kbd id="mahnt"></kbd></u>
      <small id="mahnt"><kbd id="mahnt"></kbd></small>

      <u id="mahnt"><small id="mahnt"></small></u>
      算法設計實戰

      算法設計實戰 50 講

      王曉華 · 《算法的樂趣》作者

      16604人已買
      詳情
      目錄(50)

      算法為什么難學?

      算法在程序中扮演著非常重要的角色,有人將數據結構比喻為程序的骨架,將算法比喻為程序的靈魂,這一點也不為過。正是因為這一點,很多朋友都立志要學好算法,但是我常常看到各種抱怨,比如“看了半年《算法》這本書,才看了幾十頁”,再比如“四年了,還是沒有啃完《算法導論》”。出現這種情況的主要原因有兩個:

      1. 算法紛繁復雜、知識點多,沒有一種放之四海而皆準的通用規則,很難一下子從總體上掌握全貌;
      2. 一些算法雖然有常用的設計模式,但是不同的問題有不同的數學模型,需要設計好數學模型才能帶入算法模式進行求解,然而設計數學模型對新手來說通常是個很高的門檻。

      如何用算法解決實際問題?

      人們設計各種算法的目的是解決現實中的問題,雖然各種算法的實現五花八門,但是設計算法卻有一些通用的方法或思想(也有的資料將其稱為算法設計模式)。歸納起來,這些常見的算法設計方法有迭代法、窮舉搜索法、分支界限法(剪枝法)、遞推法、遞歸法、回溯法、分治法、貪婪法和動態規劃法等。

      本專欄選擇了 35 個簡單且實用的算法實例,這些算法實例基本覆蓋了各種算法比賽中經常出現的題目以及生活中常見的算法實現。每個算法實現都將講解的側重點放在各種算法的設計方法在算法中的體現,通過一個個算法例子,來引導大家掌握常見的算法設計思想。

      除此之外,在算法實現的過程中,還會詳細介紹針對各個問題的建模過程,使讀者能夠舉一反三,學會如何將文字描述的問題抽象為算法能夠使用的數據模型。總之,本專欄的目的不是學會這些算法,而是通過學習這些算法的實現,掌握算法設計的方法,以后遇到類似的問題,可以自己設計并實現解決問題的算法。

      你將學到

      • 35 個經典算法案例和建模過程
      • 如何自己動手設計算法實現
      • 將算法原理翻譯成算法代碼的常用技巧
      • 如何將實際問題抽象為的數學模型

      專欄大綱

      本專欄前半部分根據常見的算法題目,重點介紹迭代、窮舉和動態規劃三個主題,三個主題共計 18 個算法實例,基本上涵蓋了上述所有算法設計方法和思想的應用。后半部分則通過 24 個有趣的算法實現,讓大家理解算法的重要性,但重點仍然是各種算法設計思想的應用和如何設計適用于算法的數據模型。

      本專欄的目的是培養大家解決實際問題的能力,每篇介紹一個算法問題,通過對這個問題的分析和解決,鍛煉大家針對問題設計數據模型,并應用合適的算法思想設計出解決問題的算法實現的能力。 本專欄分為七大部分,共計 49 篇。

      第一部分(第 3 ~ 9 篇):基礎

      這部分內容包含 7 篇,第 1 篇為算法基礎內容,介紹了將問題抽象成數據建模的常用方法;第 2 ~ 6 篇介紹了 5 種常用的算法設計思想(模式),分析了各種算法模式的特點和使用時需要注意的要點,每種模式都用一到兩個具體的算法做示例;第 7 篇介紹了一些基礎算法和技巧,比如排序、單鏈表逆序和用數組存儲樹等小算法,作為本專欄開始之前的熱身或開胃菜。

      第二部分(第 10 ~ 12 篇):迭代和遞推

      這部分內容通過 3 個在數學領域常用的數值分析方法,介紹了迭代思想在算法設計中的應用,還包括如何將數學公式或文字描述的遞推關系轉化為數據模型的方法。

      第三部分(第 13 ~ 21 篇):窮舉搜索

      這部分內容包含 9 篇,前 7 篇通過 7 個不同的算法實例,介紹了幾種常見的窮舉方法,比如線性數字類問題的窮舉方法、樹形空間的窮舉方法、棋盤類游戲的常用窮舉方法以及復雜問題的多重窮舉和組合窮舉方法,重點介紹了如何設計與窮舉算法相適應的數據模型,以及用合理的數據模型簡化算法實現的技巧。后兩篇分別介紹了如何理解和設計遞歸函數,以及算法中浮點數處理的一些經驗。

      第四部分(第 22 ~ 29 篇):動態規劃

      這部分內容包含 8 篇,第 1 篇介紹了動態規劃算法的常用設計思想和方法,后面 7 篇分別介紹了 7 個有趣的算法,其中有一些是算法比賽中出現過的題目,還有一些是動態規劃的典型問題,既有簡單的線性(一維)動態規劃和二維動態規劃問題,也有凸多邊形的三角剖分、矩陣鏈乘這樣的熱點問題。

      動態規劃最重要的是劃分階段和確定狀態(確定遞推關系式),通過這些例子,可以了解如何建立問題對應的數據模型以及建立在數據模型上的遞推關系式。掌握這些方法,再遇到動態規劃類的問題時,就不會束手無策了。

      第五部分(第 30 ~ 35 篇):圖論

      圖論既是各種算法比賽中出題的“重災區”,也是現實生活中很多有趣算法的理論基礎,這部分內容選了 6 個有趣的算法,包括二分圖的最大匹配、圖的排序和關鍵路徑、歐拉圖、最大流等經典問題,講解的重點仍然是各種算法設計的思想和建立數據模型。

      第六部分(第 36 ~ 43 篇):游戲中常用的算法

      這部分內容包含 8 篇,介紹了一些游戲中常用的有趣味算法,包括決策樹、博弈樹和行為樹的搜索算法,涉及的內容包括窮舉、遞歸和分支界限法等算法思想的應用。這些算法都是非常經典的,掌握這些算法思想,將有助于讀者開闊思維、提升代碼能力。

      第七部分(第 44 ~ 49 篇):算法與應用

      這部分內容介紹了 6 個算法,都是一些名聲遠揚的公開算法,不需要重新設計,學習這些算法的關鍵是如何根據實際的問題建立數據模型,然后套用算法解決問題。每種算法都有具體的實例,通過這些例子與算法原理相結合,不僅有助于理解算法,還可以了解到將這些算法應用到實踐中常用的建模方法。

      作者介紹

      王曉華,畢業于華中科技大學,著有《算法的樂趣》一書。目前就職于中興通訊,任職開發經理和資深軟件工程師,主要工作是嵌入式通訊軟件開發。精通 C 和 C++ 開發語言,以及算法設計、面向對象的軟件設計和重構、測試驅動開發、敏捷與過程改進、Windows 內核文件系統、匯編語言、軟件破解與保護、網絡安全。

      專家推薦

      《算法設計實戰 50 講》展示有趣的問題、啟發有趣的思路、歸納有趣的解法,是一門有趣的專欄。

      ——王益,百度美研 T10 架構師,百度深度學習系統 PaddlePaddle 的技術負責人

      《算法設計實戰 50 講》是真正在訓練讀者解決問題的能力,而解決問題的能力,正是任何一家公司所需人才的最核心的技能。

      ——黃鑫(飛林沙),極光推送首席科學家

      適宜人群

      • 軟件開發人員
      • 編程和算法愛好者
      • 計算機專業的學生

      訂閱須知

      • 本專欄為訂閱專欄,形式為“圖文+音頻”內容,共計 50 期。
      • 付費用戶可享受文章永久閱讀權限。
      • 本專欄為虛擬產品,一經付費概不退款,敬請諒解。
      • 本專欄可在 GitChat 服務號、App 及網頁端 gitchat.cn 上購買,一端購買,多端閱讀。

      訂閱福利

      • 訂購本專欄可獲得專屬海報(在 GitChat 服務號領取),分享專屬海報每成功邀請一位好友購買,即可獲得 25% 的返現獎勵,多邀多得,上不封頂,立即提現。

      • 提現流程:在 GitChat 服務號中點擊「我-我的邀請-提現」。

      • 購買本專欄后,服務號會自動彈出入群二維碼和暗號。如果你沒有收到那就先關注微信服務號「GitChat」,或者加我們圖上的小助手微信進行咨詢。(入群方式可查看第 3 篇文末說明)。

      當前內容版權歸碼字科技所有并授權顯示,盜版必究。閱讀原文

      購買須知

      • 本課程內容版權歸北京碼字科技發展有限公司獨家所有,未經授權,不得轉載。
      • 本課程為虛擬產品,一經付費概不退款,敬請諒解。
      • 添加 GitChat 助教俏俏(微信 ID: gitchat2025),加入免費技術交流群。
      × 訂閱 Java 精選頻道
      元/月
      訂閱即可免費閱讀所有精選內容
      一级无码爱爱片免费