什么是算法?怎样可以学好算法?

本文介绍了算法的基本概念,从历史上的算法应用到现代计算机领域的算法,强调基础算法如搜索、排序、图算法等的重要性。作者建议程序员通过学习书籍、在线平台如LeetCode和VisualGo提升算法能力,并参与面试实践。
摘要由CSDN通过智能技术生成

大家好,我是程序员小灰。

在过去,小灰一直在公众号上分享各种各样的算法漫画,今天我们来从全局视角讲一讲,究竟什么是算法。

什么是算法呢?

所谓算法,就是解决问题的一系列方法。

算法并不是一个新鲜的概念,从我们老祖宗生活的时代,人们就一直在发明和应用各种各样的算法。比如南北朝时期的著名数学家祖冲之,利用割圆术近似求解出了圆周率。

299decd467db7630b09f093fabb2ac4a.png

再比如古希腊数学家泰勒斯,利用相似三角形的原理推算出了埃及胡夫金字塔的高度。

3b302b47c0ac3e4fd320486bae26e647.png

祖冲之和泰勒斯,都是算法的创造者。

到了现代,随着电子计算机的发明,人们对算法的研究就更加深入了。

在计算机领域,算法的本质是一系列程序指令,用于解决特定的运算和逻辑问题。

按照专业程度来划分,算法可以分为基础算法和专业领域算法。

所谓专业领域算法,也就是服务于特定领域的算法,比如谷歌的阿尔法狗战胜了人类围棋冠军,背后是人工智能算法;在一些游戏当中,我们能够看到非常酷炫的3D效果,背后是3D图形渲染算法。

上面说的这些都是专业领域算法,由相应的算法工程师来研究和开发。

作为一名普通程序员,这些专业算法只需要有一定的了解即可,我们真正需要学好的是基础算法。=

基础算法包含哪些种类呢?

1.搜索算法

c26dd34911cd4d6404a65f52981c88c3.png

搜索算法用于从数据结构中找出特定的数据。这类算法有很多种,如深度优先搜索(DFS)广度优先搜索(BFS)二分查找算法等。

2.排序算法

25fe497595968994e1607a8afc922a55.png

排序算法用于将一组数据按照特定的顺序进行排列。常见的排序算法有冒泡排序选择排序插入排序快速排序归并排序堆排序等。

3.图算法

7f7b81b44c8c9ee922e0e0b906e013bf.png

图算法用于处理图形数据结构的问题,例如寻找最短路径,检查图的连通性等。常见的图算法有Dijkstra算法Floyd算法最小生成树算法等等。

4.动态规划算法

c34e11391452a2ae31aa63646c922784.png

动态规划算法通过将问题分解为子问题,然后将子问题的解组合起来,以获得原问题的解。它通常用于求解具有重叠子问题和最优子结构特性的问题,例如背包问题,最长公共子序列等。

5.分治算法

a200695c76b9919917f2e8bf333ff368.png

分治算法通过将问题分解为几个小问题,然后逐个解决小问题,最后合并这些小问题的解以得到原问题的解。常见的分治算法如快速排序归并排序大整数乘法等。

6.贪心算法

9ce8cbf5ab5a1b882c54a90c9d52302e.png

贪心算法在每个决策点都采取当前看来最好的选择,希望通过这种方式得到问题的最优解。例如霍夫曼编码就是利用了贪心算法

7.回溯算法

580ca3b95b3fcd709068e7784e295d2a.png

回溯算法通过试错的方式搜索问题的可能解,当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。常见的如八皇后问题,数独问题等。

可能有人要问了,我只要安心写好项目代码不就完了吗?为什么非要学习这些个算法呢?

如果你甘心在一家小公司,做简单的增删改查操作,每个月拿几千上万的工资,那没有问题。但如果你想要成为一名真正优秀的程序员,那你还是要好好学习算法。

因为算法是程序员的内功,虽然我们很少需要直接去实现某些算法,但我们要知道自己调用的类库、接口的底层算法实现是怎样的,从而做出更好的选择,写出更高效的代码。

说完了算法的基本概念,我们再来说一说程序员怎么提升自己的算法能力呢?

我们需要从基础和实战两个方向进行提升。

要学习基础,我们可以通过看书,看网上的视频课程,来了解各种常用的算法和数据结构原理。对于想要入门算法的朋友,推荐看看小灰自己出版的图书,《漫画算法》系列。

71803c562247fe4ab51f0bac2194a325.png

想要进阶的朋友,可以看看《算法4》《算法导论》这两本书。

5b447c836a4e4e064eb48a14172f2220.png

要提升实战能力,大家可以上LeetCode这个网站,有大量的算法题目可以去刷。网站当中的题目分为简单、中等、困难三个等级,大家可以根据自己的水平来进行选择。

cae4e7f573fa2e0955b1217ef80ef580.png

除此之外,还有一个网站可以让我们以可视化的方式学习算法和数据结构,这个网站叫做VisualGo。在这个网站里,我们可以看到各种数据结构和算法运行过程的动态演示,非常形象生动。

75319390aadfaf17f2ab668228b0aa78.png

再有一个提升方法,就是找时间多去其他公司面试,面试非常锻炼一个人的临场发挥能力。不过,如果大家是在职状态的话,一定不要请假过于频繁,不然你怕是连现在的功能都保不住了。

好了,关于算法的基本概念,以及提升算法能力的途径,我就为大家介绍到这里。

在下一篇分享当中,我将会为大家讲解什么是数据结构,敬请期待。

我是程序员小灰,欢迎大家的点赞和关注,感谢大家!

喜欢看视频版本分享的小伙伴,也可以关注这里:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值