《演算法問題實戰策略》作者具宗萬:陪你一起設計演算法(圖靈訪談)
具宗萬畢業於韓國延世大學(韓國著名高等學府)計算機系,之後曾在Innotive和NHN (NHN是韓國目前最大的網際網路服務公司,旗下有韓國排名第一的搜尋引擎NAVER和韓國排名第一的遊戲公司Hangame)任軟體工程師,目前在芝加哥高頻交易(HFT)公司任交易演算法開發工程師。另外,他還自2007年開始,參與了Algospot的運營和管理,此網站是專門為韓國程式設計競賽參賽者們提供交流場所的網站。具宗萬著有《演算法問題實戰策略》一書,本書通過解答程式設計競賽中的問題使讀者能夠學習到各種演算法的設計技巧和演算法結構,進而提高自己的問題解決能力。
具宗萬競賽獲獎經歷:
- 2002年、2003年獲“韓國大學生程式設計競賽”金獎
- 2003年、2004年進入“世界大學生程式設計競賽”決賽
- 2004年、2006年、2008年進入“Google Code Jam”決賽
- 2007年獲“Top Coder Open”亞軍,2006年進入決賽
- 2008年、2009年獲“Java演算法競賽”冠軍
問:和其他演算法圖書相比,《演算法問題實戰策略》有什麼特色?適合什麼樣的讀者?
本書最大的特點在於,它詳細介紹了其他圖書未曾深入探討的演算法構思過程。《演算法問題實戰策略》儘可能細緻地講解了構建演算法過程中必需的感悟和漸進式發展過程,展示了演算法應用於解題的實踐過程,這有助於讀者直觀理解演算法,培養親自設計演算法或對演算法進行變形的能力。
問:為提升演算法技巧,除了要掌握常用的思想(列舉、回溯、遞迴、二分、動態規劃等),以及常用的資料結構(棧、堆、樹、圖等),還需要在哪些方面進行努力?
其實每個領域都一樣,單靠機械地訓練掌握技術是遠遠不夠的。如果想最大限度地提高程式設計競賽中的解題能力,需要不斷檢討自己的弱勢所在,進行更高層次的修煉。我建議各位經常回顧自己之前遇到過的問題,思考那些未能解決的問題需要哪些技巧、付出哪些努力;對於已經解決的問題,需要再想想有沒有更簡潔的解題方法。
問:演算法題目中經常會出現一些陷阱,您怎樣看待這些陷阱?
確實,有些演算法題目會給參賽者帶來困擾,也容易讓人忽略,但是能把問題中的各種情況全面考慮,是開發人員或電算學家的重要職業素養。
問:一些程式設計師一直在學習演算法,但是在實際程式設計專案中卻很少用到。請問怎樣才能將學和用相結合呢?
我認為,從學習演算法或者參加程式設計競賽的過程中,不僅僅可以獲得演算法和資料結構的知識、技術,最重要的是在給定的條件下尋找最優解決方法的思考方式。因此,即使無法直接應用競賽中使用的技術,學習演算法本身也不是一件浪費時間的事情。
問:在平時的工作學習中,如何進行 “演算法素養”的培養?您在學習演算法知識的過程中有什麼值得推薦的經驗?
我建議大家可以不斷關注相關的主題,多多參加線上/線下活動,與志同道合的人多交流、多學習。大家一起分享關注點和知識點,形成良性競爭,這既能提高學習效率,又能激發學習興趣。
問:演算法和數學總是分不開的,應該在學演算法之前先熟悉相關的數學知識,還是學習演算法之後再去研究相關的數學知識?如果只對演算法實現的思路感興趣,但是對其中涉及的數學推導有排斥情緒,該怎麼辦?
學習演算法和數學的先後順序並不重要。我曾經也只對演算法的實現感興趣,而對數學不感冒,但意識到“要想深入理解演算法就必須學習數學”這個事實後,才逐漸開始喜歡數學。從這一點上看,我認為有機會可以提前掌握數學知識,應該能提高演算法學習的效率。希望大家不要犯我這樣的失誤。
問:《演算法問題實戰策略》中的一些問題在《具體數學》中都有介紹,好的數學方法能使演算法問題的解決事半功倍。那麼,哪些數學書籍對您的幫助最大?
對於不同領域的學習,經常會有不同的推薦書目,大家可以根據自己的研究領域尋找相關的書單。每當有需要的時候,我會去找來不同的書進行學習,所以很難說清楚究竟哪本書對我的幫助最大。
問:根據運作環境的不同,演算法的效率也不同,有時我們必須放棄某些演算法而選擇其他演算法,請問怎樣處理演算法與環境之間的問題?
程式在何種環境下執行是十分重要的前提條件。在類似條件下,尋找最優演算法是程式設計競賽給我們帶來的最大好處。具體說來,我們要端正心態,不拘泥於自己已知的演算法,不斷嘗試運用符合條件的多種方法。
問:新型語言越來越傾向於遮蔽底層,在這種情況下,演算法效率的差異是否還那麼重要?
新出現的程式語言、技術、硬體最多隻是讓程式以成倍速度執行而已。高效演算法和低效演算法之間的差異很大,所以即使使用最新的硬體技術也無法挽救低效演算法。
問:讀者看完《演算法問題實戰策略》之後,您建議還應該閱讀哪些相關書籍?
我建議將《演算法導論》等理論型圖書從頭至尾通讀,瞭解演算法相關的重要知識,然後有選擇地閱讀自己需要的書籍即可。另外,可以到網上查詢相關資料進行學習,線上資料通常比一般圖書更有用。
更多精彩,加入圖靈訪談微信!
相關文章
- 《矽谷之火》作者訪談
- 熱力圖生成演算法及其具體實現演算法
- 針對Java程式設計師的20個Spring MVC訪談問題Java程式設計師SpringMVC
- 常用演算法、問答、設計模式演算法設計模式
- 再談量化策略失效的問題
- 模擬退火演算法Python程式設計(4)旅行商問題演算法Python程式設計
- .Net Core實戰之基於角色的訪問控制的設計
- Alink漫談(十三) :線上學習演算法FTRL 之 具體實現演算法
- 談談限流演算法,以及Redisson實現演算法Redis
- [最短路徑問題]Dijkstra演算法(含還原具體路徑)演算法
- 線性表演算法設計題1演算法
- 演算法設計與分析中的幾個核心演算法策略:動態規劃、貪心演算法、回溯演算法和分治演算法演算法動態規劃
- 圖靈訪談系列之一:陳世欣談產品經理與社群圖靈
- 探索貪心演算法:解決最佳化問題的高效策略演算法
- 設計模式漫談之策略模式設計模式
- (C++模板程式設計):策略(policy)技術中的演算法策略與總結C++程式設計演算法
- 蟻群演算法java實現以及TSP問題蟻群演算法求解演算法Java
- IdentityServer4實戰 - 談談 JWT Token 的安全策略IDEServerJWT
- 模擬退火演算法Python程式設計(3)整數規劃問題演算法Python程式設計
- A+B 演算法問題演算法
- 演算法——路徑問題演算法
- 陪你一起學習之javascript事件JavaScript事件
- 微服務訪問安全設計方案實踐微服務
- 圖靈訪談系列之九:CNode社群談Node.js技術及生態圖靈Node.js
- 【SpringBoot實戰】資料訪問Spring Boot
- 談談關於設計資料管理/治理角色的問題
- 答 《部落格作者呀,我想採訪你這 9 個問題!》 問卷
- 圖形程式設計問題記錄程式設計
- 戰鬥設計基礎(七)——用演算法生成《率土之濱》的世界地圖演算法地圖
- 分治演算法-眾數問題演算法
- 問一個 python 演算法題Python演算法
- 字串匹配問題——KMP演算法字串匹配KMP演算法
- 談談 Kubernetes 的匿名訪問
- PARL原始碼走讀——使用策略梯度演算法求解迷宮尋寶問題原始碼梯度演算法
- 解決圖片訪問403 Forbidden問題ORB
- 挑戰演算法題:四數之和演算法
- 演算法題:設計和實現一個 LRU Cache 快取機制演算法快取
- python實現Dijkstra演算法之 最短路徑問題Python演算法
- Redis的常用淘汰策略以及演算法實現Redis演算法