程序的靈魂——算法
算法即解題思路。在編寫代碼之前,必須思路清晰、嚴(yán)謹(jǐn),具體到哪一步實(shí)現(xiàn)什么樣的目的。試想,打開(kāi)編輯器盲目的敲代碼是多么的痛苦,這是筆者的個(gè)人經(jīng)歷,在編寫代碼的過(guò)程中會(huì)有大腦突然斷電的情形:敲幾行代碼接著又刪掉,甚至不由自主的會(huì)隨意敲幾個(gè)字符然后瘋狂的點(diǎn)刪除鍵。
那初學(xué)者怎么更加深刻地理解算法的意義呢?
首先從字面上理解——計(jì)算方法。算一道數(shù)學(xué)題對(duì)我們來(lái)說(shuō)再也熟悉不過(guò)了,就拿書上1到100自然數(shù)求和來(lái)說(shuō),當(dāng)初上學(xué)的時(shí)候老師會(huì)帶著我們一起推導(dǎo),最后總結(jié)出等差數(shù)列求和的公式,即可稱之為一種算法。
其次是邏輯性。計(jì)算方法是嚴(yán)謹(jǐn)?shù)?,過(guò)程中的每一步都要符合邏輯才能得出想要的結(jié)果?!で疫壿嬍怯袑哟蔚?,每一層又有其內(nèi)在的關(guān)聯(lián)邏輯,可獨(dú)立于其他層邏輯,也可決定相鄰層甚至全局的邏輯。
精練和抽象。一個(gè)算法,能解決1到100的自然數(shù)求和,但是1到200就無(wú)能為力了,這顯然不是一個(gè)好的算法,甚至不能稱之為算法。在解決完某一個(gè)具體問(wèn)題后,我們提升精練解題過(guò)程,抽象成對(duì)應(yīng)的這一類問(wèn)題的解題方法,不僅僅是求和1到1000的自然數(shù),而是求和任意的等差數(shù)列,那這個(gè)精練的解題方法就可稱之為算法。
算法推演到后面貌似都成了數(shù)學(xué)問(wèn)題,學(xué)好算法需要具備一定的數(shù)學(xué)思維,而且不是簡(jiǎn)單的加減乘除了,需要我們針對(duì)不同的問(wèn)題建立相應(yīng)的數(shù)學(xué)模型來(lái)解題。
綜合來(lái)講,初學(xué)者不要害怕“算法”,多鍛煉自己的解題思路,理清主線邏輯和分支邏輯;再者就是要拋開(kāi)編程語(yǔ)言,不要有“我連編程都不會(huì)怎么會(huì)算法”這個(gè)思想誤區(qū)。程序是為了實(shí)現(xiàn)算法,算法是程序的靈魂,而編寫程序可以有很多種語(yǔ)言(C語(yǔ)言只是其中一種),要充分理清明白他們之間的關(guān)系,才有利于我們往后深入的學(xué)習(xí)。
在工作中,除了算法工程師之類職位之外,其他的程序員職位在工作中遇到純算法的任務(wù)很少。常見(jiàn)的純算法問(wèn)題比如:用戶行為畫像、搜索建議、內(nèi)容推薦、廣告推薦等,他們的背后就是各種數(shù)據(jù)模型了。
基于筆者的經(jīng)驗(yàn)(后端開(kāi)發(fā))來(lái)講,我遇到的算法問(wèn)題基本上糅合在業(yè)務(wù)代碼里,需要特別用到算法的業(yè)務(wù)則會(huì)由專門的算法工程師封裝好對(duì)外開(kāi)放調(diào)用。
一個(gè)項(xiàng)目怎么拆分,一個(gè)模塊怎么分解,具體到某個(gè)類、某個(gè)函數(shù)實(shí)現(xiàn)何種業(yè)務(wù),這個(gè)要靠經(jīng)驗(yàn)的積累和對(duì)項(xiàng)目本身所屬行業(yè)的業(yè)務(wù)研判。文章開(kāi)頭講到:算法即解題思路,那如果把視角抬高,整個(gè)項(xiàng)目作為一道題,那么,對(duì)項(xiàng)目的頂層設(shè)計(jì)、模塊拆解、功能劃分等就是宏觀意義上的算法了。
再把眼界放寬,國(guó)家的百年計(jì)劃,或者我們常聽(tīng)的“十四五規(guī)劃”,即一個(gè)五年周期的國(guó)家發(fā)展的規(guī)劃,這也是一個(gè)算法,它解決的問(wèn)題是如何在一個(gè)五年周期內(nèi)把整個(gè)國(guó)家的政治、經(jīng)濟(jì)、文化、教育等綜合水平都提升到某個(gè)檔次。
注意:“宏觀的算法”只是筆者為了加深對(duì)算法的認(rèn)知和理解想到的一個(gè)名詞,在計(jì)算機(jī)術(shù)語(yǔ)里并不存在。
推薦網(wǎng)站力扣 https://leetcode.cn/,注冊(cè)之后就從推薦的新手村開(kāi)始練習(xí),從易到難。
但是去練習(xí)有個(gè)前提是我們會(huì)一門編程語(yǔ)言。盡管我們還不會(huì)C語(yǔ)言,也可以先注冊(cè),可以不用編寫正式的代碼,而是用“偽代碼”這種形式來(lái)表述我們的算法,等到我們學(xué)習(xí)了C語(yǔ)言相關(guān)的語(yǔ)法、數(shù)據(jù)結(jié)構(gòu)之后再去把“偽代碼”轉(zhuǎn)換成C語(yǔ)言代碼即可,這樣既能驗(yàn)證我們的算法,也能練習(xí)C語(yǔ)言。
算法的練習(xí)最好不要中斷,對(duì)未來(lái)找工作面試很有幫助哦~
隨著近幾年大數(shù)據(jù)、人工智能、機(jī)器學(xué)習(xí)的快速發(fā)展,算法這個(gè)概念逐漸被大眾所熟知。
基于大數(shù)據(jù)的人工智能,背后經(jīng)歷了上億甚至更多次的模型訓(xùn)練和學(xué)習(xí),也應(yīng)用到了各種領(lǐng)域。內(nèi)容推薦,你現(xiàn)在讀的本文就是根據(jù)你的日常瀏覽行為經(jīng)過(guò)一套算法處理之后推薦到你眼前的;智能客服,根據(jù)過(guò)往用戶的問(wèn)題來(lái)自動(dòng)解決你提出的問(wèn)題(雖然有時(shí)候很雞肋,真人客服目前還是剛需);智能機(jī)器人,每天跟你交流對(duì)話,掌握你的習(xí)慣和行為,其實(shí)更多的想法還是從你身上賺錢^_^
那未來(lái)的算法是怎樣的呢?有個(gè)問(wèn)題不能忽略,算法的邏輯還是人來(lái)定的,如果算法能自己凈化并跳躍出一開(kāi)始定義它的人的邏輯,那《西部世界》、《失控玩家》等科幻影視也可能成為現(xiàn)實(shí)了…
一起學(xué)《C程序設(shè)計(jì)》第一課——C語(yǔ)言概述和學(xué)習(xí)前的準(zhǔn)備、意識(shí)
]]>