超過O(n)時間複雜度的算法都是在耍流氓,藉着機器性能好,你就能夠不考慮算法複雜度了?就能夠 O(n^2),O(n^3)嘛。。。 算法
什麼狗屁數學,什麼狗屁學術,就是你本身編碼水平太濫,才須要更強大的硬件。 數據庫
一臺服務器你用了不爽,要用十臺。。要用千臺。。幹呀。。 服務器
你要1TB的傳輸量,一臺機器硬盤IO怎麼也得80-100MB/s, 1TB除下不就行了。 用這麼多硬盤就行。爲毛要比這個多得多的硬件。。。 數據結構
還有CPU和內存,總是想碼幾十萬行代碼,我靠,那種功能,幾萬行就能解決好了,並且還用更高效的算法,O(logn)就搞定,你非要整個o(n^2),試問你是在應用,不是在學習。。。 memcached
還有,你想要效率,又不想學C,每天搞Java,你搞毛線呀。。。 性能
Java動不動就幾MB,幾十MB的內存佔用。。各類虛擬資源,你看C。。程序很小很小,3000行的代碼,只有100KB。。。。 1MB得要多少行C代碼。。而內存佔用,從不含糊,須要多少就用多少,不會多一點亂用的內存。。。 學習
還有如今開源好多也是這種風氣。。。不考慮高性能。。 一秒種,插入10萬次到磁盤,很艱難。 而要作到一秒插入30萬條(78字節一條)磁盤,更難。 編碼
通常的開源軟件,能到一萬條就不錯了。。。 內存
哎,開源的東西,好多把高性能給放棄了,就算用了高性能,也須要大量的硬件,如:Hadoop。 資源
memcached,內存裏的數據庫,居然,一秒只能插入10萬條,硬盤速度是80-100MB/s,能插入30萬條每秒,內存速度是18GB/s, 難道,你memcached不該該插入更快點嘛?用那麼多資源去計算,申請那麼多臨時變量。訪問那麼屢次內存。這就是在減速! 這是罪過。
不吐不快,所謂的業界內的高性能?在開源,哪裏有。
在噴Linux,都知道,Linux的驅動,核心是鏈表組織的,假如一臺機器有千臺設備,那訪問得有多慢。。
若是有萬條。。這時間複雜度,就是O(n),有十萬個設備的機器,別活了,像:高達這種機器人。應該很輕鬆有10萬個設備,驅動的組織方式,仍是變成紅黑樹吧。 不過這個結構,佔時仍是Linux內存的子系統在用。
衆多的人,受到業界某些所謂的大牛的影響,寫些很糟糕的算法。作糟糕的數據結構。
記得有我的這麼說:當N很小的時候,使用o(N)和使用o(logn)的區別不會很大,但是,若是業務須要N忽然增長几個數量級怎麼辦? 程序使用了o(N),這個怎麼改。改的代價是多少。。
還有KISS,這個原則,有的時候真得就在起副作用,KISS到極限的代碼,很容易就會使用糟糕的算法,糟糕的數據結構,我的經驗認爲,KISS應該保持一個複雜度,但這個複雜度又要能考慮到業務未來的數據量級的上升。