算法是什么眼姐?
算法就是用在計(jì)算機(jī)中解決程序設(shè)計(jì)問(wèn)題的方法,通俗點(diǎn)講算法就是計(jì)算機(jī)解題的過(guò)程佩番。
有一種廣為流傳的說(shuō)法是:程序=算法+數(shù)據(jù)結(jié)構(gòu)众旗。雖然這樣的說(shuō)法過(guò)于籠統(tǒng),但絕對(duì)沒(méi)有夸大其詞趟畏,因?yàn)槭聦?shí)上贡歧,算法就是打好編程基礎(chǔ)的重要部分。沒(méi)有算法赋秀,就沒(méi)有解決問(wèn)題的程序設(shè)計(jì)利朵。
舉個(gè)例子,你想要通過(guò)一個(gè)程序達(dá)成某一執(zhí)行命令猎莲,這一過(guò)程涉及兩個(gè)方面的內(nèi)容:需要調(diào)取的數(shù)據(jù)绍弟、如何調(diào)取數(shù)據(jù)以及讓他們之間進(jìn)行“運(yùn)算”。前者需要數(shù)據(jù)結(jié)構(gòu)著洼,數(shù)據(jù)結(jié)構(gòu)就是按一定規(guī)律排列放置數(shù)據(jù)的法則樟遣;后者需要算法,算法決定了你能如何設(shè)計(jì)命令身笤,即編寫(xiě)程序年碘。
因此我們可以看到算法的重要性和學(xué)習(xí)算法的必要性。
算法是計(jì)算機(jī)的精髓展鸡,學(xué)習(xí)計(jì)算機(jī)屿衅,必須要懂算法,還應(yīng)該要“精通”算****法莹弊。
IT行業(yè)技術(shù)千變?nèi)f化涤久,程序員朋友們也處在不斷更新自身知識(shí)的潮流中。但算法不一樣忍弛,算法是永不過(guò)時(shí)的知識(shí)响迂,學(xué)習(xí)算法,終生受益细疚。
學(xué)習(xí)算法有益于編程思維蔗彤。算法培養(yǎng)的是思考問(wèn)題解決問(wèn)題的通性通法,而不是某一種具體的方法。
學(xué)習(xí)算法之后然遏,能在編程當(dāng)中自己解決問(wèn)題贫途,或者自己造輪子,甚至在代碼優(yōu)化中有所創(chuàng)新待侵,而不是一味模仿框架工具丢早。
你還認(rèn)為算法是編程中不會(huì)用到的知識(shí),所以不用學(xué)習(xí)嗎秧倾?或許基礎(chǔ)編程工作無(wú)須涉及算法及數(shù)據(jù)結(jié)構(gòu)怨酝,然而一旦涉及高級(jí)編程工作,沒(méi)有算法知識(shí)卻是萬(wàn)萬(wàn)不能的那先。
所以今天為大家簡(jiǎn)單介紹5大算法农猬,助你在編程領(lǐng)域打牢地基,突破編程高級(jí)售淡。
1斤葱、希爾排序(Shell Sort)
希爾排序是插入排序的一種。又叫縮小增量排序勋又,是直接插入排序的優(yōu)化方法苦掘,其核心在于間隔序列的設(shè)定。
編程原理為:選擇小于n的整數(shù)d1作為第一個(gè)增量楔壤,所有距離為d1的倍數(shù)的記錄放在同一個(gè)組中→組內(nèi)進(jìn)行直接插人排序→取第二個(gè)增量d2<d1重復(fù)上述的分組和排序鹤啡,直至所取的增量dt=1。
2蹲嚣、BFS(****寬****度優(yōu)先搜索)
BFS最簡(jiǎn)便的圖的搜索算法之一递瑰。簡(jiǎn)單的說(shuō),BFS是從根節(jié)點(diǎn)開(kāi)始隙畜,沿著樹(shù)(圖)的寬度遍歷樹(shù)(圖)的節(jié)點(diǎn)抖部。它并不考慮結(jié)果的可能位置,徹底地搜索整張圖议惰,直到找到結(jié)果為止慎颗。
編程原理為:將根節(jié)點(diǎn)放入隊(duì)列中→檢驗(yàn)隊(duì)列中第一個(gè)節(jié)點(diǎn)是否為目標(biāo)(是則結(jié)束搜尋并回傳結(jié)果,否則將第一節(jié)點(diǎn)的直接子節(jié)點(diǎn)加入隊(duì)列中進(jìn)行檢驗(yàn))→直到搜尋到目標(biāo)言询,若隊(duì)列為空俯萎,則返回“找不到目標(biāo)”。
3运杭、DFS(深度優(yōu)先搜索)
DFS是搜索算法的一種夫啊。它的目的是要達(dá)到被搜索結(jié)構(gòu)的葉結(jié)點(diǎn)。其特點(diǎn)是每次深度優(yōu)先搜索的結(jié)果必然是圖的一個(gè)連通分量辆憔。
編程原理為:選定圖的類(lèi)別(有向圖撇眯、無(wú)向圖)→選定圖的存儲(chǔ)結(jié)構(gòu)→根據(jù)輸入的頂點(diǎn)或者邊建立圖报嵌,并把相應(yīng)的鄰接表或者鄰接矩陣輸出→用遞歸方法編寫(xiě)深度優(yōu)先搜索遍歷算法,并輸出遍歷結(jié)果熊榛。
4锚国、二分查找算法
二分查找又稱(chēng)折半查找,折半查找方法適用于不經(jīng)常變動(dòng)而查找頻繁的有序列表来候。
編程原理為:假設(shè)表中元素是按升序排列→將表中位置的關(guān)鍵字與查找關(guān)鍵字比較→如果兩者相等跷叉,則查找成功;如果兩者不相等逸雹,則將表分成前营搅、后兩個(gè)子表,如果中間位置記錄的關(guān)鍵字大于查找關(guān)鍵字梆砸,則查找前一子表转质,否則查找后一子表→重復(fù)以上過(guò)程,直到查找成功帖世。
5休蟹、動(dòng)態(tài)規(guī)劃算法
動(dòng)態(tài)規(guī)劃算法是五種常見(jiàn)的算法之一,通常用于求解具有某種最優(yōu)性質(zhì)的問(wèn)題日矫,其基本思想是將待求解問(wèn)題分解成若干個(gè)子問(wèn)題赂弓。
編程原理為:分析最優(yōu)解的性質(zhì)→以自底向上或自頂向下的記憶化方式(備忘錄法)計(jì)算出最優(yōu)值→根據(jù)計(jì)算最優(yōu)值時(shí)得到的信息,構(gòu)造問(wèn)題的最優(yōu)解哪轿。
以上算法涉及到排序盈魁、遍歷、查找等等內(nèi)容窃诉,將算法學(xué)習(xí)好杨耙,必定能受益頗多。為此飘痛,小碼哥教育新推出的課程《每周一道算法題》珊膜,就是為了幫助廣大程序員朋友解決基礎(chǔ)不牢靠,高級(jí)編程難的問(wèn)題宣脉,有興趣的可以到微信公眾號(hào)了解车柠。
希望每一個(gè)程序員朋友都能重視算法和數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí),想編程高級(jí)領(lǐng)域進(jìn)發(fā)塑猖。