算法這個(gè)詞對(duì)于非計(jì)算機(jī)從業(yè)人士而言,似乎就是晦澀、神秘的代名詞。其實(shí),算法在日常生活中隨處可見。做飯用的菜譜是一種算法、查字典的方法是一種算法、給期中考試分?jǐn)?shù)排名也用到了算法。事實(shí)上,算法可以說是這個(gè)信息爆炸的時(shí)代所依存的重要基石之一。 《寫給大家看的算法書》對(duì)于理解信息處理的基礎(chǔ)——算法而言,是一本非常優(yōu)秀的入門讀物。作者采用大量生動(dòng)的類比,配合簡潔易懂的配圖,深入淺出地講解算法,極大地拉近了讀者與算法的距離。通讀全書,讀者可以了解到計(jì)算機(jī)編程與算法的基本理念,也能對(duì)簡單常用的算法有一個(gè)大概的理解。
目錄: 第1 章 什么是算法 1 1.1 算法其實(shí)就在身邊 2 1.2 算法是人類智慧的結(jié)晶 4 1.3 了解算法對(duì)玩游戲有幫助嗎 6 1.4 算法有兩個(gè)必要條件 8 1.5 要特別了解的重要算法 10 專題1 算法基礎(chǔ)之結(jié)構(gòu)化編程思想 12 第2 章 變量和數(shù)組 13 2.1 所謂“數(shù)據(jù)”,就是各種各樣的信息 14 2.2 數(shù)據(jù)有不同的類型 16 2.3 最基礎(chǔ)的數(shù)據(jù)是“值” 18 2.4 裝著“值”的盒子叫作“變量” 20 2.5 要描述算法,變量是不可或缺的 22 2.6 所謂“代入”,指的是把數(shù)據(jù)賦予變量 24 2.7 不同的變量有不同的名稱 26 2.8 變量命名要能解釋變量裝載的數(shù)據(jù) 28 2.9 把數(shù)據(jù)代入變量的賦值語句 30 2.10 把變量中存儲(chǔ)的值代入其他變量 32 2.11 變量也有數(shù)據(jù)類型 34 2.12 保存大量同一數(shù)據(jù)類型值的“數(shù)組” 36 2.13 數(shù)組用“數(shù)組名”標(biāo)記 38 2.14 數(shù)組的元素用“下標(biāo)”管理 40 2.15 什么時(shí)候需要用到“數(shù)組”呢 42 2.16 “數(shù)組”就像儲(chǔ)物柜一樣 44 2.17 “二維數(shù)組”就像是旅館里的房間 46 2.18 二維數(shù)組的各個(gè)元素用兩個(gè)下標(biāo)來管理 48 2.19 字符串就是字符的連續(xù)拼合(數(shù)組) 50 2.20 獲取字符串長度的兩個(gè)方法 52 專題2 常用變量命名 54 第3章 數(shù)據(jù)結(jié)構(gòu) 55 3.1 為了高效處理大量數(shù)據(jù) 56 3.2 有哪些常用的數(shù)據(jù)結(jié)構(gòu) 58 3.3 “堆!鳖愃朴谧烂嫔隙逊e的書 60 3.4 “隊(duì)列”就像是超市收銀臺(tái)前排著的隊(duì)列 62 3.5 “鏈表”就像用繩子串起來的長串 64 3.6 只能檢索下一個(gè)數(shù)據(jù)的單向鏈表 66 3.7 能檢索上一個(gè)或者下一個(gè)數(shù)據(jù)的雙向鏈表 68 3.8 能快速定位第N 個(gè)數(shù)據(jù)的是“數(shù)組” 70 3.9 能快速插入、刪除數(shù)據(jù)的是“鏈表” 72 3.10 像鐘表一樣數(shù)據(jù)首尾相連的是“環(huán)形緩沖區(qū)” 74 3.11 管理有樹干、樹枝、樹葉一樣關(guān)系的數(shù)據(jù)的是“樹” 76 3.12 一個(gè)父節(jié)點(diǎn)對(duì)應(yīng)兩個(gè)子節(jié)點(diǎn)的是“二叉樹” 78 3.13 像筆畫的節(jié)點(diǎn)和連線組成的數(shù)據(jù)結(jié)構(gòu)是“圖” 80 專題3 為什么數(shù)組的起始下標(biāo)有時(shí)是0,有時(shí)是1 ? 82 第4章 學(xué)習(xí)算法基礎(chǔ) 83 4.1 循環(huán)處理是算法的基礎(chǔ) 84 4.2 計(jì)算1 ~N 的整數(shù)的總和 86 4.3 使用數(shù)組可以高效地處理大量數(shù)據(jù) 88 4.4 計(jì)算一年的營業(yè)額 90 4.5 求班級(jí)考試的總分和平均分 92 4.6 求最高分 94 4.7 求最低分 96 4.8 為考試成績排名 98 4.9 求全班學(xué)生不同科目考試合計(jì)的總分 100 4.10 求“時(shí)分秒”形式的時(shí)間差 102 4.11 交換兩個(gè)變量值的技巧 104 4.12 求兩個(gè)數(shù)值的最大公約數(shù) 106 專題4 2038 年的時(shí)候要留心? 108 第5 章 排序算法 109 5.1 排序是指對(duì)多個(gè)數(shù)據(jù)排列順序 110 5.2 關(guān)于排序算法 112 5.3 使用“木桶”輔助的“桶排序” 114 5.4 每次找出一個(gè)最。ㄗ畲螅┲档摹斑x擇排序” 116 5.5 像冒泡一樣進(jìn)行相鄰數(shù)據(jù)的交換的“冒泡排序” 118 5.6 向有序數(shù)據(jù)里正確位置插入數(shù)據(jù)的“插入排序” 120 5.7 把幾個(gè)有序數(shù)據(jù)合并叫作“歸并” 122 5.8 利用歸并進(jìn)行排序的算法叫作“歸并排序” 124 5.9 改進(jìn)了排序效率的“希爾排序” 126 5.10 最快的排序算法“快速排序” 128 專題5 把2 的n 階乘的值記下來吧 130 第6 章 搜索算法 131 6.1 所謂“搜索”,就是從數(shù)據(jù)集合中找到目標(biāo)數(shù)據(jù) 132 6.2 從頭開始按順序排除的搜索叫作“線性搜索” 134 6.3 可以進(jìn)行高速搜索的“二分搜索” 136 6.4 利用哈希表實(shí)現(xiàn)高效搜索 138 6.5 在字符串中搜索部分字符串的“字符串搜索” 140 6.6 高效搜索字符串的KMP 算法 142 6.7 逆向比較的BM 字符串搜索算法 144 專題6 在關(guān)系型數(shù)據(jù)庫中使用到的排序和搜索 146 第7 章 其他算法 147 7.1 用牛頓法求解高次方程 148 7.2 用高斯消元法求解方程組 150 7.3 用梯形面積和來求解定積分的梯形法 152 7.4 計(jì)算質(zhì)數(shù)的埃拉托斯特尼篩法 154 7.5 執(zhí)行時(shí)調(diào)用自身的遞歸函數(shù) 156 專題7 算法和流程圖 158 第8 章 算法和計(jì)算機(jī) 159 8.1 計(jì)算機(jī)的數(shù)據(jù)是用二進(jìn)制來表示的 160 8.2 讓二進(jìn)制數(shù)更易于閱讀(八進(jìn)制、十六進(jìn)制) 162 8.3 二進(jìn)制轉(zhuǎn)換成十進(jìn)制 164 8.4 十進(jìn)制轉(zhuǎn)換成二進(jìn)制 166 8.5 用二進(jìn)制表示負(fù)整數(shù) 168 8.6 邏輯或:任意一個(gè)為“1”則結(jié)果為“1” 170 8.7 邏輯并:同時(shí)為“1”則結(jié)果為“1” 172 8.8 “或非”:“1”和“0”得到的結(jié)果為“1” 174 8.9 “否定”:“1”變?yōu)椤?”,“0”變?yōu)椤?” 176 8.10 使用德摩根定律可以管理否定范式 178
|