天天看點

為什麼資料結構與算法如此重要?

我想這是許多人的疑問,是啊,為什麼資料結構與算法很重要呢?

實際上之是以有很多問題我們不明白不了解,是因為我們所處的角度的問題,在這裡如果你站在老闆的角度上思考問題一切就簡單了。

升職加薪

老闆開公司的目的是為了什麼?錢啊,資料結構與算法有什麼用呢,能為老闆省錢啊,能為老闆省錢的技術你說重要不重要。同樣一個程式,你的運作起來需要10台伺服器,另一個人的隻需要2台,如果你是老闆的話該為誰升職加薪呢?

資料結構與算法就是這樣一種能為老闆多賺錢(能省錢也就是多賺錢)的技術。

那站在程式員的角度呢?

很多初學者甚至有工作經驗的程式員避免學習資料結構與算法,一方面因為其固有的複雜性;另一方面他們覺得資料結構和算法在實際工作中根本就沒什麼用嘛,我們用一個最簡單的遊戲來開始本篇的讨論。

有一個猜數的遊戲,玩家說出一個數字,主持人會告訴玩家這個數字是大了還是小了,看誰猜的次數最少,最好的辦法是什麼呢?很顯然:

假設抛出的數字是100,主持人告訴你猜大了,那麼接下來應該猜50;如果主持人告訴你猜小了,那麼接下來應該是75;如果又猜大了,那麼接下來應該是62,如果又小了,那麼應該是56,Congratulations,恭喜你猜到了,實際上你在用二分查找的政策。

這個簡單的示例應該能讓你意識到現實生活中算法的重要性,如果你僅僅認為資料結構與算法隻在面試時才有用那就大錯特錯了。

是以,簡單總結一下資料結構與算法的重要性:

  1. 通過面試,找到心儀的offer,進入大廠
  2. 使用資料結構與算法高效解決面臨的複雜問題,為老闆省錢進而升職加薪

進入頂尖大廠

許多人會問為什麼很多大廠面試第一關就是算法而不是程式設計語言、架構等等。

現實中公司尤其是擁有大規模使用者群的的大廠會面臨很多複雜且有挑戰的問題,這些問題都是由像hash表、樹、圖以及各種算法來解決的,比起其它方面,面試官其實更看中候選者是否能運用資料結構與算法來高效解決給定問題。

來自Google、微軟、Facebook、Amazon等公司的程式員可以獲得更高的薪水,為什麼?在這些公司中編寫代碼僅僅占據了大概20%-30%的時間,那麼剩下的時間都在幹嘛呢?剩下的時間是在尋找或設計更高效的算法以節省公司的資源(主要是伺服器),為什麼這些人主要在做這件事呢?因為這些公司擁有全世界最有的使用者,Facebook、YouTube、Twitter、 Instagram、 GoogleMaps等其使用者都有數十億之多,這背後需要的計算資源可想而知,那麼這些資源可都是用錢堆出來的,你用高效的算法為公司節省哪怕0.1%的計算資源,換算成錢的話可能都有數億美金了,這就是算法的重要之處。

假設你在Facebook工作并且想出來一個很牛的算法,使得計算速度由O(N^2) 提升到了O(NLogN),假設這裡的問題規模N為一億(考慮到Facebook的使用者規模這已經很保守了),那麼O(NLogN)大概為8億,而O(N^2)是100000000億,那麼你的算法從效率上提升了大概一千萬倍,想一想這種效率上的提升能為公司節約多少成本。

現在你應該知道為什麼世界上頂尖公司都喜歡雇傭那些聰明家夥了吧,就是因為他們在代碼效率的一點提升就能為公司節約極大的成本。

我們的現實世界充滿了各種富有挑戰的問題,有些問題甚至依然沒有高效的解法,深度了解這些問題,哪怕你的解法能提升一點點效率,有了這樣的能力想進大廠我想不會有哪個老闆會傻到拒絕你吧。

Data structure and algorithms help in understanding the nature of the problem at a deeper level and thereby a better understanding of the world.

更多計算機内功文章,歡迎關注微信公共賬号:碼農的荒島求生。

為什麼資料結構與算法如此重要?

徹底了解作業系統系列文章

1,什麼程式?

2,程序?程式?傻傻分不清

3,程式員應如何了解記憶體:上篇

4,程式員應如何了解記憶體:下篇

計算機内功決定程式員職業生涯高度