您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

鸡兔同笼子问题看算法在编程中的重要性,终于明白为何工资低了

时间:2020-08-17 15:53:05  来源:  作者:

同为程序员为何你工资这么低?为何BAT面试要面算法?

中国有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;	

上述例子中鸡兔总数量比较少,三种实现运行效率都差不多,但是如果鸡兔的总数达到万亿级别呢?那么这三种方案的效率差距就是显而易见的。

结语

很多程序员到现在还粗暴的将算法与数据结构画等号。

对,目前力扣上的算法题基本全是跟数据结构挂钩的,但是在大家应该明白各类数据结构当初被创造出来也是为了应对越来越丰富的业务需求,本质也是解决业务需求的一种思想。比如链表的出现是为了应对更加高效便捷的动态线性数据存储。

算法是一种思想,也是一种让业务更高效、更稳定的编程习惯。

如果大家对应编程更底层、更深入的一些思考感兴趣欢迎大家关注大叔,订阅下方专栏获得更多编程知识



Tags:算法   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
背景对抗是反作弊永恒的主旋律,面对对抗我们需要做到快速响应、见招拆招、在变化中发现不变的本质。在反作弊场景中,黑产必须通过文本进行信息传递或触达受害者,而文本由于其生...【详细内容】
2022-07-14  Tags: 算法  点击:(4)  评论:(0)  加入收藏
请实现一个函数用来匹配包含&#39;. &#39;和&#39;*&#39;的正则表达式。模式中的字符&#39;.&#39;表示任意一个字符,而&#39;*&#39;表示它前面的字符可以出现任意次(含0次)。在本题...【详细内容】
2022-07-13  Tags: 算法  点击:(6)  评论:(0)  加入收藏
高手:滑动窗口是一种比较常用的数据统计算法。简单来说,就是在一个大的数组上,定义一个固定长度的滑动窗口,然后这个窗口在数组上进行滑动。在窗口滑动的过程中,左边会出一个元素...【详细内容】
2022-07-13  Tags: 算法  点击:(8)  评论:(0)  加入收藏
一、希尔排序介绍希尔排序这个名字,来源于它的发明者希尔,也称作“缩小增量排序”,是插入排序的一种更高效的改进版本。希尔排序是基于插入排序的以下两点性质而提出改进方法的...【详细内容】
2022-07-08  Tags: 算法  点击:(14)  评论:(0)  加入收藏
描述为了保证第三方应用与API服务器之间通信的安全性,防止Secret Key盗用、数据篡改等恶意攻击行为,开放平台API 服务器使用签名机制,应用在调用开放平台API,需要计算出一个签...【详细内容】
2022-07-08  Tags: 算法  点击:(9)  评论:(0)  加入收藏
6. 蒙特卡洛算法6.1 计算&pi;" role="presentation" style="display: inline; font-style: normal; font-weight: normal; text-indent: 0px; text-align: left; text-trans...【详细内容】
2022-07-08  Tags: 算法  点击:(17)  评论:(0)  加入收藏
最近读了本好书-《深度学习推荐系统》,读完不觉全身通畅,于是就有了写这篇文章的想法,把自己的理解和总结分享给大家。 本文将按照从算法到工程的顺序,先介绍一下推荐系统整体...【详细内容】
2022-07-05  Tags: 算法  点击:(22)  评论:(0)  加入收藏
一、基础概念1、Sorted(单调递增or单调递减)2、Bounded(存在上下界)3、Accessible by index(能够通过索引访问,数组适合,but链表不适合)二分查找是一种在每次比较之后将查找空间一...【详细内容】
2022-07-04  Tags: 算法  点击:(14)  评论:(0)  加入收藏
分布式系统的模型为了更容易理解分布式系统,我们先来构建一个模型。 武当派因为人口增长变成 11 个办事处分散在地图各地; 办事处之间的通信只能依靠信鸽; 一只信鸽可能无法完...【详细内容】
2022-07-01  Tags: 算法  点击:(20)  评论:(0)  加入收藏
在本课程中, 您将 详细、逐步地解释经典的精选 LeetCode 问题 ,您将了解解决技术编码面试问题的最佳方法。 这是我在准备面试时希望参加的课程。课程英文名:LeetCode in Java A...【详细内容】
2022-06-30  Tags: 算法  点击:(19)  评论:(0)  加入收藏
▌简易百科推荐
背景对抗是反作弊永恒的主旋律,面对对抗我们需要做到快速响应、见招拆招、在变化中发现不变的本质。在反作弊场景中,黑产必须通过文本进行信息传递或触达受害者,而文本由于其生...【详细内容】
2022-07-14  字节跳动技术团队    Tags:算法   点击:(4)  评论:(0)  加入收藏
请实现一个函数用来匹配包含&#39;. &#39;和&#39;*&#39;的正则表达式。模式中的字符&#39;.&#39;表示任意一个字符,而&#39;*&#39;表示它前面的字符可以出现任意次(含0次)。在本题...【详细内容】
2022-07-13  做架构师不做框架师    Tags:正则表达式   点击:(6)  评论:(0)  加入收藏
高手:滑动窗口是一种比较常用的数据统计算法。简单来说,就是在一个大的数组上,定义一个固定长度的滑动窗口,然后这个窗口在数组上进行滑动。在窗口滑动的过程中,左边会出一个元素...【详细内容】
2022-07-13  跟着Mic学架构    Tags:算法   点击:(8)  评论:(0)  加入收藏
一、希尔排序介绍希尔排序这个名字,来源于它的发明者希尔,也称作“缩小增量排序”,是插入排序的一种更高效的改进版本。希尔排序是基于插入排序的以下两点性质而提出改进方法的...【详细内容】
2022-07-08  程序猿星球    Tags:希尔排序   点击:(14)  评论:(0)  加入收藏
描述为了保证第三方应用与API服务器之间通信的安全性,防止Secret Key盗用、数据篡改等恶意攻击行为,开放平台API 服务器使用签名机制,应用在调用开放平台API,需要计算出一个签...【详细内容】
2022-07-08  零一间    Tags:算法   点击:(9)  评论:(0)  加入收藏
6. 蒙特卡洛算法6.1 计算&pi;" role="presentation" style="display: inline; font-style: normal; font-weight: normal; text-indent: 0px; text-align: left; text-trans...【详细内容】
2022-07-08  海椰人  博客园  Tags:算法   点击:(17)  评论:(0)  加入收藏
数学统计在我们的程序当中特别是数据分析当中是必不可少的一部分,本文就来介绍一下 NumPy 常见的统计函数。最大值与最小值numpy.amin()用于计算数组中的元素沿指定轴的最小...【详细内容】
2022-07-07  VT漫步    Tags:统计函数   点击:(15)  评论:(0)  加入收藏
一、基础概念1、Sorted(单调递增or单调递减)2、Bounded(存在上下界)3、Accessible by index(能够通过索引访问,数组适合,but链表不适合)二分查找是一种在每次比较之后将查找空间一...【详细内容】
2022-07-04  程序猿星球    Tags:算法   点击:(14)  评论:(0)  加入收藏
分布式系统的模型为了更容易理解分布式系统,我们先来构建一个模型。 武当派因为人口增长变成 11 个办事处分散在地图各地; 办事处之间的通信只能依靠信鸽; 一只信鸽可能无法完...【详细内容】
2022-07-01  算法的秘密    Tags:共识算法   点击:(20)  评论:(0)  加入收藏
在本课程中, 您将 详细、逐步地解释经典的精选 LeetCode 问题 ,您将了解解决技术编码面试问题的最佳方法。 这是我在准备面试时希望参加的课程。课程英文名:LeetCode in Java A...【详细内容】
2022-06-30  IT教程精选    Tags:LeetCode   点击:(19)  评论:(0)  加入收藏
站内最新
站内热门
站内头条