日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《算法的乐趣》终于出版了

發布時間:2023/12/9 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《算法的乐趣》终于出版了 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


經過一年多的編寫和準備,《算法的樂趣》終于出版了,4月中旬開始可以在京東、當當等網店購買,實體書店上架可能會慢一點。感謝圖靈社區的各位老師的辛勤耕耘,也感謝《啊哈!算法》作者紀磊先生(啊哈磊),LinkedIn高級主任分析師王益先生,極光推送首席科學家黃鑫先生(飛林沙)為本書熱情作序并給予充分的肯定。


序一

讀《算法的樂趣》的樂趣超出了我的預料。

說到算法,大部分計算機專業的同學的第一反應估計是MIT出版社的經典教材《算法導論》(Introduction to Algorithms)。這是一本由淺入深的好書,堪稱“神書”——別看書挺厚,但是對初學者來說很難弄懂的問題也娓娓道來,讓人看一遍就明白;而且作者用最簡單的英語詞匯和句法寫書,以至于世界各地的學生們,不需要英語很好,即可讀懂原版。只是看完這本大部頭之后,總有一些意猶未盡的感覺——對我們日常生活中常見的比如音樂播放器里以及電子游戲里的算法并沒有太多介紹。而這些正是《算法的樂趣》中主要的部分。

在Amazon上,另外兩本排名靠前的經典算法教材是Jon Kleinberg的《算法設計》(Algorithm Design)和Steven S. Skiena的《算法設計手冊》(The Algorithm Design Manual)。這兩本出自名家之手的教材和很多教材一樣,按照算法的類型或者背后的設計思路來組織內容。這是教材應該做的,“授人以魚不如授人以漁”,傳授思路而不是算法本身是教材的寫作目的。可是算法最有意思的地方首先在于算法本身,因為算法是為了解決實際問題而設計的,所以讓大家認識到算法奧妙的自然順序應該是先展示有趣的問題,再展示優雅的算法,最后歸納設計思路。而這正是《算法的樂趣》吸引人的地方。說到樂趣,總讓我想起我學習和使用數學知識的經歷。雖然我的學位是關于統計機器學習的,而且畢業后一直從事相關工作,但是我從小學一年級到博士第三年都對數學毫無興趣,因為學校的老師和數學成績好的同學都說不明白數學的用處,以至于我一直以為數學的作用只是鍛煉和展示自己的聰明,博得老師的表揚,成為陳景潤那樣為國爭光的英雄。而這些對我實在沒有吸引力,而且我認為恐怕對絕大部分學生都沒什么吸引力。

我認識到數學的價值,是因為在博士第三年把研究方向換到了統計機器學習。在讀教材的時候,我曾想驗證“數學無用”,所以費盡心力地試圖寫一個程序來判斷一個64×64像素的圖片里到底是數字“1”還是數字“9”,卻發現無論如何也很難寫一個有效的程序;可是利用教材里的數學知識卻能設計和“訓練”一個數學模型,準確地識別任意字符。因為體會到了數學的用處,我興奮地用了一年的時間復習大學本科的數學課程,然后才讀懂了人工智能的專業教材和論文。此后才有所創新,發表論文,到博士畢業。這整個過程用了三年,而效果超過了之前19年數學教育的效果。

在這個過程中,我自然而然地開始注意數學知識的前因(比如為什么人們會關注長度、面積,怎么會有人考慮勾股定理這樣的規律)以及后果(今天的數學知識能給物理學和機器智能帶來什么樣的幫助),也開始歸納和了解各種數學系統背后的規律,能體會哥德爾定理闡述的意思。當然,也破除了“數學是各種科學之母”之類的迷信,數學當然不是“科學之母”,而是“科學之子”,是先有物理學、力學和天文學,才有的數學;先有應用場景后有工具,先有探索后有歸納。

算法也是如此。先有工程問題需要解決,算法是解法,設計算法是尋求解法。雖然算法作為一門科學是歸納尋求解法的思路,但學習這種歸納法的前提是能體會各種具體算法的用處和效果。意識到這一點,自然也就破除了諸如“學好數學才能學好算法”之類的迷信。而把算法解決的各種有趣問題羅列出來,把算法的可愛之處展示給愿意發現和體會生活中點滴樂趣的讀者們,正是《算法的樂趣》在技術價值之外的一層社會價值。

十年前,當我們坐在課堂里學習算法的時候,我們學到的是如何用人腦尋求解法,然后把解法寫成程序,讓計算機照著執行去解決問題。這是“經典算法”。最近十幾年,隨著Internet產業的興起,Internet服務在不斷取代原來由人提供的服務,這就要求機器擁有一定程度上能取代人的“智能”。在搜索引擎、推薦系統和廣告系統等各個領域里,類似上述“識別數字”的問題越來越多,而人工智能和機器學習的應用也越來越深入我們的生活。機器學習算法的設計目標和“經典算法”不同——不是讓人來想解法,而是讓計算機從數據歸納知識——有了這些知識,計算機就能自己尋求解法。

雖然經典算法和機器學習算法之間的差別大得如同一場革命,但是由經典而入機器學習的過程卻是自然而然的。比如《算法的樂趣》中介紹的曲線擬合問題,就是supervised learning(有監督學習),而音樂播放器里常用的傅里葉變換和其他時域頻域變換則是unsupervised learning(無監督學習)的技術基礎,棋類游戲算法是博弈論和reinforcement learning(強化學習)的經典例子。我常見有朋友從讀數學教材開始探索機器學習和人工智能算法,也常看到有人不堪忍受長時間缺乏樂趣的探索以至于半途而廢。如果是這樣,也許不如從《算法的樂趣》開始這個探索過程。

我曾經以為從樂趣出發闡述算法的書會從西方發芽,沒想到先看到了一本中文書。這真超出了我的預料。

王益

LinkedIn高級主任分析師

序二

當圖靈出版社的編輯找到我希望我為這本書寫個序的時候,我和旁邊的同事調侃了一句:又一本簡版的《算法導論》要誕生了。但是我還是下載了附件閱讀了這本書,當翻到目錄的時候,我的興趣就被燃起來了,轉頭和同事說,也許這是一本不錯的書。

程序員到底需不需要學習算法?這個問題被爭論的次數絕對不亞于“Java是不是最好的語言”“VIM和Emacs誰是最好的編輯器”“程序員是不是需要學習數學”。為了避免陷入這樣的爭論里,我們先對“算法”一詞做個轉換定義,什么是算法?下面我舉幾個我親身經歷的例子。

有一次我們發布了一個APP,在注冊時要求用戶輸入自己的真實姓名,但是粗心的工程師忘記了要求用戶填寫自己的性別,更可憐的是在歡迎頁上面明晃晃地寫著“歡迎XXX先生注冊XX網”,可是應用已經發布到了App Store,到底怎么辦?有一位工程師提出了一個辦法,我們根據已有的用戶姓名和性別作為訓練集,來預測新用戶到底是男還是女,為了讓這個錯誤盡快得到修復,我們使用了最簡單的樸素貝葉斯分類算法,最終測試集上的預測準確率達到93%,也就是說我們解決了93%用戶的體驗問題。我把這類算法稱為專業類算法,也就是招聘網站上算法工程師要求的算法,例如圖像處理工程師、數據挖掘工程師等。

有一次我們有一個相似性搜索的需求,數據量不大,只有幾萬條的數據記錄,沒有必要用ES這樣的搜索引擎。例如輸入“長沙市”, 也希望可以找到“我愛湖南長沙”“沙市小吃”等,且不說這個需求是否合理,我們單純來討論這個問題的解決方案。工程師實現的第一版是將所有字的組合全部列舉出來,然后在數據庫里做like操作,性能無法接受。于是我們提出了另一種解決方案:將數據庫中的每個詞都拆成單字,做成集合,保存在緩存中。接下來只需要對集合做交集操作,以字為單位計算詞與詞之間的相似性,性能問題一下就解決了。這種解題思路在《編程珠璣》中屢見不鮮,這不足以稱為具體的算法,幾乎都是在梳理我們的邏輯,訓練我們解決問題的能力,我把這類算法稱為邏輯類算法,或者技巧類算法。

還有一次,我們有個需求是幫助用戶做旅游的行程規劃,其中的情況比較復雜,因為除了地理位置之外,還需要包含目的地的過往用戶評價、所需耗時、不同城市的住宿花費等。但是如果我們仔細分析,可以基于產品設計去拆分問題。在在線部分,我們可以去使用基于路程的最短圖路徑算法,或者基于價格的貪心算法,也可以在綜合排序處為用戶選擇使用了變形加權的最短圖路徑算法。在離線部分,由于圖的節點和邊都較少,可以使用窮舉法來為用戶找到幾種不同類型的最優解。這些算法都是在《算法導論》和《數據結構》中有著詳細討論的算法,書中的每一個算法和數據結構都是作者多年來抽象總結出的通用思路,我稱之為通用類算法。

再說一個最基本的,我們做一個網站允許用戶發布狀態,在高峰期并發量太大,數據庫不堪重負,所以我們需要將用戶的插入記錄先存入到消息隊列中,保證用戶的正常使用,然后再落地到MySQL數據庫中。大家都會想到選擇隊列這樣一種先入先出的數據結構,這也屬于一種算法。

通過上面的幾個例子,你會不會覺得你的身邊處處都是算法?那么到底什么是算法?我們看看標準的定義:能夠對一定規范的輸入,在有限時間內獲得所要求的輸出的一系列指令都叫作算法。這個定義太抽象了,讓我們簡單來說,算法其實就是解決問題的思路和辦法。那么從這一點來說,你還會說算法不重要么?

那么為什么還會有很多學生,甚至已經工作了很久的朋友還會說大學學的東西沒有意義,算法沒有用呢?歸根結底是因為大家不知道為什么學,或者說缺乏算法的場景化。我在讀大學的時候,經常做一些簡單的網站,用到的技術無外乎是最簡單的對數據庫的增刪改查,當時最大的感覺就是算法沒有用。后來隨著工作的深入,我開始逐步地意識到算法的重要性,逐漸地把算法撿了起來。

這本書給我最大的驚喜是沒有像一般的算法書一樣單純地去講算法和數據結構本身,那樣無論語言多風趣,只要一談到關鍵的問題也會馬上變得無趣起來。作者在每一章都給出了一個實際的問題,然后嘗試用算法去解決這一個問題,沒有局限于通用類算法,而是同時涵蓋邏輯類算法、通用類算法和專業類算法,真正是在訓練讀者解決問題的能力,而解決問題的能力,正是任何一家公司所需人才的最核心的技能。

另外,我已經在幻想作者在下一本書里可以把工作中的實際場景列舉出來,更進一步地講述工作中的算法,讓每一個在校學生都可以意識到算法對于未來工作的重要性,也讓每一位從業者拍案叫絕:“原來這個問題可以這樣解!”讓人人談算法,人人寫算法,引發軟件行業的全民算法潮。

黃鑫(飛林沙)

極光推送首席科學家


序三

如果說《啊哈!算法》是算法界的小白書,內容太少看得不過癮,那么這本《算法的樂趣》或許可以帶你一起牛逼一起飛。當我剛拿到書的目錄的時候,我就很期待,因為終于有一本算法書可以系統地和大伙說一說這些我也很想與大伙說的偉大算法。

暴力盲目的搜索算法往往讓計算機顯得很笨甚至有點癡呆,如果你想設計一個“狡猾”的程序,那么本書中的搜索剪枝、A*尋徑、博弈樹以及遺傳算法等將給你帶來啟發。快速傅里葉變換,這么霸氣而又高大上的名字,其實在我們生活中的應用隨處可見,家中的Wi-Fi、智能手機、電話、路由器等幾乎所有內置計算機系統的東西都會以各種方式使用這個算法。RLE數據壓縮算法,在文檔、視頻、音樂、數據存儲、云計算、數據庫等幾乎所有應用中都有著廣泛的運用。壓縮算法令系統更有效,成本更低。再來說密碼學算法中非常重要的RSA算法,如果沒有這些算法,互聯網就會變得不安全,電子交易就不會如此可信。

好玩的算法還有很多很多,歷法與二十四節氣的計算、華容道、井字棋、黑白棋、五子棋以及俄羅斯方塊……你會驚訝地發現,再簡單不過的事情背后,都藏著算法的神奇背影。不妨將本書放在案頭慢慢品讀,你將能看到算法如何深入我們的日常生活,如何重塑我們的世界。

你準備好了嗎?接下來,這個世界算法將接管一切。

啊哈磊

《啊哈!算法》作者



本書的序和部分試讀章節可在CSDN的資源下載部分下載,以下是本書目錄的三級標題展開:


第1章 程序員與算法
  • 1.1 什么是算法
  • 1.2 程序員必須要會算法嗎
    • 1.2.1 一個隊列引發的慘案
    • 1.2.2 我的第一個算法
  • 1.3 算法的樂趣在哪里
  • 1.4 算法與代碼
  • 1.5 總結
  • 1.6 參考資料
閱讀
第2章 算法設計的基礎
  • 2.1 程序的基本結構
    • 2.1.1 順序執行
    • 2.1.2循環結構
    • 2.1.3 分支和跳轉結構
  • 2.2算法實現與數據結構
    • 2.2.1 基本數據結構在算法設計中的應用
    • 2.2.2 復雜數據結構在算法設計中的應用
  • 2.3 數據結構和數學模型與算法的關系
  • 2.4 總結
  • 2.5 參考資料
?
第3章 算法設計的常用思想
  • 3.1 貪婪法
    • 3.1.1 貪婪法的基本思想
    • 3.1.2 貪婪法的例子:0-1背包問題
  • 3.2 分治法
    • 3.2.1 分治法的基本思想
    • 3.2.2 遞歸和分治,一對好朋友
    • 3.2.3分治法的例子:大整數karatsuba乘法算法
  • 3.3 動態規劃
    • 3.3.1動態規劃的基本思想
    • 3.3.2 動態規劃法的例子:字符串的編輯距離
  • 3.4 解空間的窮舉搜索
    • 3.4.1解空間的定義
    • 3.4.2窮舉解空間的策略
    • 3.4.3 窮舉搜索的例子:Google方程式
  • 3.5 總結
  • 3.6 參考資料
?
第4章 阿拉伯數字與中文數字
  • 4.1 中文數字的特點
    • 4.1.1 中文數字的權位和小節
    • 4.1.2 中文數字的零
  • 4.2 阿拉伯數字轉中文數字
    • 4.2.1 一個轉換示例
    • 4.2.2 轉換算法設計
    • 4.2.3 算法實現
    • 4.2.4中文大寫數字
  • 4.3 中文數字轉阿拉伯數字
    • 4.3.1 轉換的基本方法
    • 4.3.2 算法實現
  • 4.4 數字轉換的測試用例
  • 4.5 參考資料
?
第5章 三個水桶等分8升水的問題
  • 5.1 問題求解與思路
  • 5.2 建立數學模型
    • 5.2.1 狀態的數學模型與狀態樹
    • 5.2.2 倒水動作的數學模型
  • 5.3 搜索算法
    • 5.3.1 狀態樹的遍歷
    • 5.3.2 剪枝和重復狀態判斷
  • 5.4 算法實現
  • 5.5 總結
  • 5.6 參考資料
?
第6章 妖怪與和尚過河問題
  • 6.1 問題與求解思路
  • 6.2 建立數學模型
    • 6.2.1 狀態的數學模型與狀態樹
    • 6.2.2 過河動作的數學模型
  • 6.3 搜索算法
    • 6.3.1 狀態樹的遍歷
    • 6.3.2 剪枝和重復狀態判斷
  • 6.4 算法實現
  • 6.5 總結
  • 6.6 參考資料
?
第7章 穩定匹配與舞伴問題
  • 7.1 穩定匹配問題
    • 7.1.1 什么是穩定匹配
    • 7.1.2 Gale-Shapley算法原理
  • 7.2 Gale-Shapley算法的應用實例
    • 7.2.1算法實現
    • 7.2.2 改進優化:空間換時間
  • 7.3 有多少穩定匹配
    • 7.3.1 窮舉所有的完美匹配
    • 7.3.2 不穩定因素的判斷算法
    • 7.3.3 窮舉的結果
  • 7.4 二部圖與二分匹配
    • 7.4.1最大匹配與匈牙利算法
    • 7.4.2 帶權匹配與Kuhn-Munkres算法
  • 7.5 總結
  • 7.6 參考資料
閱讀
第8章 愛因斯坦的思考題
  • 8.1 問題的答案
  • 8.2 分析問題的數學模型
    • 8.2.1 基本模型定義
    • 8.2.2 線索模型定義
  • 8.3 算法設計
    • 8.3.1 窮舉所有的組合結果
    • 8.3.2 利用線索判定結果的正確性
  • 8.4 總結
  • 8.5 參考資料
?
第9章 項目管理與圖的拓撲排序
  • 9.1 AOV網和AOE網
  • 9.2 拓撲排序(Topological Sorting)
    • 9.2.1 拓撲排序的基本過程
    • 9.2.2 按照活動開始時間排序
  • 9.3 關鍵路徑算法
    • 9.3.1 什么是關鍵路徑
    • 9.3.2 計算關鍵路徑的算法
  • 9.4 總結
  • 9.5 參考資料
?
第10章 RLE行程長度壓縮算法與PCX圖像格式
  • 10.1 RLE壓縮算法
    • 10.1.1 連續重復數據的處理
    • 10.1.2連續非重復數據的處理
    • 10.1.3 算法實現
  • 10.2 RLE與PCX圖像文件格式
    • 10.2.1 PCX文件格式
    • 10.2.2 PCX_RLE算法
    • 10.2.3 256色PCX文件的解碼和顯示
  • 10.3 總結
  • 10.4 參考資料
?
第11章 算法與歷法
  • 11.1 格里歷(公歷)生成算法
    • 11.1.1 格里歷的歷法規則
    • 11.1.2 今天星期幾
    • 11.1.3 生成日歷的算法
    • 11.1.4 日歷變更那點事兒
  • 11.2 二十四節氣的天文學計算
    • 11.2.1 二十四節氣的起源
    • 11.2.2 二十四節氣的天文學定義
    • 11.2.3 VSOP-82/87行星理論
    • 11.2.4 誤差修正-章動
    • 11.2.5 誤差修正-光行差
    • 11.2.6 用牛頓迭代法計算二十四節氣
  • 11.3 農歷朔日(新月)的天文學計算
    • 11.3.1 如月合朔的天文學定義
    • 11.3.2 ELP-2000/82月球理論
    • 11.3.3 誤差修正-地球軌道離心率修正
    • 11.3.4 誤差修正-黃經攝動
    • 11.3.5 月球地心視黃經和最后的修正-地球章動
    • 11.3.6 用牛頓迭代法計算日月合朔
  • 11.4 農歷的生成算法
    • 11.4.1 中國農歷的起源與歷法規則
    • 11.4.2 中國農歷的推算
    • 11.4.3 一個簡單的“年歷”
  • 11.5 總結
  • 11.6 參考資料
?
第12章 實驗數據與曲線擬合
  • 12.1 曲線擬合
    • 12.1.1 曲線擬合的定義
    • 12.1.2 簡單線性數據擬合的例子
  • 12.2 最小二乘法曲線擬合
    • 12.2.1 最小二乘法原理
    • 12.2.2 高斯消元法求解方程組
    • 12.2.3 最小二乘法解決“速度與加速度”實驗
  • 12.3 三次樣條曲線擬合
    • 12.3.1 插值函數
    • 12.3.2 樣條函數的定義
    • 12.3.3 邊界條件
    • 12.3.4 推導三次樣條函數
    • 12.3.5 追趕法求解方程組
    • 12.3.6 三次樣條曲線擬合算法實現
    • 12.3.7 三次樣條曲線擬合的效果
  • 12.4 總結
  • 12.5 參考資料
?
第13章 非線性方程與牛頓迭代法
  • 13.1非線性方程求解的常用方法
    • 13.1.1 公式法
    • 13.1.2 二分逼近法
  • 13.2 牛頓迭代法的數學原理
  • 13.3 用牛頓迭代法求解非線性方程的實例
    • 13.3.1 導函數的求解與近似公式
    • 13.3.2 算法實現
  • 13.4 參考資料
?
第14章 計算幾何與計算機圖形學
  • 14.1.1 點與矩形的關系
  • 14.2 直線生成算法
    • 14.2.1 什么是光柵圖形掃描轉換
    • 14.2.2 數值微分法(DDA法)
    • 14.2.3 Bresenham算法
    • 14.2.4 對稱直線生成算法(改進的Bresenham算法)
    • 14.2.6 其他直線生成算法
  • 14.2.5 兩步算法
  • 14.3 圓生成算法
    • 14.3.2 中點畫圓法
    • 14.3.3 改進的中點畫圓法-Bresenham算法
    • 14.3.4 正負判定畫圓法
  • 14.3.1 圓的八分對稱性
  • 14.1 計算幾何的基本算法
    • 14.1.2 點與圓的關系
    • 14.1.3 矢量的基礎知識
    • 14.1.4 點與直線的關系
    • 14.1.5 直線與直線的關系
    • 14.1.6 點與多邊形的關系
?
第15章 音頻頻譜和均衡器與傅立葉變換算法
  • 15.1 實時頻譜顯示的原理
  • 15.2 離散傅立葉變換(DFT)
    • 15.2.1 什么是傅立葉變換
    • 15.2.2 傅立葉變換原理
    • 15.2.3 快速傅立葉變換的算法實現
  • 15.3 傅立葉變換與音頻播放的實時頻譜顯示
    • 15.3.1  頻域數值的特點分析
    • 15.3.2  從音頻數據到功率頻譜
    • 15.3.3 音頻播放時實時頻譜顯示的例子
  • 15.4 破解電話號碼的小把戲
    • 15.4.1 撥號音的頻譜分析
    • 15.4.2 根據頻譜數據反推電話號碼
  • 15.5 離散傅立葉逆變換(IDFT)
    • 15.5.1 快速傅立葉逆變換(IFFT)的推導
    • 15.5.2 快速傅立葉逆變換(IFFT)的算法實現
  • 15.6 利用傅立葉變換實現頻域均衡器
    • 15.6.1 頻域均衡器的實現原理
    • 15.6.2 頻域信號的增益與衰減
    • 15.6.3 均衡器的實現――仿Foobar的18段均衡器
  • 15.7 總結
  • 15.8 參考資料
?
第16章 全局最優解與遺傳算法
  • 16.1 遺傳算法的原理
    • 16.1.1 遺傳算法的基本概念
    • 16.1.2 遺傳算法的處理流程
  • 16.2 遺傳算法求解“0-1背包問題”
    • 16.2.1 基因編碼和種群初始化
    • 16.2.2 適應度函數
    • 16.2.3 選擇算子設計與輪盤賭算法
    • 16.2.4 交叉算子設計
    • 16.2.5 變異算子設計
    • 16.2.6 這就是遺傳算法
  • 16.3 總結
  • 16.4 參考資料
?
第17章 計算器程序與大整數計算
  • 17.1 哦,溢出了,出洋相的計算器程序
  • 17.2 大整數計算的原理
    • 17.2.1 大整數加法
    • 17.2.2 大整數減法
    • 17.2.3 大整數乘法
    • 17.2.4 大整數除法與模
    • 17.2.5 大整數乘方運算
  • 17.3 大整數類的使用
    • 17.3.1 與Windows的計算器程序一決高下
    • 17.3.2 最大公約數和最小公倍數
    • 17.3.3 用擴展歐幾里德算法求模的逆元
  • 17.4 總結
  • 17.5 參考資料
?
第18章 RSA算法-加密與簽名
  • 8.1 RSA算法的開胃菜
    • 18.1.1 將模冪運算轉化為模乘運算
    • 18.1.2 模乘運算與“蒙哥馬利算法”
    • 18.1.3 模冪算法
    • 18.1.4 素數檢驗與“米勒-拉賓算法”
  • 18.2 RSA加密算法原理
    • 18.2.1 RSA算法的數學理論
    • 18.2.2 加密和解密算法
    • 18.2.3 RSA算法的安全性
  • 18.3 數據塊分組加密
    • 18.3.1 字節流與大整數的轉換
    • 18.3.2 PCKS與OAEP加密填充模式
    • 18.3.3 數據加密算法實現
    • 18.3.4 數據解密算法實現
  • 18.4 RSA簽名與身份驗證
    • 18.4.1 RSASSA-PKCS與RSASSA-PSS簽名填充模式
    • 18.4.2 簽名算法實現
  • 18.5 總結
  • 18.6 參考資料
?
第19章 數獨游戲
  • 19.1 數獨游戲的規則與技巧
    • 19.1.1 數獨游戲的規則
    • 19.1.2 數獨游戲的常用技巧
  • 19. 2 計算機求解數獨問題
    • 19.2.1 建立問題的數學模型
    • 19.2.2 算法實現
    • 19.2.3 與傳統窮舉方法的結果對比
  • 19. 3 關于數獨的趣味話題
    • 19.3.1 數獨游戲有多少終盤
    • 19.3.2 史上最難的數獨游戲
  • 19. 4 總結
  • 19. 5 參考資料
?
第20章 華容道游戲
  • 20.1 華容道游戲介紹
  • 20.2 自動求解的算法原理
    • 20.2.1 定義棋盤的局面
    • 20.2.2 算法思路
  • 20.3 自動求解的算法實現
    • 20.3.1 棋局狀態與Zobrist哈希算法
    • 20.3.2 重復棋局和左右鏡像的處理
    • 20.3.3 正確結果的判斷條件
    • 20.3.4 武將棋子的移動
    • 20.3.5 棋局的搜索算法
  • 20.4 總結
  • 20.5 參考資料
?
第21章 A*尋徑算法
  • 21.1 尋徑算法演示程序
  • 21.2 Dijkstra算法
    • 21.2.1 Dijkstra算法原理
    • 21.2.2 Dijkstra算法實現
    • 21.2.3 Dijkstra算法演示程序
  • 21.3 帶啟發的搜索算法——A*算法
    • 21.3.1 A*算法原理
    • 21.3.2 常用的距離評估函數
    • 21.3.3 A*算法實現
  • 21.4 總結
  • 21.5 參考資料
?
第22章 俄羅斯方塊游戲
  • 22.1 俄羅斯方塊游戲規則
  • 22.2 俄羅斯方塊游戲人工智能的算法原 理
    • 22.2.1 影響評價結果的因素
    • 22.2.2 常用的俄羅斯方塊游戲人 工智能算法
    • 22.2.3 Pierre Dellacherie評估算 法
  • 22.3 Pierre Dellacherie算法實現
    • 22.3.1 基本數學模型和數據結構 定義
    • 22.3.2 算法實現
  • 22.4 總結
  • 22.5 參考資料
?
第23章 博弈樹與棋類游戲
  • 23.1 棋類游戲的AI
    • 23.1.1 博弈與博弈樹
    • 23.1.2 極大極小值搜索算法
    • 23.1.3 負極大極搜索算法
    • 23.1.4 “α-β”剪枝算法
    • 23.1.5 估值函數
    • 23.1.6 置換表與哈希函數
    • 23.1.7 開局庫與終局庫
  • 23.2 井字棋——最簡單的博弈游戲
    • 23.2.1 棋盤與棋子的數學模型
    • 23.2.2 估值函數與估值算法
    • 23.2.3 如何產生走法(落子方法)
  • 23.3 奧賽羅棋(黑白棋)
    • 23.3.1 棋盤與棋子的數學模型
    • 23.3.2 估值函數與估值算法
    • 23.3.3 搜索算法實現
    • 23.3.4 最終結果
  • 23.4 五子棋 
    • 23.4.1 棋盤與棋子的數學模型
    • 23.4.2 估值函數與估值算法
    • 23.4.3 搜索算法實現
    • 23.4.4 最終結果
  • 23.5 總結 
  • 23.6 參考資料
?
附錄A 算法設計的常用技巧
  • A.1 數組下標處理
  • A.2 一重循環實現兩重循環的功能
  • A.3 棋盤(迷宮)類算法方向遍歷
  • A.4 代碼的一致性處理技巧
  • A.5 鏈表和數組的配合使用
  • A.6 “以空間換時間”的常用技巧
  • A.7 利用表驅動避免長長的switch-case  
?
附錄B 一個棋類游戲的設計框架 
  • B.1 代碼框架的整體結構 
  • B.2 代碼框架的使用方法

總結

以上是生活随笔為你收集整理的《算法的乐趣》终于出版了的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。