-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

輕松學算法——互聯網算法面試寶典

( 簡體 字)
作者:趙燁類別:1. -> 程式設計 -> 演算法
   2. -> 程式設計 -> 面試指南
譯者:
出版社:電子工業出版社輕松學算法——互聯網算法面試寶典 3dWoo書號: 44702
詢問書籍請說出此書號!

缺書
NT售價: 345

出版日:7/1/2016
頁數:412
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121291944
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

前言
互聯網越來越熱門了,相信每個人都或多或少地在體驗如今的互聯網帶給我們的各種便利。借助之前非常火熱的電商,我們可以足不出戶地購買衣服和日常用品;現在,就算是一個超級宅的人,也可以不出門便可完成訂餐、在線交水電費、通過各種到家服務進行保潔和按摩、通過應用將在超市買的東西輕松配送到家,等等。在線辦公在一些行業中也開始流行,視頻會議更是可以輕松地實現異地交流。之前我們還需要見面簽約,現在越來越多地在進行在線簽約。
不得不感謝互聯網帶給我們的各種便利,但這背后是由很多產品、運營和技術人員的努力在支撐的。
我最初所在的公司屬于傳統行業,但也是一家服務與互聯網公司。相信任何行業的技術員工都想進入互聯網公司,這其中的好處有太多:技術的挑戰、大用戶量、大數據、高并發,這些都是我們所渴望的。
經常聽到身邊有很多人在抱怨算法不好學、學會了記不住、記住了不知道怎么用等,所以我決定寫本書,結合自己的經驗講解一些算法的實際應用及適用場景,希望通過本書幫助更多的朋友進入互聯網公司。
其實很多人怯場時無非擔心的是自己的算法太差、技術太爛、別人會瞧不起,等等。本書可以幫助讀者解決一些基礎、常見的算法問題,當然,在技術上仍需自己努力,若再有一點運氣,則一定可以找到理想的公司。不要害怕,很多時候就算沒有面試成功,也應該總結一下,等過段時間后便能感悟到自己的成長。
算法有很多,而且不停地有新的算法出現。本書將介紹其中一些比較基礎且常用的算法,當然,會先簡單介紹幾個基礎的數據結構作為學習算法的鋪墊;之后會介紹一些在工作中可能用到的算法;最后會介紹一些新興的算法,以拓展讀者的思路。
我會盡量以輕松、愉快的方式介紹每一個算法,由淺入深地介紹如何在工作中使這些算法變成我們的代碼,讓我們在開發應用時更高效。
內容簡介:

本書共分為12個章節,首先介紹了一些基礎的數據結構,以及常用的排序算法和查找算法;其次介紹了兩個稍微復雜一些的數據結構——樹和圖,還介紹了每種數據結構和算法的適用場景,之后是一些在工作與面試中的實際應用,以字符串、數組、查找等為例介紹了一些常見的互聯網面試題及分析思路,便于讀者了解這些思路,順利地通過互聯網公司的面試;最后介紹了一些常見的算法思想,便于讀者對今后遇到的算法問題更輕易地想出解決方案。本書的講解輕松有趣,易于讀者把煩瑣、枯燥的算法學習變為有趣、愉快的學習,把被動學習變為主動學習。本書也介紹了一些會在工作面試中用到的算法。對于一些正在學習算法的人來說,本書絕對是可以幫你輕松掌握算法的輔助資料;對于已經了解算法的人來說,可以從本書中了解到這些算法是如何在實際工作中使用的。本書適合即將畢業的學生、初入職場的工程師及想補充基礎算法知識的人學習,也適合作為一本互聯網公司面試的參考書,更是一本不可多得的便于讀者時常補習算法知識的收藏寶典。

目錄:

第1章 數組、集合和散列表 1
1.1 要用就要提前想好的數據結構—數組 2
1.1.1 什么是數組 2
1.1.2 數組的存儲結構 3
1.1.3 數組的特點 6
1.1.4 數組的適用場景 7
1.2 升級版數組—集合 8
1.2.1 什么是集合 8
1.2.2 集合的實現 8
1.2.3 集合的特點 13
1.2.4 集合的適用場景 13
1.2.5 數組與變長數組的性能 14
1.3 數組的其他應用—散列表 14
1.3.1 什么是散列表 15
1.3.2 對散列表函數產生沖突的解決辦法 16
1.3.3 散列表的存儲結構 17
1.3.4 散列表的特點 18
1.3.5 散列表的適用場景 20
1.3.6 散列表的性能分析 21
1.4 小結 28
第2章 棧、隊列、鏈表 29
2.1 漢諾塔游戲—棧 30
2.1.1 什么是漢諾塔 30
2.1.2 什么是棧 31
2.1.3 棧的存儲結構 31
2.1.4 棧的特點 36
2.1.5 棧的適用場景 36
2.2 火爆的奶茶店—隊列 37
2.2.1 什么是隊列 37
2.2.2 隊列的存儲結構 38
2.2.3 隊列的特點 43
2.2.4 隊列的適用場景 44
2.3 用棧實現隊列 45
2.3.1 用兩個棧實現隊列 46
2.3.2 兩個隊列實現棧 50
2.4 鏈表 53
2.4.1 什么是鏈表 54
2.4.2 鏈表的存儲結構 54
2.4.3 鏈表的操作 55
2.4.4 鏈表的特點 66
2.4.5 鏈表的適用場景 66
2.4.6 鏈表的性能分析 67
2.4.7 面試舉例:如何反轉鏈表 68
2.5 鏈表其實也可以用數組模擬 69
2.5.1 靜態鏈表 70
2.5.2 靜態鏈表的實現 70
2.5.3 靜態鏈表的特點 80
2.6 再談漢諾塔 81
2.6.1 漢諾塔的移動原理 81
2.6.2 漢諾塔的遞歸實現 82
第3章 排序算法 84
3.1 算法基礎 85
3.1.1 時間復雜度 85
3.1.2 空間復雜度 88
3.1.3 穩定性 88
3.2 快而簡單的排序—桶排序 89
3.2.1 舉個例子 89
3.2.2 什么是桶排序 90
3.2.3 桶排序的實現 90
3.2.4 桶排序的性能及特點 92
3.2.5 桶排序的適用場景 93
3.3 咕嘟咕嘟的冒泡排序 94
3.3.1 什么是冒泡排序 94
3.3.2 冒泡排序的原理 94
3.3.3 冒泡排序的實現 96
3.3.4 冒泡排序的特點及性能 99
3.3.5 冒泡排序的適用場景 99
3.3.6 冒泡排序的改進方案 100
3.4 最常用的快速排序 100
3.4.1 什么是快速排序 101
3.4.2 快速排序的原理 101
3.4.3 快速排序的實現 105
3.4.4 快速排序的特點及性能 107
3.4.5 快速排序的適用場景 108
3.4.6 快速排序的優化 108
3.5 簡單的插入排序 109
3.5.1 什么是插入排序 110
3.5.2 插入排序的原理 110
3.5.3 插入排序的實現 112
3.5.4 插入排序的特點及性能 114
3.5.5 插入排序的適用場景 115

3.6 直接插入的改進—希爾排序 115
3.6.1 什么是希爾排序 116
3.6.2 希爾排序的原理 116
3.6.3 希爾排序的實現 118
3.6.4 希爾排序的特點及性能 120
3.6.5 希爾排序的適用場景 121
3.7 簡單選擇排序 121
3.7.1 什么是選擇排序 122
3.7.2 簡單選擇排序的原理 122
3.7.3 簡單選擇排序的實現 123
3.7.4 選擇排序的特點及性能 125
3.7.5 簡單選擇排序的優化 125
3.7.6 選擇排序的適用場景 126
3.8 小結 126
第4章 搜索,沒那么難 128
4.1 最先想到的—順序查找 129
4.1.1 最先想到的 129
4.1.2 順序查找的原理與實現 129
4.1.3 順序查找的特點及性能分析 131
4.1.4 順序查找的適用場景 132
4.2 能不能少查點—二分查找 133
4.2.1 某些特殊情況的查找需求 133
4.2.2 二分查找的原理及實現 133
4.2.3 二分查找的優化 137
4.2.4 二分查找的特點及性能分析 138
4.2.5 二分查找的適用場景 139
4.2.6 我是來還債的—之前欠的二分插入排序 139
4.3 行列遞增的矩陣查找—二分查找思維拓展 141
4.3.1 一道題 142
4.3.2 幾個解法 142
4.3.3 其他拓展 153
4.4 分塊查找 154
4.4.1 每次插入元素都要有序嗎 154
4.4.2 什么是分塊查找 155
4.4.3 分塊查找的原理及實現 155
4.4.4 分塊查找的特點與性能分析 159
4.4.5 分塊查找的適用場景 160
4.5 查找算法小結 161
4.6 搜索引擎與倒排索引 162
4.6.1 什么是搜索引擎 162
4.6.2 倒排索引 162
4.6.3 索引實例 163
4.6.4 倒排索引的關鍵字提取 164
4.6.5 商業索引的其他拓展 164
第5章 樹 166
5.1 樹的定義及存儲結構 167
5.1.1 什么是樹 167
5.1.2 其他相關術語 168
5.1.3 都有哪些樹 170
5.1.4 樹的存儲結構及實現 170
5.2 二叉樹 173
5.2.1 什么是二叉樹 173
5.2.2 還有兩種特殊的二叉樹 173
5.2.3 二叉樹的實現 175
5.2.4 二叉樹的遍歷 185
5.2.5 完全二叉樹 187
5.3 二叉樹的查找算法 188
5.3.1 二叉查找樹 188
5.3.2 平衡二叉樹 198
5.4 B-樹、B+樹 202
5.4.1 什么是B-樹 203
5.4.2 什么是B+樹 204
5.4.3 B-樹、B+樹的特點及性能分析 205
5.5 在MySQL數據庫中是如何應用B+樹的 206
5.6 哈夫曼樹 209
5.6.1 幾個術語 209
5.6.2 什么是哈夫曼樹 209
5.6.3 哈夫曼樹的構造 211
5.6.4 哈夫曼編碼及解碼 213
5.7 堆 215
5.7.1 什么是堆 215
5.7.2 堆的基本操作 216
5.7.3 堆的性能分析 221
5.7.4 堆排序 222
5.8 紅黑樹 224
5.8.1 什么是紅黑樹 224
5.8.2 紅黑樹的特點與優勢 224
第6章 圖 226
6.1 圖的定義及相關術語 227
6.1.1 什么是圖 227
6.1.2 圖的分類 227
6.1.3 圖的相關術語 228
6.2 圖的表示與存儲方式 229
6.2.1 鄰接矩陣 229
6.2.2 鄰接表 234
6.3 更多的圖 237
6.3.1 連通圖 238
6.3.2 強連通圖 238
6.4 深度優先遍歷與廣度優先遍歷 238
6.4.1 深度優先遍歷 239
6.4.2 廣度優先遍歷 248
6.4.3 兩種遍歷方法的對比 253

6.5 最短路徑 254
6.5.1 帶權圖 254
6.5.2 Dijkstra算法 255
6.5.3 Floyd算法 269
第7章 字符串 272
7.1 字符及字符串簡介 273
7.1.1 什么是字符 273
7.1.2 什么是字符串 273
7.2 字符的全排列 275
7.2.1 問題描述及分析 275
7.2.2 最先想到的 275
7.2.3 利用字典序排列 278
7.3 反轉字符串 283
7.3.1 問題描述及分析 283
7.3.2 最先想到的 283
7.3.3 對換反轉法 285
7.3.4 拓展—旋轉字符串 287
7.4 判斷回文 288
7.4.1 問題描述及分析 288
7.4.2 對半判斷 289
7.5 尋找最大的回文子串 290
7.5.1 問題描述及分析 290
7.5.2 遍歷實現 291
7.6 將字符串轉換為數字 293
7.6.1 問題描述及分析 293
7.6.2 解決 293
7.7 判斷字符串包含的問題 297
7.7.1 問題描述及分析 297
7.7.2 非常簡單的解決思路 297
7.7.3 利用排序進行優化 299
7.7.4 投機取巧的素數方案 302
7.7.5 用散列表進行實現 304
7.7.6 用位運算進行實現 305
第8章 數組還有好多玩法 308
8.1 從數組中找出其和為指定值的兩個數 309
8.1.1 問題描述及分析 309
8.1.2 最簡單的辦法 309
8.1.3 一切為了速度 310
8.1.4 排序總是好的選擇 311
8.1.5 還能更好 313
8.2 找出連加值最大的子數組 315
8.2.1 問題描述及分析 315
8.2.2 暴力窮舉法 316
8.2.3 動態規劃法 319
8.2.4 問題拓展 321
8.3 數組正負值排序 323
8.3.1 問題描述及分析 323
8.3.2 最直觀的解法 324
8.3.3 借鑒簡單插入排序 325
8.3.4 借鑒快速排序 327
8.3.5 拓展 329
8.4 將數組隨機打亂順序 329
8.4.1 問題描述及分析 329
8.4.2 隨便糊弄一下 330
8.4.3 插入排序的思想又來了 331
8.5 數組賦值 333
8.5.1 問題描述及分析 333
8.5.2 分解計算 333
8.6 尋找旋轉數組的拐點 335
8.6.1 問題描述及分析 335
8.6.2 最簡單的方法 336
8.6.3 利用“有序” 337
8.7 荷蘭國旗問題 339
8.7.1 問題描述及分析 339
8.7.2 排序法 340
8.7.3 快速排序帶給人的靈感 340
第9章 查找又來了 344
9.1 出現次數超過一半的數字 345
9.1.1 問題描述及分析 345
9.1.2 排序法 345
9.1.3 散列表 347
9.1.4 刪除法 349
9.1.5 更優的解法 349
9.2 尋找缺少的數字 352
9.2.1 問題描述及分析 352
9.2.2 借助快速排序 352
9.2.3 借助散列表實現 354
9.2.4 投機取巧法 355
9.2.5 思路拓展 357
9.3 在10億個數中找出最大的1萬個數 357
9.3.1 問題描述及分析 357
9.3.2 拍腦袋想問題 358
9.3.3 借助快速排序 358
9.3.4 不想都放入內存 358
9.3.5 傳說中的大頂堆 359
9.3.6 拓展—找出數組中第k大的數 359
第10章 更多 363
10.1 不使用額外的空間交換兩個數 364
10.1.1 問題描述 364
10.1.2 分析問題 364
10.1.3 解決問題 364
10.2 拿乒乓球的問題 365
10.2.1 問題描述 365
10.2.2 分析問題 365
10.2.3 解決問題 365
第11章 實現一些集合類 367
11.1 棧(Stack)的實現 368
11.1.1 實現前的思考 368
11.1.2 實現棧 368
11.1.3 參考JDK的實現 372
11.2 變長數組(ArrayList)的實現 372
11.2.1 實現前的思考 372
11.2.2 實現變長數組 373
11.2.3 參考JDK的實現 380
11.3 散列表(HashMap)的實現 381
11.3.1 實現前的思考 381
11.3.2 實現散列表 381
11.3.3 參考JDK的實現 389
第12章 方向 390
12.1 算法的一些常用思想 391
12.1.1 分治法 391
12.1.2 動態規劃 391
12.1.3 貪心算法 391
12.1.4 回溯法 392
12.1.5 分支限界法 392
12.2 新興算法 392
12.2.1 加密算法 392
12.2.2 商業算法 393
12.3 其他算法 393
12.3.1 基數估計算法 393
12.3.2 蟻群算法 394
序: