這是排序算法中最經(jīng)典的兩個算法了,面試必考。相信你已爛熟于心中了。所以,我覺得你把這個算法應(yīng)用于你的人生選擇也應(yīng)該不是什么問題。關(guān)于在于,你是否知道自己想要的是什么?
排序算法的核心思想就是,讓你幫助你認(rèn)清自己最需要的是什么,認(rèn)清自己最想要的是什么,然后根據(jù)這個去做選擇。
貪婪算法
所謂貪婪算法,是一種在每一步選擇中都采取在當(dāng)前狀態(tài)下最好或最優(yōu)(即最有利)的選擇(注意:是當(dāng)前狀態(tài)下),從而希望導(dǎo)致結(jié)果是最好或最優(yōu)的算法。貪婪算法最經(jīng)典的一個例子就是哈夫曼編碼。
對于人類來說,一般人在行為處事的時候都會使用到貪婪算法,
比如在找零錢的時候,如果要找補(bǔ)36元,我們一般會按這樣的順序找錢:20元,10元,5元,1元。
或者我們在過十字路口的時候,要從到對角線的那個街區(qū)時,我們也會使用貪婪算法——哪邊的綠燈先亮了我們就先過到那邊去,然后再轉(zhuǎn)身90度等紅燈再過街。
這樣的例子有很多。對于選擇中,大多數(shù)人都會選用貪婪算法,因?yàn)檫@是一個比較簡單的算法,未來太復(fù)雜了,只能走一步看一步,在當(dāng)前的狀況下做出最利于自己的判斷和選擇即可。
有的人會貪婪薪水,有的人會貪婪做的項(xiàng)目,有的人會貪婪業(yè)務(wù),有的人會貪婪職位,有的人會貪婪自己的興趣……這些都沒什么問題。貪婪算法并沒有錯,雖然不是全局最優(yōu)解,但其可以讓你找到局部最優(yōu)解或是次優(yōu)解。其實(shí),有次優(yōu)解也不錯了。貪婪算法基本上是一種急功近利的算法,但是并不代表這種算法不好,如果貪婪的是一種長遠(yuǎn)和持續(xù),又未嘗不可呢?。
動態(tài)規(guī)劃
但是我們知道,對于大部分的問題,貪婪法通常都不能找出最優(yōu)解,因?yàn)樗麄円话銢]有測試所有可能的解。因?yàn)樨澙匪惴ㄊ且环N短視的行為,只會跟據(jù)當(dāng)前的形式做判斷,也就是過早做決定,因而沒法達(dá)到最佳解。
動態(tài)規(guī)劃和貪婪算法的最大不同是,貪婪算法做出選擇,不能回退。動態(tài)規(guī)劃則會保存以前的運(yùn)算結(jié)果,并根據(jù)以前的結(jié)果對當(dāng)前進(jìn)行選擇,有回退功能。
動態(tài)規(guī)劃算法至少告訴我們兩個事:
1)承前啟后非常重要,當(dāng)你準(zhǔn)備去做遍歷的時候,你的上次的經(jīng)歷不但能開啟你以后的經(jīng)歷,而且還能為后面的經(jīng)歷所用。你的每一步都沒有浪費(fèi)。
2)是否可以回退也很重要。這意思是——如果你面前有兩個選擇,一個是A公司一個是B公司,如果今天你錯失了B公司,那到你明天還能不能找回來?
比如說:你有兩個offer,一個是Yahoo,一個是Baidu,上述的第一點(diǎn)會讓我們思考,Yahoo和Baidu誰能給我們開啟更大的平臺?上述的第二點(diǎn)告訴我們,是進(jìn)入Yahoo后如果沒有選好,是否還能回退到Baidu公司?還是進(jìn)入Baidu公司后能容易回退到Y(jié)ahoo公司?
Dijkstra最短路徑
最短路徑是一個Greedy + DP的算法。相當(dāng)經(jīng)典。這個算法的大意如下:
1)在初始化的時候,所有的結(jié)點(diǎn)都和我是無窮大,默認(rèn)是達(dá)不到的。
2)從離自己最近的結(jié)點(diǎn)開始貪婪。
3)走過去,看看又能到達(dá)什么樣的結(jié)點(diǎn),計算并更新到所有目標(biāo)點(diǎn)的距離。
4)再貪婪與原點(diǎn)最短的結(jié)點(diǎn),如此反復(fù)。
這個算法給我們帶來了一些這樣的啟示:
有朋友和我說過他想成為一個架構(gòu)師,或是某技術(shù)領(lǐng)域的專家,并會踏踏實(shí)實(shí)的向這個目標(biāo)前進(jìn),永不放棄。我還是鼓勵了他,但我也告訴他了這個著名的算法,我說,這個算法告訴你,架構(gòu)師或某領(lǐng)域的專家對你來說目前的距離是無窮大,他們放在心中,先看看你能夠得著的東西。所謂踏實(shí),并不是踏踏實(shí)實(shí)追求你的目標(biāo),而是踏踏實(shí)實(shí)把你夠得著看得見的就在身邊的東西干好。我還記得我剛參加工作,從老家出來的時候,從來沒有想過要成為一個技術(shù)牛人,也從來沒有想過我的博客會那么的有影響力,在做自己力所能及,看得見摸得著的事情,我就看見什么技術(shù)就學(xué)什么,學(xué)著學(xué)著就知道怎么學(xué)更輕松,怎么學(xué)更扎實(shí),這也許就是我的最短路徑。
更多詳細(xì)信息,請您微信關(guān)注“計算網(wǎng)”公眾號: