《快速排序》引發關於算法的討論


昨天筆者寫了一篇帖子:

c#實現最簡快速排序,你絕對可以看懂

 

有多個同學共同提到一個問題,實現算法的過程中,你的內存消耗太大,所以算法沒有任何意義。所以我單獨開一個帖子,對這個質疑進行解釋

 


 

  首先我本人軟件從業5年,學校里面主修c和c++,畢業后先后接觸和使用的語言有c#,java,python,以及一系列的前端腳本語言(js、jq)等。不能說自己現在的能力有多么強,但是基本可以應付目前的開發任務。我個人資質平平,雖然喜歡研究技術,但是自己並不是一個聰明人。

  說一下我自己對算法的理解:我認為算法是一個實現目標的過程,追求的是時間成本,也就是計算步驟,對於大家提到的內存消耗,我認為本身就不屬於算法討論的范疇。算法和編程語言是沒有任何關系的,說白了,代碼只是實現算法的工具。你用什么工具去實現,全憑你個人。

  


 

當然,內存消耗也是必須要考慮的,但是我覺得不應該是我們來考慮,或者說全局來看,這種消耗是值得的。我為什么這么說,下面我給出我的幾條理由:

一、代碼的閱讀成本以及理解成本直接對應着錯誤成本

相信大家有過這個感受,一些優秀的代碼,自己卻很難讀懂,即使理解了,讓你自己獨立寫出來又會很難,或者過一段時間,你又忘了這段代碼的意思。這個情況直接導致了你自己根本無法使用這些優秀的代碼。為什么?因為從一開始你自己就沒有真正理解,就和我們上學考試一樣,死記硬背之后馬上就忘。當然排除一些聰明的同學理解力確實強,但是很遺憾,大多數人不是!這樣就會導致我們出現大量的錯誤。

 

二、內存消耗是我們要考慮的事情嗎?

這個問題的答案是肯定的,每個程序員都必須去考慮這個問題。我這里要給大家補充說的另外一點,這個其實是一個尋找平衡點的事情。眾所眾知,除了匯編和c、c++,大多數語言是不需要我們直接操作內存的,像java和c#都有專門的GC去處理這個事情。可以這么說,它們都在盡量避免我們去操作內存。實際上GC在一般情況下是足夠優秀的。當我們在糾結着內存消耗的時候,有沒有想過,這一部分內存消耗換來的是自己代碼流暢正確的運行,筆試的時候,輕松完成的快感。

 

三、最優的代碼留給小機靈鬼去做

再回到最開始的問題,算法是步驟和過程,我們使用代碼去實現算法,小機靈鬼的實現方式肯定要比我們普通人更省資源,那么優化代碼的事情就交給他們吧,事實上我們在平時的工作中,也不需要你去實現這些算法,因為這些算法早就被完美的實現了。而我們自己理解了算法,並且也可以正確的實現算法,那么至少我們是一個懂原理,會使用工具的人。那么你就是一個優秀的程序員。

 

文末:

其實大家說的都對,然后我只是向大家表達一下我對於編程的理解。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM