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

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

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

image

雖然搜索引擎會(huì)替我們把一部分完全重復(fù)的內(nèi)容過濾掉,但它的能力畢竟有限邦投。這么多算法看得我們眼花繚亂伤锚,到底哪個(gè)算法更適合我們呢?我們肯定不可能把所有的算法都試一遍志衣,因?yàn)槲覀兏緵]有那么多資源和時(shí)間屯援。

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

我們?cè)谇懊嬷v過,一個(gè)算法在創(chuàng)造出來之后吉懊,在不斷地復(fù)制傳播的過程中庐橙,會(huì)產(chǎn)生很多的變種。除了算法中最核心的步驟外借嗽,其他的一切都可能發(fā)生變化态鳖。比如 做可樂雞翅 的算法中必然有“放雞翅”和“加入可樂”這兩步,否則就不再是可樂雞翅了恶导。然而配菜浆竭、調(diào)料、烹調(diào)時(shí)間惨寿、烹調(diào)方法……可以組成無數(shù)種組合邦泄,也就形成了無數(shù)種大同小異的算法。

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

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

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

image

材料
雞翅10只,可樂1瓶瘾英,姜枣接,蒜,蔥缺谴,鹽但惶,醬油,老抽,料酒
做法
1膀曾、雞翅洗凈县爬,用牙簽在雞翅上扎些小洞
2、姜添谊、蒜财喳、小蔥切碎
3、將雞翅放盤內(nèi)碉钠,再加入切好的姜纲缓、蒜、小蔥
4喊废、加入鹽祝高、醬油、老抽污筷、料酒工闺,用手抓均腌制15分鐘
5、鍋內(nèi)倒入食用油小火燒熱
6瓣蛀、將腌制好的雞翅放入鍋內(nèi)陆蟆,煎到兩面呈金黃色
7、加入適量的可樂燒開惋增,可樂和雞翅持平即可
8叠殷、用小火燜至湯汁變濃時(shí)即可關(guān)火裝盤

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

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

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

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

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

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

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

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

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

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

先別著急亡问,請(qǐng)回憶一下官紫,你有沒有遇到過下面這些情況?

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

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

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

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

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

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

image

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

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

材料
雞翅10只虑稼,可樂1瓶,油势木,姜蛛倦,蒜,蔥啦桌,鹽溯壶,醬油,老抽震蒋,料酒
工具
燃?xì)庠?/ 電磁爐茸塞、鍋、鏟子查剖、菜刀钾虐、案板、盤子笋庄、牙簽

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

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

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

image

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

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

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

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

此外墩新,創(chuàng)造一個(gè)免受外界打擾的環(huán)境 也是很有必要的倍谜。因?yàn)橹挥屑芯Γ拍馨咽伦龊媒摹<偃缒阏谕鎸?duì)戰(zhàn)游戲,那么最討厭的事莫過于來電話了角撞。如果你不得不接這個(gè)電話呛伴,那么很可能會(huì)心不在焉,一直想著游戲里的事谒所。等電話掛掉热康,游戲往往也已經(jīng)輸?shù)袅恕_@種體驗(yàn)真讓人沮喪劣领,對(duì)嗎姐军?

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

最后村生,如果你沒有任何相關(guān)領(lǐng)域的經(jīng)驗(yàn)惊暴,那么最好能 找一位專業(yè)人士在旁指導(dǎo)。因?yàn)橹灰侨硕紩?huì)犯錯(cuò)誤趁桃,專業(yè)人士不僅可以在你出現(xiàn)問題時(shí)及時(shí)糾正辽话,也能在你碰到各種意外情況時(shí),提供有效的幫助卫病,避免出現(xiàn)無法挽回的局面油啤。

image

如果實(shí)在找不到有經(jīng)驗(yàn)的人,也最好能找一個(gè)信得過的伙伴來一起做蟀苛。犯錯(cuò)誤并不可怕益咬,只要及時(shí)發(fā)現(xiàn),采取有效的措施來補(bǔ)救即可屹逛。真正可怕的是犯了錯(cuò)而不自知础废,等到發(fā)現(xiàn)后為時(shí)已晚汛骂。更可怕的是明知道自己犯了錯(cuò)誤,還要一意孤行评腺,往往會(huì)釀成大錯(cuò)帘瞭。

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

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

(未完待續(xù))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末媒殉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子摔敛,更是在濱河造成了極大的恐慌廷蓉,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件马昙,死亡現(xiàn)場(chǎng)離奇詭異桃犬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)行楞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門攒暇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人子房,你說我怎么就攤上這事形用。” “怎么了证杭?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵田度,是天一觀的道長。 經(jīng)常有香客問我躯砰,道長每币,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任琢歇,我火速辦了婚禮兰怠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘李茫。我一直安慰自己揭保,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布魄宏。 她就那樣靜靜地躺著秸侣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上味榛,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天椭坚,我揣著相機(jī)與錄音,去河邊找鬼搏色。 笑死善茎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的频轿。 我是一名探鬼主播垂涯,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼航邢!你這毒婦竟也來了耕赘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤膳殷,失蹤者是張志新(化名)和其女友劉穎操骡,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赚窃,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡当娱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了考榨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鹦倚,死狀恐怖河质,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情震叙,我是刑警寧澤掀鹅,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站媒楼,受9級(jí)特大地震影響乐尊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜划址,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一扔嵌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夺颤,春花似錦痢缎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春嵌洼,著一層夾襖步出監(jiān)牢的瞬間案疲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國打工麻养, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留褐啡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓回溺,卻偏偏與公主長得像春贸,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遗遵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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