中国有80%以上的程序员觉得算法在日常开发中并没有实际用处,殊不知算法只是一种解决问题的思想。
而我国大部分程序员都是沉浸在会多少个框架、会多少门编程语言、实现过多少个接口中。在大部分程序员日常开发中很大一部分工作的目的都只是寻求业务功能实现。但是在BAT,他们面对的是每日庞大的请求量,除业务功能外他们还需要考虑性能、体验、稳定性,此时代码的效率和严谨性就比功能的实现更加的来的重要。
下面就以最经典的鸡兔同笼子问题看算法在编程中的重要性,让大家明白同为程序员为何你工资这么低?看完这下服气了吗?
问题(业务需求):已知笼子里共有20个头56只脚,请问鸡和兔子分别有多少只?
普通程序员(实现业务型):
这类程序员只注重业务的实现,不会去深究需求的底层逻辑。在他们眼里循环是万能的,没有循环解决不了的问题,一层不行那就两层,两层就行就三层。。。
for (int i = 0; i <= 20; i++)
{
for (int j = 0; j <= 20; j++)
{
if( i + j == 20 && 2*i+4*j == 56)
cout<<"鸡:"<<i<<"兔:"<<j<<endl;
}
}
稍微会动一点脑思考的,可能会发现只需要一层就能实现:
这类程序员在开发中会注重到自己代码的质量,尽量减少无谓的代码和循环,但是仍然没有涉及到本质的算法。
for (int i = 0; i <= 20; i++)
{
if(i*2+(20-i)*4 == 56)
cout<<"鸡:"<<i<<"兔:"<<20-i<<endl;
}
用一点算法思维来实现业务:
问题的本质是兔子比鸡多2只脚,通过这个差异来构建思路,可以不用任何循环就实现业务需求
double allRabitFootCount = 20*4 ;
double chickCount = (20*4 - 56)/(4-2) ;
cout<<"鸡:"<<chickCount<<"兔:"<<20-chickCount<<endl;
上述例子中鸡兔总数量比较少,三种实现运行效率都差不多,但是如果鸡兔的总数达到万亿级别呢?那么这三种方案的效率差距就是显而易见的。
很多程序员到现在还粗暴的将算法与数据结构画等号。
对,目前力扣上的算法题基本全是跟数据结构挂钩的,但是在大家应该明白各类数据结构当初被创造出来也是为了应对越来越丰富的业务需求,本质也是解决业务需求的一种思想。比如链表的出现是为了应对更加高效便捷的动态线性数据存储。
算法是一种思想,也是一种让业务更高效、更稳定的编程习惯。
如果大家对应编程更底层、更深入的一些思考感兴趣欢迎大家关注大叔,订阅下方专栏获得更多编程知识