給我一個學(xué)算法的理由
我覺得學(xué)算法除了應(yīng)付面試基本用不上,事實上實際開發(fā)中也確實沒怎么用過,所以數(shù)據(jù)結(jié)構(gòu)和算法一直都處于擱置的狀態(tài)。但這事其實挺蠢的,我一直的原則是用不上的東西絕對不學(xué),后端和移動端都寫過,沒有遇到過需要靠算法解決的問題,更多的是考驗對操作系統(tǒng)和API還有計算機(jī)基礎(chǔ)的了解......但稍微想想發(fā)現(xiàn)不是那么回事,都快2022年了我還只整一臺服務(wù)器,雖然因為雙端都是自己寫,接口的返回提前約定好,就一個數(shù)字,json都懶得用,在1m帶寬和單核處理器下做到了像是沒有聯(lián)網(wǎng)一樣的流暢,但其實沒什么用,僅僅因為數(shù)據(jù)量和并發(fā)量足夠小而已。
很多問題我確實不需要解決,但對于公司來說同樣的硬件和帶寬下,更好的性能是可以直接帶來更高利益的,比如可以少買幾臺服務(wù)器。這么簡單的事情以前愣是沒想明白。
于是看了幾頁算法第四版,一個二分查找直接給我整懵了:妙啊。
以前的話我肯定就直接遍歷,或者干脆整一個List然后用contains方法......現(xiàn)在我覺得以前的自己撈的淌口水,有一種打開了新世界大門的感覺。
我第一次明白了“優(yōu)雅”的含義,以前只是在代碼層面追求優(yōu)雅,邏輯上的東西突出一個“能跑就行”,畢竟也沒人在意那幾毫秒的時間差......但這樣果然還是太low了,在處理大量數(shù)據(jù)時垃圾的算法很可能就直接導(dǎo)致一個問題解不出來,所以算法做的并不只是加快處理的速度,很多時候是把一個問題從不可解變成可解的飛躍。
想通這一點以后就變得有意思多了,以前看過數(shù)據(jù)結(jié)構(gòu)和算法,但是因為沒有用過很快就忘了......重新?lián)炱饋硪院蟀l(fā)現(xiàn)還是很有意思的,以前純粹是為了學(xué)而學(xué),各種樹各種圖都不知道有什么用......現(xiàn)在明白了,學(xué)這些是為了用數(shù)據(jù)結(jié)構(gòu)去構(gòu)建算法從而更快的解決問題。