\Grokking Algorithms\簡介與作者采訪

\

關鍵點

\
  • 這本書目的是告訴讀者解決問題的新方法。 \
  • 這本書試圖通過插圖來讓大家更容易掌握主題,避免部分讀者覺得太費解。 \
  • 這本書不僅適合沒有接觸過算法的人,也適合剛從計算機專業畢業的學生。 \
  • 這本書提供了非常多的例子和簡單練習。 \
  • 這并不是一本參考書,也不是練習書。它只包含了作者日常編程實踐中證明了有用的算法。
\

Aditya Y. Bhargava所著Grokking Algorithms(曼寧出版社出版)采用了一種全新的方式來介紹數據結構、算法和復雜度等復雜概念。作為一個視覺型學習者,Bhargava說他試圖借助插圖的強大表現力來幫助讀者更容易地掌握主題,避免部分讀者覺得太費解。\

這本書假設讀者已經有了編程基礎。Bhargava說它不僅適合沒有接觸過算法的人,也適合剛從計算機專業畢業的學生。\

書中前3章介紹了大O符號和遞歸等基本概念。讀者在這里可以讀到關于數組和鏈表等數據結構的例子,還有二分查找和選擇排序等算法。\

第4章以快速排序算法為例,介紹了分而治之的解決問題方法。\

第5到7章主要介紹了哈希表和圖。除了詳細描述哈希表和圖到底是什么之外,書中還提供了許多非常有意義的用例來幫助大家理解它們的使用場景。哈希沖突和性能內容都有所覆蓋,還有如何選擇一個合適的哈希算法等。至于圖,廣度優先算法和Dijkstra最短路徑優先算法都有所講述。\

第8章和第9章用貪心算法和動態規劃方法來解決一些基本問題。貪心算法是在NP完全問題的背景下介紹的。貪心算法和動態規劃方法都用來解決旅行商問題、背包問題等經典問題。\

第10章介紹了K近鄰算法(K-nearest neighbors,KNN算法),這是一種用于聚合的機器學習算法,比如設定一些數據點之間的距離定義,就可以使它們呈現出一定的聚合狀態。這一章非常簡單的介紹了一下機器學習后面的基本算法。\

在最后一章即第11章里作者簡單介紹了10個算法,為讀者的進一步學習做了鋪墊。算法包括基于樹的搜索、倒序索引、傅立葉變換、Map-Reduce算法、SHA哈希等以及其他幾個。\

全書通篇都會通過插圖來解釋各個重要概念,特別有趣的是關于一些抽象概念的插圖,比如遞歸和分而治之等。除了用插圖去解釋每一個概念之外,書中還提供許多的示例代碼供讀者去構建和執行,還有許多簡單的練習題,這樣作者可以在繼續下一章內容之前評估一下自己對已讀內容的理解程度。在書的最后一章提供了所有練習題的解決方案。全書示例代碼都是用Python寫的。\

InfoQ采訪了Aditya Y. Bhargava來了解更多的幕后內容。\

InfoQ:能請您解釋一下寫這本書的動機嗎?除了是一本插圖書之外,它與其他的算法書還有什么不同?\

\

Aditya Y. Bhargava: 我關注使概念更容易被理解的方法。比如我寫書的原則之一就是“要夠用還是要全面”。很多書都是直接把很多的概念直接拋給讀者,不管有用沒用,這種就是“全面”的方法,我直接一股腦全說了,說不好什么時候你就用得上。而我的書則是用“夠用”的方法:我只告訴讀者他們現在需要知道的東西。所以我給的例子都會很簡短,但都直很切題。

\

InfoQ:您能簡單介紹一下您的計算機科學背景,以及您對算法的興趣嗎?\

\

Bhargava:我是個自學成材的工程師。我最初是用Basic語言寫游戲,后來改用ActionScript。我一直都覺得算法很困難,直到終于有一天有一位老師真的幫我把概念都解釋清楚了。從那時候開始我就知道了如果你能用一種好方法去解釋的話,算法其實并沒有那么難。

\

InfoQ:那您是怎么想到寫一本關于算法的插圖書呢?圖畫為什么會對解釋和理解算法有幫助?\

\

Bhargava:從2013年開始我就在我的博客上寫有插圖的文章了。我收到了很多讀者善意的留言,都說插圖幫他們更好的理解了概念。曼寧出版社聯系了我,說想出一本插圖書,我就想到算法會是一個好的點。算法都是非常抽象的概念,但圖畫可以讓它們具體化。

\

InfoQ:第一眼看上去,您的書會非常吸引那些以前沒有什么算法知識的程序員。您覺得對于那些曾經正式學過算法的程序員們來說,他們也會覺得這本書很有趣嗎?您的書對他們有什么價值?\

\

Bhargava:很多人都喜歡我關于動態規劃算法的那一章。即使是對于科班計算機學科出身的人來說,我仍然覺得動態規劃算法很難理解。我們給那一章寫了很長的一節FAQ來給大家解釋清楚動態規劃算法的難以理解的部分。\

有些人喜歡我給的例子。其實要解釋好一個概念,是很難找到非常合適的好例子的。所以如果你想把這些概念教給別人還想讓別人真的理解的話,我的書是非常有用的。

\

InfoQ:您的讀者該期望從您的書中得到些什么?不該期望得到什么?\

\

Bhargava:我的書會教給讀者解決問題的新方法。有些讀者的目的是擴大自己的工具箱,那么他們現在就應該能解決一些他們以前解決不了的問題了。\

我只為本書選擇那些在現實工作中有用的算法,所以這里的每一章都是非常有用的。比如我并沒有講解插入排序算法,雖然別的算法書都會提到它,但實際上它并不會對讀者的工作有什么幫助。所以讀者不該期望這是一本參考書,那樣會讓這本書不得不加入許多無用內容。

\

InfoQ:請問對于那些以前并沒有學過算法,但又想通過讀您的書來攻克這個有些難的領域的程序員,您有什么建議嗎?\

\

Bhargava:請一定把練習題都作了,大部分都很容易,幾分鐘就能作完。這些題可以確保你們理解了這些內容。

\

InfoQ:算法是個非常大的領域。您是用了什么標準來做取舍,講什么和不講什么呢?\

\

Bhargava:我只選擇那些對于我來說在我的日常工作中非常有用的算法,而且我也只選那些不需要有很多預備知識的算法。

\

InfoQ:在您做了插圖的那些算法中,哪個是最有趣的,哪個是最難的?\

\

Bhargava:最有趣的是為分而治之配圖,因為它太適合用可視化的方法表現了。最難的是動態規劃算法,因為在方框中很難跟蹤表現那些值。

\

InfoQ:有沒有什么算法是你本來想在書中做介紹,但最后還是沒有加進來的?\

\

Bhargava:當然有!我在第11章,用了一整章來列出了10個我本來想詳細介紹的算法。其實我本來真的很想介紹一下線性規劃算法的,因為它太強大了。

\

InfoQ:最后,對于那些讀過了您的書還想在算法方面繼續深入的讀者,您有什么建議嗎?他們接下來該怎么做?\

\

Bhargava:在網絡上有太多的資源了,比如adit.io(我的博客)和betterexplained.com這兩個博客。Coursera的機器學習的課程也非常好。

\

關于書的作者

\

aa60aa52415948f41ae91aefb33ad829.pngAditya Y. Bhargava是一位有計算機科學和美術雙學位的軟件工程師。他關于編程的博客是adit.io。

\

閱讀英文原文:Grokking Algorithms Review and Author Q\u0026amp;A

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458220.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458220.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458220.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ZedGraph使用經驗

開源的統計圖控件中基本常用的是OpenFlashChar和ZedGraph,今天就先來講講ZedGraph的使用。 ZedGraph資源 ZedGraph來源:http://sourceforge.net/project/showfiles.php?group_id114675ZedGraph相關例子資源:http://zedgraph.org/wiki/index.…

[轉載]聊一聊人員培養

轉載自“搜狗測試”微信。 人員培養的痛點 大家在組內人員培養是否遇到了如下問題: 組員成長緩慢,無法達到預期 有時候感覺組員沒啥進步,有時候感覺組員挺好的,無法統一評價 腦子里都是組員的問題,無法集中精力做其他…

QCon2016舊金山大會焦點分享者確認

QCon舊金山大會是由InfoQ舉辦的連續十年的最大的英語會議,它將在今年11月7-9日在舊金山灣區舉行。\\在QCon大會涵蓋了一系列深入的技術,架構師、資深開發者所關注的國際事件,聚焦創新領域和軟件發展趨勢,QCon大會每年在美國、中國…

怎樣安裝兩個tomcat,怎樣配置

裝兩個tomcat 各自是6.0和7.0 可想執行tomcat6.0 可是實際上卻執行tomcat7.0 兩個版本號都是用解壓縮包 事實上就是不能執行tomcat6.0 僅僅能執行7.0 兩個環境變量都配置了。port也改了 還是不行 我遇到這樣的情況了,不知大家遇到沒有,例如以下是我的…

機器學習實戰之SVM

一引言:支持向量機這部分確實很多,想要真正的去理解它,不僅僅知道理論,還要進行相關的代碼編寫和測試,二者想和結合,才能更好的幫助我們理解SVM這一非常優秀的分類算法支持向量機是一種二類分類算法&#x…

模擬分頁效果

css部分&#xff1a; <style type"text/css">.main{width:800px;zoom:1;margin:0 auto;}.item{width:800px;overflow:hidden;}ul{padding:0;width:860px;zoom:1;}.clear{zoom:1;}.clear:after{content:"";display:block;height:0;clear:both;visibil…

XML基本概念及增刪改查操作

一、概念及特征&#xff1a; 1. XML 指可擴展標記語言(Extensible Markup Language)&#xff0c;用戶可以自己定義標簽。XML 被設計用來傳輸和存儲數據&#xff0c;而 HTML 用于格式化并顯示數據&#xff0c;并且HTML不能自定義標簽。 2. XML 文檔形成一種樹結構&#xff0c; X…

mysql 時間類型 datetime,timestamp

2019獨角獸企業重金招聘Python工程師標準>>> CURRENT_TIMESTAMP 的 timestamp 意思是 根據 mysql 的當前時間&#xff0c;使用mysql 的當前時間。 參考地址&#xff1a;http://blog.sina.com.cn/s/blog_67cc6e7d0100nrwk.html datetime 和 timestamp 都是保存時間格…

生成jsp驗證碼的代碼詳解(servlet版)

package util; import java.util.*; import java.io.*; import java.awt.*; import java.awt.image.*; import javax.servlet.*; import javax.servlet.http.*; import com.sun.image.codec.jpeg.*; /** 生成驗證碼圖片*/ public class ValidateCode exten…

機器學習中的交叉驗證(cross-validation)

from:https://blog.csdn.net/lhx878619717/article/details/49079785 交叉驗證&#xff08;Cross validation)&#xff0c;交叉驗證用于防止模型過于復雜而引起的過擬合. 有時亦稱循環估計&#xff0c; 是一種統計學上將數據樣本切割成較小子集的實用方法。于是可以先在一個子…

linux禁止ping

執行此命令 &#xff1a;echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 可以禁止ping一、如果沒有iptables禁止pingecho 1 > /proc/sys/net/ipv4/icmp_echo_igore_all #開啟echo 0 > /proc/sys/net/ipv4/icmp_echo_igore_all #關閉二、利用iptables規則禁pingi…

python3字符串屬性(二)

1、S.isdecimal() -> bool Return True if there are only decimal characters in S, False otherwise. 字符串如果是十進制&#xff0c;返回True。 2、S.isdigit() -> bool Return True if all characters in S are digits and there is at least one character …

使用libsvm中的svm_cross_validation函數進行交叉驗證

from:https://blog.csdn.net/tao1107291820/article/details/51581322 在libsvm的使用中&#xff0c;為了得到更好的c、gama參數&#xff0c;可以通過多次使用libsvm中的svm_cross_validation函數進行參數尋優&#xff0c;下面是svm_cross_validation的一種使用方法&#xff1…

JavaScript中eval()函數

eval調用時&#xff0c;實例為eval( "( javascript代碼 )" )&#xff0c; eval() 函數可將字符串轉換為代碼執行&#xff0c;并返回一個或多個值。轉載于:https://www.cnblogs.com/lxcmyf/p/5703640.html

輕松談話:談話的力量

如何與她人搭話&#xff1f;&#xff1f; 第一&#xff1a;給別人一個好印象 1、環境&#xff1a;通過共同環境來激發興趣&#xff0c;比如&#xff1a;在球場&#xff0c;你覺得誰會贏。 2、對方:多數人喜歡談論自己。 3、自己&#xff1a;主動表明意圖&#xff0c;要真誠。 第…

函數的二義性與函數對象的傳遞問題(通過實現vector的to_string示例)

許多時候&#xff0c;我們想要直接打印容器的內容&#xff0c;比如 std::vector<int> a { 1, 2, 3 }; 可以打印出[1, 2, 3]。 參考標準庫&#xff0c;可以寫出一個帶有迭代器的to_string函數&#xff1a; template <typename Iter, typename Func> std::string to…

libSVM介紹(二)

from&#xff1a;https://blog.csdn.net/carson2005/article/details/6539192 鑒于libSVM中的readme文件有點長&#xff0c;而且&#xff0c;都是采用英文書寫&#xff0c;這里&#xff0c;我把其中重要的內容提煉出來&#xff0c;并給出相應的例子來說明其用法&#xff0c;大家…

四則運算題2

本題新學知識點&#xff1a; itoa函數 char *itoa( int value, char *string,int radix);[1]原型說明&#xff1a;value&#xff1a;欲轉換的數據。string&#xff1a;目標字符串的地址。radix&#xff1a;轉換后的進制數&#xff0c;可以是10進制、16進制等。程序實例:#includ…

c++調用Libsvm

libSVM中的readme中文版&#xff1a;http://blog.csdn.net/carson2005/article/details/6539192 LibSVM的package中的Readme文件中介紹了怎樣具體的使用LibSvm&#xff0c;可以在Dos下以命令形式進行調用&#xff0c;也可以用程序包中提供的GUI程序Svm-toy進行圖形化的操作。sv…

STL -set

轉載自&#xff1a;http://blog.csdn.net/LYHVOYAGE/article/details/22989659 set集合容器實現了紅黑樹&#xff08;Red-Black Tree&#xff09;的平衡二叉檢索樹的的數據結構&#xff0c; 在插入元素時&#xff0c;它會自動調整二叉樹的排列&#xff0c;把該元素放到適當的位…