本文是對 Swift Algorithm Club 翻譯的一篇文章吱肌。
Swift Algorithm Club是 raywenderlich.com網(wǎng)站出品的用Swift實現(xiàn)算法和數(shù)據(jù)結(jié)構(gòu)的開源項目,目前在GitHub上有18000+??,我初略統(tǒng)計了一下,大概有一百左右個的算法和數(shù)據(jù)結(jié)構(gòu)爆阶,基本上常見的都包含了,是iOSer學習算法和數(shù)據(jù)結(jié)構(gòu)不錯的資源沙咏。
??andyRon/swift-algorithm-club-cn是我對Swift Algorithm Club辨图,邊學習邊翻譯的項目。由于能力有限芭碍,如發(fā)現(xiàn)錯誤或翻譯不妥徒役,請指正,歡迎pull request窖壕。也歡迎有興趣忧勿、有時間的小伙伴一起參與翻譯和學習??杉女。當然也歡迎加??,??????????鸳吸。
如果你已經(jīng)寫過一些代碼熏挎,你也許就會好奇學習算法和數(shù)據(jù)結(jié)構(gòu)的意義何在,特別是如果你沒有接受過計算機科學專業(yè)的高等教育晌砾。
畢竟坎拐,在平時的編碼工作中,到底會有多少機會需要自己親自編寫一個鏈表或排序算法呢养匈?答案是:可能永遠都不會哼勇。
然而...
了解一點現(xiàn)有算法解決問題時所用的奇技淫巧可能會給予你啟發(fā),讓你能更好地優(yōu)化自己的代碼呕乎。
除了自帶的標準數(shù)組和字典之外积担,了解一些其它的數(shù)據(jù)結(jié)構(gòu)讓你在構(gòu)建自己的 App 時擁有更多的選擇。
學習算法和數(shù)據(jù)結(jié)構(gòu)會助你成為更好的開發(fā)者b省(當然也就意味了可以賺到更多的$$$)
運用算法能讓你編寫出其它方式編寫不出的軟件
過去曾經(jīng)在編寫 App 時遇到過瓶頸帝璧,無法繼續(xù)編寫下去,因為我陷入到了一些基礎的問題中湿刽,無法自拔的烁。
通常的瓶頸都是運行速度的問題,我的 App 不夠快≌┕耄現(xiàn)在回想起來渴庆,原因多是我在解決問題是選用了錯誤的算法。如果我當時知道 O(n) 和 O(n^2) 之間的區(qū)別买雾,或許就能克服這些瓶頸了把曼。
對于小規(guī)模的數(shù)據(jù)量簡單粗暴的方法往往能很好的完成工作,但事情并不總是如人所愿漓穿。對于大數(shù)據(jù)量,你需要使用更加聰明的算法注盈。
有些時候晃危,我對自己所面對的問題根本就手足無措,甚至寫不出來一個運行較慢的正確算法老客,不知道從何處下手僚饭。這時候,如果了解一些算法理論胧砰,就會有更多的方法可供嘗試鳍鸵。
不要死記硬背算法實現(xiàn)
本文的目的不在死記硬背算法實現(xiàn)。你應該試著去理解不同的算法是如何解決不同的問題的尉间,而不是死記硬背偿乖。
學習一些算法技術(shù)击罪,例如:分而治之、動態(tài)規(guī)劃贪薪、貪婪算法等媳禁,可以助你更好地理解算法之間的快慢差異,并學會在算法對時間和空間的使用上做出平衡画切。
所以本項目的主要目的是教會你如何更好的跟計算機打交道竣稽。
放輕松,算法并沒有聽起來那么可怕
很多算法書開篇就擺上來很多數(shù)學理論霍弹,數(shù)學公式固然有用毫别,但初學并不需要。所以不要被那些公式嚇到了典格。只要寫過代碼拧烦,你就能很好地理解那些神奇的算法和數(shù)據(jù)結(jié)構(gòu)背后的原理。
相信我钝计,算法是很有趣的恋博。:-)