作 者:魏夢舒 著
定 價:79
出 版 社:電子工業出版社
出版日期:2019年04月01日
頁 數:280
裝 幀:平裝
ISBN:9787121361975
"小灰的算法故事給算法這顆“炮彈”包上了“糖衣”,讓算法的威力潛藏於內,外表不再嚇人,萌萌噠Q彈可愛。從基本數據結構,到各類排序算法,再到面試算法,再到職場應用,書中的主角小灰和大黃帶領大家逐個破解。和一群快樂的小倉鼠共同領悟算法思想、理解算法對內存空間和性能的影響,並開動腦筋去尋求解決問題的尚佳方案。"
●章 算法概述 / 11.1 算法和數據結構 / 11.1.1 小灰和大黃 / 11.1.2 什麼是算法 / 31.1.3 什麼是數據結構 / 71.2 時間復雜度 / 81.2.1 算法的好與壞 / 81.2.2 基本操作執行次數 / 101.2.3 漸進時間復雜度 / 121.2.4 時間復雜度的巨大差異 / 151.3 空間復雜度 / 161.3.1 什麼是空間復雜度 / 161.3.2 空間復雜度的計算 / 191.3.3 時間與空間的取舍 / 211.4 小結 / 22第2章 數據結構基礎 / 232.1 什麼是數組 / 232.1.1 初識數組 / 232.1.2 數組的基本操作 / 262.1.3 數組的優勢和劣勢 / 322.2 什麼是鏈表 / 332.2.1 “正規軍”和“地下黨” / 332.2.2 鏈表的基本操作 / 352.3 棧和隊列 / 422.3.1 物理結構和邏輯結構 / 422.3.2 什麼是棧 / 432.3.3 棧的基本操作 / 442.3.4 什麼是隊列 / 452.3.5 隊列的基本操作 / 462.3.6 棧和隊列的應用 / 502.4 神奇的散列表 / 512.4.1 為什麼需要散列表 / 512.4.2 哈希函數 / 542.4.3 散列表的讀寫操作 / 552.5 小結 / 59第3章 樹 / 613.1 樹和二叉樹 / 613.1.1 什麼是樹 / 613.1.2 什麼是二叉樹 / 643.1.3 二叉樹的應用 / 673.2 二叉樹的遍歷 / 713.2.1 為什麼要研究遍歷 / 713.2.2 深度優先遍歷 / 733.2.3 廣度優先遍歷 / 843.3 什麼是二叉堆 / 883.3.1 初識二叉堆 / 883.3.2 二叉堆的自我調整 / 903.3.3 二叉堆的代碼實現 / 953.4 什麼是優先隊列 / 983.4.1 優先隊列的特點 / 983.4.2 優先隊列的實現 / 993.5 小結 / 103第4章 排序算法 / 1054.1 引言 / 1054.2 什麼是冒泡排序 / 1074.2.1 初識冒泡排序 / 1074.2.2 冒泡排序的優化 / 1104.2.3 雞尾酒排序 / 1144.3 什麼是快速排序 / 1184.3.1 初識快速排序 / 1184.3.2  素的選擇 / 1204.3.3 &nb素的交換 / 1224.3.4 單邊循環法 / 1254.3.5 非遞歸實現 / 1284.4 什麼是堆排序 / 1314.4.1 傳說中的堆排序 / 1314.4.2 堆排序的代碼實現 / 1344.5 計數排序和桶排序 / 1374.5.1 線性時間的排序 / 1374.5.2 初識計數排序 / 1384.5.3 計數排序的優化 / 1404.5.4 什麼是桶排序 / 1454.6 小結 / 149第5章 面試中的算法 / 1505.1 躊躇滿志的小灰 / 1505.2 如何判斷鏈表有環 / 1515.2.1 一場與鏈表相關的面試 / 1515.2.2 解題思路 / 1555.2.3 問題擴展 / 1585.3 最小棧的實現 / 1615.3.1 一場關於棧的面試 / 1615.3.2 解題思路 / 1635.4 如何求出優選公約數 / 1665.4.1 一場求優選公約數的面試 / 1665.4.2 解題思路 / 1685.5 如何判斷一個數是否為2的整數次冪 / 1735.5.1 一場很“2”的面試 / 1735.5.2 解題思路 / 1755.6 無序數組排序後的優選相鄰差 / 1785.6.1 一道奇葩的面試題 / 1785.6.2 解題思路 / 1795.7 如何用棧實現隊列 / 1845.7.1 又是一道關於棧的面試題 / 1845.7.2 解題思路 / 1865.8 尋找全排列的下一個數 / 1915.8.1 一道關於數字的題目 / 1915.8.2 解題思路 / 1935.9 刪去k個數字後的最小值 / 1965.9.1 又是一道關於數字的題目 / 1965.9.2 解題思路 / 1985.10 如何實現大整數相加 / 2055.10.1 加法,你會不會 / 2055.10.2 解題思路 / 2065.11 如何求解金礦問題 / 2115.11.1 一個關於財富自由的問題 / 2115.11.2 解題思路 / 2135.12 尋找缺失的整數 / 2235.12.1 “五行”缺一個整數 / 2235.12.2 問題擴展 / 225第6章 算法的實際應用 / 2306.1 小灰上班的天 / 2306.2 Bitmap的巧用 / 2326.2.1 一個關於用戶標簽的需求 / 2326.2.2 用算法解決問題 / 2346.3 LRU算法的應用 / 2416.3.1 一個關於用戶信息的需求 / 2416.3.2 用算法解決問題 / 2436.4 什麼是A星尋路算法 / 2496.4.1 一個關於迷宮尋路的需求 / 2496.4.2 用算法解決問題 / 2516.5 如何實現紅包算法 / 2626.5.1 一個關於錢的需求 / 2626.5.2 用算法解決問題 / 2646.6 算法之路無止境 / 268
本書通過主人公小灰的心路歷程,用漫畫的形式講述了算法和數據結構的基礎知識,復雜多變的算法面試題目及算法的實際應用場景。首先介紹了算法和數據結構的總體概念,告訴大家算法是什麼,數據結構又是什麼,都有哪些用途,如何分析時間復雜度,如何分析空間復雜度。第二章 介紹了很基本的數據結構,包括數組、鏈表、棧、隊列、哈希表的概念和讀寫操作。第三章 介紹了樹和二叉樹的概念、二叉樹的各種遍歷方式、二叉樹的特殊形式二叉堆和優先隊列的應用。第四章 介紹了幾種典型的排序算法,包括冒泡排序、快速排序、堆排序、計數排序、桶排序。第五章 介紹了十餘種職場上流行的算法面試題目及詳細的解題思路。例如怎樣判斷鏈表有環、怎樣計算大整數加法等。第六章 介紹了算法在職場上的一些應用,例如使用LRU算法來淘汰冷數據,使用Bitmap算法來統計用戶特征等。
魏夢舒 著
魏夢舒(@程序員小灰):公眾號“程序員小灰”的作者,多年的軟件行業從業經驗,先後在京東金融和摩拜科技從事研發工作,對算法有一定的興趣和經驗。
"推薦序初識小灰是因為在他的公眾號看到一篇講動態規劃的文章,當時覺得挺意外,沒想到還能有人用漫畫來解釋動態規劃算法。所謂算法,其實是個很寬泛的概念。有理解起來難度超大,燒腦到要“爆炸”的;也有簡單直接,一目了然的;更多的卻是,雖然看起來復雜,但隻要方法得當,搞清原理,掌握起來還是很容易的那種算法。可是很多人被“算法”二字“猙獰”的外表嚇住了,久久不敢接觸它。好不容易鬥膽翻翻算法書,結果看到的不是大篇大篇的代碼,就是亂七八糟的符號。這都是什麼呀?!算了,看來是學不會算法了,放棄吧……但凡書籍文章,最難讀的,肯定是公式符號;而優選讀的,無外乎圖像、對話等。本書作者以可愛的小灰和大黃兩個漫畫形像為主人公,把對算法的描述過程嵌入到它們的對話之中,並輔之以圖形等直觀方式來表達數據結構和操作步驟——這種表達形式帶著天然的親和力,接近沒有計算機背景的讀者讀來也不覺得生硬。小灰所做的事等