小白的算法课-方法论



为什么要重视算法

面试毕竟历程

其实这是个伪命题,如果为了面试,大家去背一下特定的几个算法答案就好了

提高逻辑思维,理解能力

提高代码质量

 

为什么说算法是程序员最应该学习的技能,没有之一

为什么这么说呢?可以思考一下

学框架其实就是学怎么更好的用人家封装好的api

看源码,就是看人家怎么实现的这个组件,学习人家的设计思维。

但真的是这样吗?但其实大多数情况都是为了应付面试,然后实际学习场景大家都是看看别人的博客,看看讲解视频,然后随便扒扒源码

综上所述其实,无论学习新框架还是看源码,更多的考验的是记忆力,与略微的理解能力

 

思考一下,为什么面试都要考算法?

其实我们都在逃避,相比于算法,其他的能力确实相对于来说比较容易掌握

程序员更重要的就是逻辑能力,服务端更甚

优秀的软件工程师必须具备过硬的代码开发能力,而这就体现在你对数据结构、算法思维、代码效率优化等知识的储备上,并直接反应在你工作中解决实际问题的好坏上。

能力分布表

  逻辑能力 理解能力 记忆力
算法   60%   30%   10%  
新框架,新知识   10%   20%   70%  
源码探索   20%   30%   50%  
               

 

为什么说算法会提高代码质量

举个简单的例子

在海量数据中查询指定数据,粗笨的方法就是循环便利一边找到对应的就好了,

如何用算法来解决?  

有序存储

二分查找

收益:数据量小的时候可能没什么明显收益,但假如我们数据量达到了1000w,两种查找方法的效率可能就是1000万次和24次的区别了(log2 10000000 = 23.25)

 

代码质量如何一步步提高

暴力解法

在没有任何时间、空间约束下,完成代码任务的开发。

剔除无效操作处理

将代码中的无效计算、无效存储剔除,降低时间或空间复杂度。

时空转换

设计合理数据结构,完成时间复杂度向空间复杂度的转移。

逻辑归纳

利用逻辑关系,完成时间复杂度和空间复杂度的降低

 

eg1:

假设有任意多张面额为 2 元、3 元、7 元的货币,现要用它们凑出 100 元,求总共有多少种可能性

暴力解法

public void s1_1() { int count = 0; for (int i = 0; i <= (100 / 7); i++) { for (int j = 0; j <= (100 / 3); j++) { for (int k = 0; k <= (100 / 2); k++) { if (i * 7 + j * 3 + k * 2 == 100) { count += 1; } } } } System.out.println(count); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydsfs.html