为什么数据结构与算法如此重要?
我想这是许多人的疑问,是啊,为什么数据结构与算法很重要呢?
实际上之所以有很多问题我们不明白不理解,是因为我们所处的角度的问题,在这里如果你站在老板的角度上思考问题一切就简单了。
升职加薪
老板开公司的目的是为了什么?钱啊,数据结构与算法有什么用呢,能为老板省钱啊,能为老板省钱的技术你说重要不重要。同样一个程序,你的运行起来需要10台服务器,另一个人的只需要2台,如果你是老板的话该为谁升职加薪呢?
数据结构与算法就是这样一种能为老板多赚钱(能省钱也就是多赚钱)的技术。
那站在程序员的角度呢?
很多初学者甚至有工作经验的程序员避免学习数据结构与算法,一方面因为其固有的复杂性;另一方面他们觉得数据结构和算法在实际工作中根本就没什么用嘛,我们用一个最简单的游戏来开始本篇的讨论。
有一个猜数的游戏,玩家说出一个数字,主持人会告诉玩家这个数字是大了还是小了,看谁猜的次数最少,最好的办法是什么呢?很显然:
假设抛出的数字是100,主持人告诉你猜大了,那么接下来应该猜50;如果主持人告诉你猜小了,那么接下来应该是75;如果又猜大了,那么接下来应该是62,如果又小了,那么应该是56,Congratulations,恭喜你猜到了,实际上你在用二分查找的策略。
这个简单的示例应该能让你意识到现实生活中算法的重要性,如果你仅仅认为数据结构与算法只在面试时才有用那就大错特错了。
因此,简单总结一下数据结构与算法的重要性:
通过面试,找到心仪的offer,进入大厂
使用数据结构与算法高效解决面临的复杂问题,为老板省钱从而升职加薪
进入顶尖大厂
许多人会问为什么很多大厂面试第一关就是算法而不是编程语言、框架等等。
现实中公司尤其是拥有大规模用户群的的大厂会面临很多复杂且有挑战的问题,这些问题都是由像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.
图解LeetCode
为了帮助大家更好的掌握数据结构与算法,博主会持续更新LeetCode题解,算法类的文章先比其它会略显枯燥,为了帮助大家更好的理解博主会尽可能详细进行讲解,当然,一图胜千言,对于算法来说更是如此,图形图像对于我们来说天生更加容易理解,因此这一系列文章的目的就在于用图形化的方法来一步一步详细讲解LeetCode,每一篇文章都会讲解最终算法是如何设计出来的、以及算法是如何运行的,希望这个项目能帮助让大家彻底理解并掌握算法。
当前已经发布的文章:
图解LeetCode 4:Median of Two Sorted Arrays
图解LeetCode 8:String to Integer (atoi)
图解LeetCode 11:Container With Most Water
图解LeetCode 23:Merge k Sorted Lists
图解LeetCode 29:整数相除
图解LeetCode 32:最长匹配括号
图解LeetCode 45:Jump Game II
图解LeetCode 46:如何生成数字全排列
图解LeetCode 55:Jump Game
图解LeetCode 97:交错字符串
图解LeetCode 127:单词梯子
图解LeetCode 146:LRU cache
图解LeetCode 236:二叉树最低公共祖先
博主也会持续更新该系列。
最后希望这一系列文章能帮到大家,祝大家都能拿到心仪的offer。





