《編程原來是這么回事》算法篇(中)

4. 怎么選擇合適的算法?

在大多數(shù)情況下,我們面臨的問題并不是找不到算法,而是找到的算法太多了:

image

雖然搜索引擎會替我們把一部分完全重復(fù)的內(nèi)容過濾掉,但它的能力畢竟有限。這么多算法看得我們眼花繚亂,到底哪個算法更適合我們呢?我們肯定不可能把所有的算法都試一遍,因為我們根本沒有那么多資源和時間。

接下來,我們就需要執(zhí)行元算法中的第二步:選擇算法。也就是從找到的眾多算法中,挑選出最適合自己的算法來執(zhí)行。

我們在前面講過,一個算法在創(chuàng)造出來之后,在不斷地復(fù)制傳播的過程中,會產(chǎn)生很多的變種。除了算法中最核心的步驟外,其他的一切都可能發(fā)生變化。比如 做可樂雞翅 的算法中必然有“放雞翅”和“加入可樂”這兩步,否則就不再是可樂雞翅了。然而配菜、調(diào)料、烹調(diào)時間、烹調(diào)方法……可以組成無數(shù)種組合,也就形成了無數(shù)種大同小異的算法。

只要變種有一定效果,就會流傳開來。效果越好的變種,流傳就越廣。所以別看搜索引擎說它找到了上千萬條內(nèi)容,看起來很嚇人,其實那往往只是幾十種甚至幾種算法變種不斷復(fù)制傳播的結(jié)果。

事實上,搜索引擎顯示的結(jié)果前三頁里,基本就包括了所有普遍流行的算法變種。 我們沒有必要一直翻到最后一頁,看完所有的算法后再作出決定。如果這件事不是特別重要的話,我們完全可以只從第一頁里的內(nèi)容中進(jìn)行挑選。

比如有一個 制作可樂雞翅 的算法是這樣的:

image

材料
雞翅10只,可樂1瓶,姜,蒜,蔥,鹽,醬油,老抽,料酒
做法
1、雞翅洗凈,用牙簽在雞翅上扎些小洞
2、姜、蒜、小蔥切碎
3、將雞翅放盤內(nèi),再加入切好的姜、蒜、小蔥
4、加入鹽、醬油、老抽、料酒,用手抓均腌制15分鐘
5、鍋內(nèi)倒入食用油小火燒熱
6、將腌制好的雞翅放入鍋內(nèi),煎到兩面呈金黃色
7、加入適量的可樂燒開,可樂和雞翅持平即可
8、用小火燜至湯汁變濃時即可關(guān)火裝盤

拿到一個算法后,怎么知道它是不是適合自己呢?我們可以從三個方面進(jìn)行考察:

1、執(zhí)行效果: 算法執(zhí)行的效果如何?我能接受嗎? 我們需要知道執(zhí)行算法后的效果,這樣對自己將要付出的時間和精力有個合理的預(yù)期。對做可樂雞翅這個例子來說,幾乎每個菜譜都帶有效果圖,你只要判斷圖片是否讓你有食欲就可以了,感覺不好的直接pass掉。除非已經(jīng)沒有其他選擇了,否則不要考慮那些沒有說明執(zhí)行效果的算法。

2、所需條件: 我具備所有的條件嗎?我能補(bǔ)足不具備的條件嗎?它重要嗎? 掃描整個算法,羅列一下執(zhí)行它需要的條件,比如:材料、技能、時間、金錢……然后逐個檢查看自己是不是具備。如果某個條件不具備,我們能不能、愿不愿意付出額外的時間和金錢去交換?在缺失這個條件的情況下執(zhí)行算法,會出大問題嗎?不行的話,那這個算法就只能放棄掉了。比方說你發(fā)現(xiàn)家里沒有姜,僅僅少一味調(diào)料一般來說問題并不大;但是要是沒有可樂,你又不能出去買的話,那就別想做可樂雞翅了。

3、執(zhí)行難度: 算法是否足夠簡單?每個步驟描述是否詳細(xì)?操作起來難嗎? 梳理一遍所有的步驟,看看你是否能清楚地明白每一步具體要做什么。算法應(yīng)該用你能理解的方式來描述和呈現(xiàn),要是有配圖甚至視頻則更好。如果算法里面有一大堆你看不懂的專業(yè)術(shù)語,那這個算法就不太適合你。假如你從來沒做過飯,可能對上面那個算法里的一些名詞(比如:老抽)有點陌生,或者對某些描述感到疑惑(比如:多大的火算小火?)。如果你不請教一下做飯高手或者在網(wǎng)上搜索來搞明白這些問題,在執(zhí)行的過程中很可能就會出問題。

你是想追求最好的效果?還是在有限的條件下完成任務(wù)?還是想盡可能地保證成功率?哪個對你來說最重要?你需要想明白這一點,然后依此安排考察以上三個方面的順序,把最重要的放在最前面。 如果最重要的方面出了問題,我們就不需要再浪費(fèi)時間去考察其他方面了。

把不適合我們的算法都過濾掉之后,往往就只剩下屈指可數(shù)的幾個選擇了。如果你有條件多試幾次的話,不妨把它們都保存下來,挨個試一遍。執(zhí)行過幾個不同的算法變種,你就能理解這個算法最核心的部分是什么,各個變種的區(qū)別和價值在哪里,甚至可以自己開發(fā)出新的變種來。

如果你只有一次嘗試機(jī)會,那么可以兼顧各個方面,選擇綜合表現(xiàn)最好的算法;也可以選擇在你最看重的那個方面上,單項得分最高的算法(執(zhí)行效果最好的 / 所需條件最少的 / 執(zhí)行難度最小的)。

「試一試」
挑一件你從來沒做過的事,然后通過搜索引擎來尋找算法。用上面所述的方法,從搜索結(jié)果前三頁中篩選出適合自己的算法,并確定一個最適合自己的算法,把它保存下來。

5. 怎么做好執(zhí)行算法前的準(zhǔn)備?

在找到合適的算法之后,你可能會覺得勝利已經(jīng)近在眼前了,接下來只要按照算法一步一步地執(zhí)行下去,就能完成目標(biāo)。有點躍躍欲試了嗎?

先別著急,請回憶一下,你有沒有遇到過下面這些情況?

  • 從超市回到家之后,才發(fā)現(xiàn)有樣?xùn)|西忘了買

  • 為了趕時間匆忙行事,結(jié)果不小心把事情搞砸了

  • 打游戲時接了個電話,掛斷之后游戲已經(jīng)輸?shù)袅?br> ……

俗話說:“預(yù)則立,不預(yù)則廢”。以上列出的問題,都是由于 沒有進(jìn)行充分準(zhǔn)備 導(dǎo)致的,也就是說沒有做好元算法中的第三步:事前準(zhǔn)備。我們在執(zhí)行算法之前準(zhǔn)備得越充分,出問題的可能性就越小。那我們應(yīng)該怎么做準(zhǔn)備呢?

1、制作準(zhǔn)備清單

首先,我們應(yīng)該仔細(xì)閱讀算法中每一個步驟,想一想:“如果我要執(zhí)行這一步的話,必須擁有哪些東西?”,然后把所有需要的東西列出一個清單來。千萬不要天真地以為,照算法作者列出來的材料清單來做準(zhǔn)備就行了。因為作者往往會假設(shè)一些東西你肯定有,就沒有放在清單里面。比如在做可樂雞翅的算法中,有這么一步:

image

5、鍋內(nèi)倒入食用油小火燒熱

很明顯,為了完成這一步,你必須要有鍋和食用油,而材料清單里并沒有。此外想要用火來加熱,就還得有燃?xì)庠罨蛘唠姶艩t。最后,我們可以列出下面的清單來:

材料
雞翅10只,可樂1瓶,油,姜,蒜,蔥,鹽,醬油,老抽,料酒
工具
燃?xì)庠?/ 電磁爐、鍋、鏟子、菜刀、案板、盤子、牙簽

如果不經(jīng)過特殊的訓(xùn)練的話,我們的大腦只能同時記住三到五件事情,當(dāng)有新的事情需要記憶時,之前的事情就會被忘掉。所以我們一定要把清單記錄在可靠的媒介上,比如抄到紙上或者存在手機(jī)里,不要相信自己的記憶!

2、按照清單進(jìn)行準(zhǔn)備,多多益善

接下來,我們就可以按照清單來做準(zhǔn)備工作了。把缺少的東西標(biāo)記出來,然后去超市統(tǒng)一采購。如果有樣?xùn)|西在超市買不到,那就在網(wǎng)上買,也可以問別人借。除此之外,對已經(jīng)有的東西最好也檢查一下,看看數(shù)量夠不夠、能不能用、有沒有損壞……每當(dāng)你 做好了一項準(zhǔn)備,就在清單上做一個標(biāo)記(比如打勾或者劃掉)。

image

算法越復(fù)雜、需要準(zhǔn)備的東西越多,出現(xiàn)各種意外的可能性就越大。假如你在拿可樂時不小心摔了一跤,一瓶可樂全倒在了地上怎么辦?所以 不管是材料、時間還是金錢,都應(yīng)該盡可能多準(zhǔn)備一些。 就算只需要一瓶可樂,也最好買上兩瓶,剩下了還可以自己喝。如果你計劃一個小時完成,那么至少要準(zhǔn)備上兩三個小時,萬一發(fā)現(xiàn)少了什么東西還可以再去超市買一次……

準(zhǔn)備完成之后,千萬別忘了 再對照清單核對一遍!

3、調(diào)整環(huán)境和自我狀態(tài)

為了更好地執(zhí)行任務(wù),我們還需要 調(diào)整好自己的身體狀態(tài)。每個人都有不同的生理節(jié)奏,有的人早上精力充沛,而有的人到了晚上注意力才能集中起來。越是重要的事,越要安排在自己狀態(tài)最好的時候來做。比如剛剛吃完飯人很容易犯困,這時候就不太適合執(zhí)行需要認(rèn)真思考的任務(wù)。而在開始高強(qiáng)度運(yùn)動之前,則必須做適量的熱身來讓身體做好準(zhǔn)備,以避免受傷。

此外,創(chuàng)造一個免受外界打擾的環(huán)境 也是很有必要的。因為只有集中精力,才能把事做好。假如你正在玩對戰(zhàn)游戲,那么最討厭的事莫過于來電話了。如果你不得不接這個電話,那么很可能會心不在焉,一直想著游戲里的事。等電話掛掉,游戲往往也已經(jīng)輸?shù)袅恕_@種體驗真讓人沮喪,對嗎?

為了避免外部干擾,我們可以在執(zhí)行算法之前,把手機(jī)關(guān)機(jī)或者調(diào)成靜音、鎖上房門或者掛上“請勿打擾”的牌子、去咖啡廳或者圖書館……

最后,如果你沒有任何相關(guān)領(lǐng)域的經(jīng)驗,那么最好能 找一位專業(yè)人士在旁指導(dǎo)。因為只要是人都會犯錯誤,專業(yè)人士不僅可以在你出現(xiàn)問題時及時糾正,也能在你碰到各種意外情況時,提供有效的幫助,避免出現(xiàn)無法挽回的局面。

image

如果實在找不到有經(jīng)驗的人,也最好能找一個信得過的伙伴來一起做。犯錯誤并不可怕,只要及時發(fā)現(xiàn),采取有效的措施來補(bǔ)救即可。真正可怕的是犯了錯而不自知,等到發(fā)現(xiàn)后為時已晚。更可怕的是明知道自己犯了錯誤,還要一意孤行,往往會釀成大錯。

如果我們做好了充分準(zhǔn)備,提前考慮到了各種意外情況,那么在執(zhí)行算法時心里就會更有底氣,也就更可能取得好的效果。

「試一試」
選擇一個自己從來沒有執(zhí)行過的算法,然后用上面所述的方法來做好執(zhí)行前的準(zhǔn)備工作

(未完待續(xù))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內(nèi)容