- 算法競(jìng)賽入門經(jīng)典:習(xí)題與解答
- 陳鋒
- 994字
- 2019-12-06 14:35:46
算法有什么用
我大學(xué)學(xué)的是機(jī)械專業(yè),但由于對(duì)數(shù)學(xué)非常熱愛(ài),加之畢業(yè)后發(fā)現(xiàn)軟件行業(yè)貌似比較好“混”,且工資待遇比其他行業(yè)高些,所以就進(jìn)入了開(kāi)發(fā)領(lǐng)域。經(jīng)過(guò)一段時(shí)間的工作后,我發(fā)現(xiàn)自己經(jīng)常會(huì)遇到以下一些問(wèn)題:
- 程序稍微復(fù)雜一些,代碼就會(huì)寫的很亂。
- 程序出了問(wèn)題,不知道該如何調(diào)試,只會(huì)到處修改,然后再看效果。
- 用戶需求稍作改變,就想罵街。
- 特別重要的一點(diǎn)是,如果你想跳到外企去工作,面試時(shí)肯定會(huì)讓你編一些很難的算法程序。
后來(lái),我進(jìn)入到了微軟上海全球技術(shù)支持中心做外包技術(shù)支持,接觸到了許多嚴(yán)謹(jǐn)、求是、好學(xué)的工程師前輩。從他們身上,我學(xué)到了一些非常有效的解決問(wèn)題的思路,以及那種“活到老學(xué)到老”的人生態(tài)度。
我逐漸明白:程序是要設(shè)計(jì)的。為了設(shè)計(jì)得清晰,需要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)原理等非常多的基礎(chǔ)知識(shí),而這些體系本質(zhì)上是前輩人思維方法的結(jié)晶。
另外,令很多程序員頭疼的調(diào)試過(guò)程,給我印象最深的是一句話:調(diào)試的本質(zhì)實(shí)際上就是在定位。大多數(shù)時(shí)候,調(diào)試的過(guò)程(并發(fā)程序的調(diào)試可能就更復(fù)雜些)其實(shí)就是一個(gè)二分查找:假如有100行程序結(jié)果不對(duì),就可以在第50行看看結(jié)果是否符合預(yù)期,如果OK,說(shuō)明問(wèn)題出在后50行,否則前50行一定有問(wèn)題。如此遞歸下去,很快就能精準(zhǔn)定位到有問(wèn)題的代碼。了解二分查找的朋友都知道,這個(gè)算法復(fù)雜度是O(logn)。
用C#開(kāi)發(fā)服務(wù)端程序時(shí),我經(jīng)常會(huì)遇到內(nèi)存問(wèn)題,需要對(duì)垃圾收集(GC)的過(guò)程進(jìn)行分析調(diào)試。深入學(xué)習(xí)之后我發(fā)現(xiàn),其實(shí)GC模型的本質(zhì)就是有向圖。抱著這個(gè)思路再來(lái)分析解決內(nèi)存問(wèn)題,思路瞬間清晰了很多。
這樣的例子還有很多。
在不斷解決各類問(wèn)題的過(guò)程中,我逐漸明白了—算法在本質(zhì)上是諸多計(jì)算機(jī)學(xué)術(shù)以及實(shí)踐領(lǐng)域積累下來(lái)的分析解決各種問(wèn)題的思維方法。它不是象牙塔內(nèi)的純學(xué)術(shù)研究,更不是一堆僅能用來(lái)解決特定領(lǐng)域性能問(wèn)題的高精尖技術(shù)。這個(gè)行業(yè)的技術(shù)人員,本質(zhì)上正是以這些思維方法為武器,高效解決著不同行業(yè)領(lǐng)域不斷涌現(xiàn)出的各類紛繁問(wèn)題和挑戰(zhàn)。
說(shuō)到這里,我想到其他很多行業(yè):京劇藝人每天早上要練嗓子,相聲演員每天要練貫口,軍人在戰(zhàn)斗之余要進(jìn)行大量訓(xùn)練,中醫(yī)在繁忙之余要天天鉆研《傷寒論》《黃帝內(nèi)經(jīng)》等經(jīng)典……類似這樣,需要認(rèn)真對(duì)待并把基本功訓(xùn)練作為生活一部分的行業(yè)還有很多。對(duì)于筆者來(lái)說(shuō),算法思維就是IT相關(guān)行業(yè)的技術(shù)人員需要用同樣態(tài)度持續(xù)不斷進(jìn)行訓(xùn)練的一項(xiàng)基本功。
所以,就有了這些年的學(xué)習(xí)過(guò)程,以及以本書作為省察的一個(gè)小小總結(jié)。
- Microsoft SQL Server企業(yè)級(jí)平臺(tái)管理實(shí)踐
- 劍破冰山:Oracle開(kāi)發(fā)藝術(shù)
- 數(shù)據(jù)之巔:數(shù)據(jù)的本質(zhì)與未來(lái)
- 計(jì)算機(jī)信息技術(shù)基礎(chǔ)實(shí)驗(yàn)與習(xí)題
- Access 2007數(shù)據(jù)庫(kù)應(yīng)用上機(jī)指導(dǎo)與練習(xí)
- 大話Oracle Grid:云時(shí)代的RAC
- 數(shù)據(jù)驅(qū)動(dòng)設(shè)計(jì):A/B測(cè)試提升用戶體驗(yàn)
- 數(shù)據(jù)庫(kù)技術(shù)及應(yīng)用教程
- 云數(shù)據(jù)中心網(wǎng)絡(luò)與SDN:技術(shù)架構(gòu)與實(shí)現(xiàn)
- 達(dá)夢(mèng)數(shù)據(jù)庫(kù)運(yùn)維實(shí)戰(zhàn)
- IPython Interactive Computing and Visualization Cookbook(Second Edition)
- 跨領(lǐng)域信息交換方法與技術(shù)(第二版)
- SQL Server深入詳解
- SQL Server 2012實(shí)施與管理實(shí)戰(zhàn)指南
- 爬蟲(chóng)實(shí)戰(zhàn):從數(shù)據(jù)到產(chǎn)品