演算法之美pdf
1. 《改變未來的九大演算法》pdf下載在線閱讀,求百度網盤雲資源
《改變未來的九大演算法》(【美】約翰·麥考密克(John MacCormick))電子書網盤下載免費在線閱讀
資源鏈接:
鏈接:
書名:改變未來的九大演算法
作者:【美】約翰·麥考密克(John MacCormick)
譯者:管策
豆瓣評分:7.5
出版社:中信出版社
出版年份:2019-2
頁數:272
內容簡介:
計算機如何精確地傳輸海量數據,識別語音和筆跡;智能手機、平板電腦如何在幾分之一秒內搜索整個頁面;身處大數據時代的我們,究竟該如何應對變化莫測的世界。
計算機演算法的底層建設為經濟和產業發展提供了原始動力。在科技互聯網時代,使用計算機和科技設備都不可避免地要依賴計算機科學的基礎思想,而這些思想都誕生於20世紀。
《改變未來的九大演算法》是一本科普讀物,作者致力於將計算機科學的復雜思想為大眾做深入淺出的解讀。此書通過簡明的語言和生動的例證,闡述了計算機王國的核心演算法:搜索引擎、PageRank、公鑰加密、糾錯碼、圖形識別、數據壓縮、資料庫、數字簽名等。在解釋這些演算法的同時,作者也向我們展示了充滿科學原創精神的計算機世界:每一種演算法的提出不但拓展了虛擬世界的領域,它同時也是人類智慧的彰顯,可以被廣泛運用於眾多領域,以推動商業和社會文明的發展。
作者簡介:
約翰·麥考密克(John MacCormick),計算機科學的領頭人和導師。牛津大學博士,曾在惠普和微軟從事研究工作。現任迪金森學院計算機學科的教授。多項專利所有者。
2. 數據結構與演算法之美筆記——散列表(上)
摘要:
我們已經知道隨機訪問數組元素時間復雜度只有 ,效率極高,當我們想利用數組的這個特性時就需要將元素下標與存儲信息對應。例如,一個商店只有四件商品,依次編號 0 至 3,這樣就可以將四件商品信息按照編號對應下標的方式存儲到數組中,依據編號就可以快速從數組中找到相應商品信息。
如果一段時間之後,商店盈利並且重新進貨 100 件商品,商家想對大量商品在編號上區分類別,這時陵鋒頌候需要使用類別編號加順序編號的方式標識每件商品,這種編號變得復雜,並不能直接對應數組下標,此時的商品編號又該如何對應數組下標以實現快速查找商品的功能?這時候我們可以將類別編號去除之後按照順序編號對應數組下標,同樣也能享受數組高效率隨機訪問的福利。這個例子中,商品編號稱為「 鍵 」或「 關鍵字 」,將鍵轉化為數組對應下標的方法就是「 散列函數 」或「 Hash 函數 」,由散列函數生成的值叫做「 散列值 」或「 Hash 值 」,而這樣的數組就是散列表。
從散列表的原理來看,數據通過散列函數計算得到散列值是關鍵,這個步驟中散列函數又是其中的核心,一個散列函數需要遵守以下三個原則。
因為散列函數生成的散列值對應數組下標,而數組下標就是非負整數,所以需要滿足第一個原則;兩個相等的數據經過散列演算法得到的散列值肯定相等,否則利用散列值在散列表中查找數據就無從談起;至於第三個原則雖然在情理之中,卻不那麼容易做到,即使是被廣泛運用的散列演算法也會出現散列值沖突的情況,導致無法滿足第三個原則。
散列函數作為散列表的核心部分,尺鄭必然不能拖散列表的執行效率後腿,畢竟散列表的查詢、插入和刪除操作都需要經過基告散列函數,所以散列函數不能太復雜,執行效率不能太低。由於散列函數不可避免地都會出現散列沖突情況,散列函數要盡量降低散列沖突,使散列值能夠均勻地分布在散列表中。
解決散列沖突主要有「 開放定址 」(open addressing)和「 鏈表法 」(chaining)兩類方法。
開放定址法是指插入操作時,當生成的散列值對應槽位已經被其他數據佔用,就探測空閑位置供插入使用,其中探測方法又分為「 線性探測 」(Linear Probing)、「 二次探測 」(Quadratic Probing)和「 雙重散列 」(Double hashing)三種。
線性探測是其中較為簡單的一種,這種探測方式是當遇到散列沖突的情況就順序查找(查找到數組尾部時轉向數組頭部繼續查找),直到查找到空槽將數據插入。當進行查找操作時,也是同樣的操作,利用散列值從散列表中取出對應元素,與目標數據比對,如果不相等就繼續順序查找,直到查找到對應元素或遇到空槽為止,最壞情況下查找操作的時間復雜度可能會下降為 。
散列表除了支持插入和查找操作外,當然也支持刪除操作,不過並不能將需刪除的元素置為空。如果刪除操作是將元素置為空的話,查找操作遇到空槽就會結束,存儲在被刪除元素之後的數據就可能無法正確查找到,這時的刪除操作應該使用標記的方式,而不是使用將元素置空,當查找到被標識已刪除的元素將繼續查找,而不是就此停止。
線性探測是一次一個元素的探測,二次探測就是使用都是線性探測的二次方步長探測。例如線性探測是 ,那二次探測對應的就是 。
雙重探測是當第一個散列函數沖突時使用第二個散列函數運算散列值,利用這種方式探測。例如,當 沖突時,就使用 計算散列值,如果再沖突就使用 計算散列值,依此類推。
關於散列表的空位多少使用「 裝載因子 」(load factor)表示,裝載因子滿足數學關系 ,也就是說裝載因子越大,散列表的空閑空間越小,散列沖突的可能性也就越大,一般我們會保持散列表有一定比例的空閑空間。
為了保持散列表一定比例的空閑空間,在裝載因子到達一定閾值時需要對散列表數據進行搬移,但散列表搬移比較耗時。你可以試想下這樣的步驟,在申請一個新的更大的散列表空間後,需要將舊散列表的數據重新通過散列函數生成散列值,再存儲到新散列表中,想想都覺得麻煩。
散列表搬移的操作肯定會降低散列表的操作效率,那能不能對這一過程進行改進?其實可以將低效的擴容操作分攤至插入操作,當裝載因子達到閾值時不一次性進行散列表搬移,而是在每次插入操作時將一個舊散列表數據搬移至新散列表,這樣搬移操作的執行效率得到了提高,插入操作的時間復雜度也依然能保持 的高效。當新舊兩個散列表同時存在時查詢操作就要略作修改,需先在新散列表中查詢,如果沒有查找到目標數據再到舊散列表中查找。
當然,如果你對內存有更高效的利用要求,可以在裝載因子降低至某一閾值時對散列表進行縮容處理。
除了開放定址之外,還可以使用鏈表法解決散列沖突的問題。散列值對應的槽位並不直接存儲數據,而是將數據存儲在槽位對應的鏈表上,當進行查找操作時,根據散列函數計算的散列值找到對應槽位,再在槽位對應的鏈表上查找對應數據。
鏈表法操作的時間復雜度與散列表槽位和數據在槽位上的分布情況有關,假設有 n 個數據均勻分布在 m 個槽位的散列表上,那鏈表法的時間復雜度為 。鏈表法可以不用像開放定址一樣關心裝載因子,但需要注意散列函數對散列值的計算,使鏈表結點能夠盡可能均勻地分布在散列表槽位上,避免散列表退化為鏈表。有時黑客甚至會精心製造數據,利用散列函數製造散列沖突,使數據集中某些槽位上,造成散列表性能的極度退化。
面對這樣的惡意行為散列表只能坐以待斃嗎?其實不然,當槽位上的鏈表過長時,可以將其改造成之前學習過的跳錶等,鏈表改造為跳錶後查詢的時間復雜度也只是退化為 ,依然是可以接受的范圍。
鏈表法在存儲利用上比開放定址更加高效,不用提前申請存儲空間,當有新數據時申請一個新的結點就行。而且鏈表法對裝載因子也不那麼敏感,裝載因子的增高也只是意味著槽位對應的鏈表更長而已,鏈表增長也有將鏈表改造為跳錶等結構的應對策略,所以鏈表法在裝載因子超過 1 的情況下都可保持高效。
開放定址不存在像鏈表法一樣有鏈表過長而導致效率降低的煩惱,不過裝載因子是開放定址的晴雨表,裝載因子過高會造成散列沖突機率的上升,開放定址就需要不斷探測空閑位置,演算法的執行成本會不斷被提高。而且在刪除操作時只能將數據先標記為刪除,對於頻繁增刪的數據效率會受到影響。
當然也可以在這種風險出現前進行散列表的動態擴容,不過這樣就會出現大量空閑的存儲空間,導致存儲的利用效率過低,這種現象在數據量越大的情況下越明顯。所以開放定址比較適用於數據量較小的情況。
鏈表法對於散列沖突的處理更加靈活,同時對存儲空間的利用效率也更高,但鏈表結點除了存儲數據外還需要存儲指針,如果存儲數據較小指針佔用的存儲甚至會導致整體存儲翻倍的情況,但存儲數據較大時指針佔用的存儲也就可以忽略不計,所以鏈表法較適合存儲數據對象較大,但頻繁的增刪操作不會對鏈表法造成明顯的影響。因為這樣的特點,鏈表法更加適合大數據量,或者數據對象較大的時候,如果數據操作頻繁,那鏈表法更是不二之選。
散列表由數組擴展而來,使用散列函數將鍵計算為散列值,散列值對應數據存儲的數組下標。雖然散列表的執行效率較高,但會有散列沖突的問題,可以通過開放定址法和鏈表法解決此問題。
開放定址存儲利用效率較低,適用數據量較小並且增刪不頻繁的情況,如果數據量較大,增刪頻繁的情況更加適用鏈表法,相對之下鏈表法更加普適。
3. 《演算法心得:高效演算法的奧秘(原書第2版)》pdf下載在線閱讀,求百度網盤雲資源
《演算法心得:高效演算法的奧秘(原書第2版)》([美] Henry S. Warren, Jr.)電子書網盤下載免費在線閱讀
鏈接:
書名:演算法心得:高效演算法的奧秘(原書第2版)
作者:[美] Henry S. Warren, Jr.
譯者:愛飛翔
豆瓣評分:8.8
出版社:機械工業出版社
出版年份:2014-3
頁數:419
內容簡介:
在本書中,作者給我們帶來了一大批極為誘人的知識,其中包括各種節省程序運行時間的技巧、演算法與竅門。學習了這些技術,程序員就可寫出優雅高效的軟體,同時還能洞悉其中原理。這些技術極為實用,而且其問題本身又非常有趣,有時甚至像猜謎解謎一般,需要奇思妙想才行。簡而言之,軟體開發者看到這些改進程序效率的妙計之後,定然大喜。
作者簡介:
【作者簡介】
Henry S. Warren, Jr.
計算機科學家,在IBM供職50餘年,經歷了IBM704時代、PowerPC時代及其後種種更迭。曾參與多個軍事指揮與控制系統工程,並且參加了由Jack Schwarz領銜的「SET語言」項目。自1973年起,Hank就職於IBM研發部,努力探索編譯器和計算機架構。當前正研究一種旨在每秒執行百億億次運算的超級計算機。Hank擁有紐約大學柯朗數學科學研究所計算機科學博士學位。
【譯者簡介】
愛飛翔
資深軟體開發工程師,擅長Web開發、移動開發和游戲開發,有10餘年開發經驗,曾主導和參與了多個手機游戲和手機軟體項目的開發,經驗十分豐富。他是手機軟體開發引擎AgileMobileEngine的創始人兼項目經理,同時也是CatEngine手機游戲開發引擎的聯合創始人兼代碼維護員。他對極限編程、設計模式、重構、測試驅動開發、敏捷軟體開發等也有較深入的研究,目前負責敏捷移動開發網(http://www.agilemobidev.com/)的運營。業余愛好文學和歷史,有一定的文學造詣。翻譯並出版了多本計算機著作。
4. 《啊哈!演算法》epub下載在線閱讀,求百度網盤雲資源
《啊哈!演算法》(啊哈磊)電子書網盤下載免費在線閱讀
鏈接:
書名:啊哈!演算法
作者:啊哈磊
豆瓣評分:7.7
出版社:人民郵電出版社
出版年份:2014-6-1
頁數:246
內容簡介:
這不過是一本有趣的演算法書而已。和別的演算法書比較,如果硬要說它有什麼特點的話,那就是你能看懂它。
這是一本充滿智慧和趣味的演算法入門書。沒有枯燥的描述,沒有難懂的公式,一切以實際應用為出發點,
通過幽默的語言配以可愛的插圖來講解演算法。你更像是在閱讀一個個輕松的小故事或是在玩一把趣味解謎
游戲,在輕松愉悅中便掌握演算法精髓,感受演算法之美。
本書中涉及到的數據結構有棧、隊列、鏈表、樹、並查集、堆和圖等;涉及到的演算法有排序、枚舉、
深度和廣度優先搜索、圖的遍歷,當然還有圖論中不可以缺少的四種最短路徑演算法、兩種最小生成樹演算法、
割點與割邊演算法、二分圖的最大匹配演算法等。
網名啊哈磊。
曾在中科院玩過單片機。武漢大學歷史上第一位以本科生身份加入MSRA(微軟亞洲研究院)的小夥伴,在機器學習組從事搜索引擎方面的研究。
發表國際會議論文一篇(IEEE)。
全國青少年信息學奧林匹克金牌教練。
超萌超簡潔的C語言編譯器——「啊哈C編譯器」作者。
2013年我的著作,有趣的編程科普書《啊哈C!》出版。
網址:www.ahalei.com
微博:weibo.com/ahalei
非常喜歡小朋友,每天都過得都非常開心。
至於為什麼叫「啊哈磊」,因為我覺得這是一個很喜慶的名字。
作者簡介:
網名啊哈磊。
曾在中科院玩過單片機。武漢大學歷史上第一位以本科生身份加入MSRA(微軟亞洲研究院)的小夥伴,在機器學習組從事搜索引擎方面的研究。
發表國際會議論文一篇(IEEE)。
全國青少年信息學奧林匹克金牌教練。
超萌超簡潔的C語言編譯器——「啊哈C編譯器」作者。
2013年我的著作,有趣的編程科普書《啊哈C!》出版。
5. 求 《 演算法之美)》電子書免費百度雲網盤下載
《演算法之美》網路網盤txt 最新全集下載
鏈接:
《演算法之美》是2018年5月中信出版集團出版的一本圖書,作者是布萊恩·克里斯汀和湯姆·格里菲思。本書通過討論人類事務演算法設計的概念,以幫助人們更好地處理日常生活中遇到的難題。萬維鋼、查爾斯·都希格等人對本書做出了評價。
6. 《演算法之美:指導工作與生活的演算法中文版》pdf下載在線閱讀全文,求百度網盤雲資源
《演算法之美:指導工作與生活的演算法中文版》網路網盤pdf最新全集下載:
鏈接: https://pan..com/s/1FAnlcekjDYJ7trQACaOIcQ
簡介:這本書其實是一本講述人生的電子書,書中內容以演算法為主,全書一共分為了11個章節,非常值得一讀!
7. 《編程之美》pdf下載在線閱讀全文,求百度網盤雲資源
《編程之美》網路網盤pdf最新全集下載:
鏈接: https://pan..com/s/15UUWmIkoqk2B17_t4vShRQ
簡介:編程之美收集了約60道演算法和程序設計題目,這些題目大部分在近年的筆試,面試中出現過,或者是被微軟員工熱烈討論過。作者試圖從書中各種有趣的問題出發,引導讀者發現問題,分析問題,解決問題,尋找更優的解法。
8. 《演算法(第4版)》txt下載在線閱讀全文,求百度網盤雲資源
《演算法(第4版)》([美] Robert Sedgewick)電子書網盤下載免費在線閱讀
鏈接: https://pan..com/s/19zRcn1hqg8YDHodr27ZPpA
書名:演算法(第4版)
作者:[美] Robert Sedgewick
譯者:謝路雲
豆瓣評分:9.4
出版社:人民郵電出版社
出版年份:2012-10-1
頁數:636
內容簡介:
本書作為演算法領域經典的參考書,全面介紹了關於演算法和數據結構的必備知識,並特別針對排序、搜索、圖處理和字元串處理進行了論述。第4版具體給出了每位程序員應知應會的50個演算法,提供了實際代碼,而且這些 Java 代碼實現採用了模塊化的編程風格,讀者可以方便地加以改造。配套網站 algs4.cs.princeton.e 提供了本書內容摘要以及相關代碼、測試數據、編程練習、教學課件等資源。
作者簡介:
Robert Sedgewick,斯坦福大學博士(導師是Donald E. Knuth),從1985年開始一直擔任普林斯頓大學計算機科學系教授,曾任該系主任,也是Adobe Systems公司董事會成員,曾在Xerox PARC、國防分析研究所(Institute for Defense Analyses)和法國國家信息與自動化研究所(INRIA)從事研究工作。他的研究方向包括解析組合學、數據結構和演算法的分析與設計、程序可視化等。
Kevin Wayne,康奈爾大學博士,普林斯頓大學計算機科學系高級講師。研究方向包括演算法的設計、分析和實現,特別是圖和離散優化。