本書的緣起
「大資料」在今天成為乙個非常時尚的概念,其影響已經遠遠超過了計算機學科本身,甚至影響到了自然科學、社會科學、人文科學等。由於其深遠的影響和廣泛的應用,大資料一直得到it從業人員的重視,他們對大資料相關理論、技術的學習有著強烈的需求。
「演算法設計與分析」是電腦科學的重要主題,進行大資料計算,「演算法設計與分析」是必不可少的步驟,可以說,演算法設計是「大資料落地」的關鍵之一。然而,雖然在今天的書店裡,關於大資料的書籍數不勝數,但真正從「演算法設計與分析」角度關注大資料的書卻很少。究其原因,當前「大資料演算法」的知識體系還遠不完備,因為「大資料」是計算機學科的增長點之一,「大資料演算法」的內涵和外延也不斷發生著變化,而且大資料上演算法設計與分析得到的知識駁雜,難以梳理出乙個明晰的知識體系。而大資料不同方面的從業人員,對「大資料演算法」的理解也不盡相同。作者曾經調研過國內外和「大資料演算法」相關的課程,其教學內容的差異非常大。
因而,筆者寫了本書,作為一種勇敢的嘗試,試圖兼顧深度和廣度來介紹「大資料演算法」。其緣起有三。
其一,筆者從本科加入了李建中教授領導的哈爾濱工業大學資料庫研究中心,留校工作到現在。隨著「資料」在計算機學科扮演的角色日益重要,中心的名字經歷了「資料庫研究中心」到「知識與資料工程研究中心」到「海量資料計算研究中心」到「國際大資料研究中心」的變化,並且一直是圍繞「資料」的計算開展研究。在中心良好的學術氛圍下,筆者進行了十幾年「資料」計算的研究,也一直在思考「資料為中心的計算到底需要何種特別的演算法設計技術」這一問題,有一些不成熟的心得,希望與讀者分享。
其二,機械工業出版社王彬編輯在2023年全國大資料會議上邀請筆者寫一本和「大資料」、「演算法」相關的書,促使筆者去思考和學習,試圖梳理出一條「大資料演算法」的脈絡。
其三,在網易雲課堂的孫志崗總監的鼓動下,筆者在2023年開設了自己的第一門mooc課程「大資料演算法」,2023年夏季學期筆者在哈爾濱工業大學作為全校選修課也開設了「大資料演算法」這門課程,這督促著筆者不得不從教學內容到教學方法上去思考如何表述「大資料演算法」。在教學過程中,很多學習這門課程的學生詢問教材的事情,很遺憾,筆者只能提供乙個參考文獻列表,而無法推薦教材,這也促使筆者撰寫這樣一本書。
本書的特點
本書對大資料計算中涉及的演算法設計與分析技術進行了介紹,針對大資料對演算法的要求,主要涉及四個方面:亞線性演算法、外存演算法、並行演算法和眾包演算法。書中給出了多個演算法,並對其進行了分析,盡可能使本書適用於各個層次的讀者。
書中每一章涉及一類大資料演算法設計技術,演算法主要用自然語言、偽**和例子來描述,力圖使本書介紹的演算法易懂易用。由於為大資料設計演算法,在「大資料」上進行實驗的成本比較高,因此「演算法分析」在「大資料演算法」中扮演著更重要的角色,本書也在演算法分析方面投入了相當的筆墨。有不同需求的讀者可以著重閱讀本書不同的部分。
由於「大資料」涉及的內容較廣,本書圍繞大資料的特點著重介紹大資料演算法設計與分析的方法,和大資料分析、大資料系統、大資料程式設計等書籍具有互補性,可以相互參照進行閱讀。
本書適合作為本科生和研究生「大資料」或者「大資料演算法」課程的教材,也可以作為「演算法設計與分析」等課程的補充教材或課外讀物。同時,本書也適合大資料領域從業人員參考。
由於本書是一種新的嘗試,涉及的內容非常寬且又是變化迅速,儘管筆者盡全力來寫本書(其中的一部分內容甚至來自於2023年發表的文獻),但是由於筆者水平有限,在本書內容的安排、表述、推導等方面的各種不當之處在所難免,敬請讀者在閱讀本書的過程中,不吝提出寶貴的建議,以改進本書。讀者的任何意見和建議請發至郵箱[email protected]。
致使用本書的教師
本書涉及了多方面內容,對於教學而言,本書適用於多門課程的教學,並可以作為「資料結構」、「演算法設計與分析」、「資料庫系統原理」等課程的補充教材,教師可以從本書中選擇適合教學的內容,例如,第5章適合作為「資料庫系統原理」這門課「資料庫索引」部分的補充教學內容,第4章適合作為「資料結構」這門課「排序」部分的補充教學內容。
針對不同層次的教學可以選擇不同的內容。針對本科生或者職業培訓的教學可以側重於演算法設計,著重講授演算法本身和演算法的應用場景,而對演算法分析可以略講;針對研究生的教學可以在講演算法設計的同時利用更多的時間來講授演算法的分析和推導。
本書每章後包含一些習題,供學生鞏固所學內容。
致使用本書的學生
希望本書為學生提供「大資料演算法」方面的入門指導,我們盡量讓描述通俗易懂,但是一些演算法、資料結構或者分析本身比較複雜,有些演算法分析遠看略顯「高冷」,請在閱讀時不要畏懼,可以按照相關的證明過程和推理步驟仔細梳理證明的脈絡。對於本書涉及的一些可能沒有學過的知識,通過「補充知識」部分進行了介紹。
要閱讀本書,希望讀者有一些演算法和程式設計方面的基礎,「資料結構」和「演算法設計與分析」是本書的先修課程,如果讀者沒有學過這方面的課程,可以通過閱讀《演算法導論(原書第3版)》 該書由機械工業出版社出版,isbn:978-7-111-40701-1。——編輯注如下章節自學相關知識:第1~12章、第15~17章、第18章、第22~24章。本書第2章和第3章涉及一些概率分析知識,如果不需要掌握概率分析的技術而僅讀懂本書,本書提供的補充知識足以幫助你理解證明過程;如果希望系統掌握概率分析,可以先閱讀一下《概率與計算》 該書由機械工業出版社出版,isbn:978-7-111-20805-1。——編輯注的第1~6章,奠定概率分析方面的基礎,再閱讀本書第2章和第3章中的證明。本書第7~9章涉及了並行演算法,但並不需要讀者具備並行體系結構和平行計算相關的知識,因為當前平台(如hadoop等)已經提供了足夠方便的介面,可以讓讀者在不具備這些知識的前提下實現資料密集型並行演算法。
第1章 緒論
1.1 大資料概述
1.2 大資料演算法
1.3 大資料演算法設計與分析
1.4 [本書的內容](
第2章 時間亞線性演算法
2.1 時間亞線性演算法概述
2.2 最小生成樹代價估計
2.3 時間亞線性判定演算法概述
2.4 陣列有序的判定演算法
2.5 串相等判定演算法
第3章 空間亞線性演算法
3.1 空間亞線性演算法概述
3.2 水庫抽樣
3.3 尋找頻繁元素的非隨機演算法
3.4 估算不同元素的數量
3.5 尋找頻繁元素的隨機演算法
《大資料導論》 導讀
譯者序致謝 作者簡介 第一部分 大資料基礎 第1章 理解大資料 1.1 概念與術語 1.2 大資料特徵 1.3 不同資料型別 1.4 案例學習背景 1.5 案例學習 第2章 採用大資料的商業動機與驅動 2.1 市場動態 2.2 業務架構 2.3 業務流程管理 2.4 資訊與通訊技術 2.5 萬物網際...
《大資料導論》導讀
目 錄 譯者序 致謝 作者簡介 第一部分 大資料基礎 第1章 理解大資料 1.1 概念與術語 1.1.1 資料集 1.1.2 資料分析 1.1.3 資料分析學 1.1.4 商務智慧型 1.1.5 關鍵績效指標 1.2 大資料特徵 1.2.1 容量 1.2.2 速率 1.2.3 多樣性 1.2.4 真...
《大資料管理概論》一導讀
叢書前言 前言作者簡介 第1章 概述 1.1 大資料的基本概念 1.2 大資料的演變過程 1.3 大資料應用 1.4 大資料的處理模式 1.4.1 批處理 1.4.2 流處理 1.5 大資料管理的關鍵技術 1.5.1 大資料融合 1.5.2 大資料分析 1.5.3 大資料隱私 1.5.4 大資料能耗...