什么是算法?如何学习算法?算法入门的学习路径

何为算法

简单的说,算法就是:解决问题的手段,并且是批量化解决问题的手段。

比如,我们想要从成都去北京,起点就是成都,终点就是北京。如何去?我们就可以称为算法。

因此选择不同的算法,那么虽然终点都是一样,但是性能以及效率就根据算法的优劣而决定的。因此,我们需要选择最优的算法,来实现我们的问题需求,来解决生活中的一些实际问题。那我们该如何进行算法的学习呢?

 

 

如何学习算法

算法的学习,可以根据自身的生活经验逐步积累,也可以通过有效的训练来逐步提高我们解决问题的能力,同时也是提升我们的逻辑思维能力。因此,我整理了如下图中所示的一个算法学习思维导图。来提升我们研发工程师的算法能力。

什么是算法?如何学习算法?算法入门的学习路径_第1张图片

 

在上图中,罗列了我们研发工程师常用的一些解决算法问题的思路,可以根据自己的能力有针对性的去学习,最终我们要达到的目的就是,给出一个问题,我们能够用多种方案来解决问题,并能够分析出每一种解决方案的优缺点即可超越90%以上的研发工程师。

算法的四个基本特征

根据《全国计算机等级考试二级教程——公共基础知识(2019年版)》的书中描述有如下4个基本特征

  1. 可行性(Effectiveness)
  2. 确定性(Definiteness)
  3. 有穷性(Finiteness)
  4. 拥有足够的情报

什么是算法?如何学习算法?算法入门的学习路径_第2张图片

 

所谓算法,是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的,且是明确的,此顺序将在有限的次数下终止。

算法学好的优势

首先,学会了算法后,你的逻辑所谓能力得到了加强,可以解决我们生活中的很多的问题。

其次,作为一个研发工程师,在跳槽的时候很多公司都有算法面试题,学好了算法,就离你心仪的公司跟近一步,不会导致因为不会算法而被拒之门外。

另外在5G大数据时代,处理数据也需要用到大量的算法。还有就是AI,比如常用算法来训练模型。通过合适的算法得到我们想要的数据模型,从而来实现AI的自动学习能力。

如何选择算法

算法既然有上面那么多种,还有很多没有罗列出来,所以需要我们有计划的学习每一种算法。然后根据习题来巩固学习的算法,将所学的内容融入到实际问题中,尝试多种算法来解决问题,理解每一种算法优势,劣势。当你掌握了方法之后,其实你会发现生活中很多事情都可以使用不同的算法来解决。

需要这些资料的,下方扫码添加小助手获取

什么是算法?如何学习算法?算法入门的学习路径_第3张图片

记住算法最重要的三点。算法没有万能的,算法没有高低,算法只有合适的

什么是算法?如何学习算法?算法入门的学习路径_第4张图片

 

算力

上面说到,5G时代已经到来。移动设备数据传输量更快,更多,因此我们的服务处理数据的能力也需要相对的加强。处理数据的能力我们可以用一个人工智能中常用的词语,算力。

那什么是算力呢?在我们的电脑中,CPU就提供了算力帮助电脑快速运行。玩游戏的时候需要显卡提供算力,绘制图表的时候帮助电脑快速处理图形。而在 人工智能中,需要有类似CPU和GPU的硬件来提供算力,帮助算法快速运算出结果。比如一个企业的流水线工厂,需要制作一批材料。那么企业的流水线就相当于算法,而流水线中的机器,人力就相当于算力。机器越好越先进,人力越多越优秀,那么产品生产的速度就越快,换言之就是算力越大,速度越快

什么是算法?如何学习算法?算法入门的学习路径_第5张图片

 

结语

算法的学习不是一蹴而就的,因此需要我们不断的积累,不断的理解算法的原理。而不是死记硬背某些特定的算法题。要能够达到看到一个算法题,不仅仅能用算法将其做出来,还要能够自己通过算法题本身去推导更多题型。

最后,给大家分享一份算法刷题资料

整个刷题实录内容,包括 双子针、动态规划、二分查找、贪心算法、深度优先搜索、字符串、递归、字典树、排序、链表等相关专题内容。图文并茂,附有刷题答案源码。

第一部分必读系列:

  • 学习算法和刷题的思路指南
  • 学习数据结构和算法读什么书
  • 动态规划解题套路框架
  • 动态规划答疑篇

 

  • 动态规划答疑篇
  • 回溯算法解题套路框架
  • 二分查找解题套路框架
  • 滑动窗口解题套路框架

 

  • 双指针技巧总结
  • BFS算法套路框架
  • Linux的进程、线程、文件描述符是什么
  • Git/SQL/正则表达式的在线练习平台什么是算法?如何学习算法?算法入门的学习路径_第6张图片

 

第二部分动态规划系列:

  • 动态规划设计:最长递增子序列
  • 经典动态规划:0-1 背包问题
  • 经典动态规划:完全背包问题
  • 经典动态规划:子集背包问题

 

  • 经典动态规划:编辑距离
  • 经典动态规划:高楼扔鸡蛋
  • 经典动态规划:高楼扔鸡蛋(进阶)
  • 经典动态规划:最长公共子序列
  • 动态规划之子序列问题解题模板

 

  • 动态规划之博弈问题
  • 动态规划之正则表达
  • 动态规划之四键键盘
  • 动态规划之KMP字符匹配算法

 

  • 贪心算法之区间调度问题
  • 团灭 LeetCode 股票买卖问题
  • 团灭 LeetCode 股票买卖问题什么是算法?如何学习算法?算法入门的学习路径_第7张图片

 

第三部分数据结构系列

  • 算法学习之路
  • 二叉堆详解实现优先级队列
  • LRU算法详解

 

  • LRU算法详解
  • 二叉搜索树操作集锦
  • 如何计算完全二叉树的节点数
  • 特殊数据结构:单调栈

 

  • 特殊数据结构:单调队列
  • 设计Twitter
  • 递归反转链表的一部分
  • 队列实现栈|栈实现队列什么是算法?如何学习算法?算法入门的学习路径_第8张图片

 

第四部分算法思维系列:

  • 回溯算法团灭子集、排列、组合问题
  • 回溯算法最佳实践:解数独
  • 回溯算法最佳实践:括号生成

 

  • 滑动窗口技巧
  • twoSum问题的核心思想
  • 常用的位操作
  • 拆解复杂问题:实现计算器

 

  • 烧饼排序
  • 前缀和技巧
  • 字符串乘法

 

  • FloodFill算法详解及应用
  • 区间调度之区间合并问题
  • 区间调度之区间交集问题

 

  • 信封嵌套问题
  • 几个反直觉的概率问题
  • 洗牌算法
  • 递归详解什么是算法?如何学习算法?算法入门的学习路径_第9张图片

 

第五部分高频面试系列

  • 如何高效寻找素数
  • 如何高效进行模幂运算
  • 如何运用二分查找算法
  • 如何高效解决接雨水问题

 

  • 如何去除有序数组的重复元素
  • 如何寻找最长回文子串

 

  • 如何运用贪心思想玩跳跃游戏
  • 如何k个一组反转链表
  • 如何判定括号合法性

 

  • 如何寻找缺失的元素
  • 如何同时寻找缺失和重复的元素
  • 如何判断回文链表

 

  • 如何在无限序列中随机抽取元素
  • 如何调度考生的座位
  • Union-Find算法详解

 

  • Union-Find算法应用
  • 一行代码就能解决的算法题
  • 二分查找高效判定子序列什么是算法?如何学习算法?算法入门的学习路径_第10张图片

 

 

 

 

你可能感兴趣的:(Java,架构,面试,算法,java,编程语言,人工智能,大数据)