前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是算法?怎样可以学好算法?

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

作者头像
小灰
发布2023-09-02 08:54:00
2680
发布2023-09-02 08:54:00
举报
文章被收录于专栏:程序员小灰

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

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

什么是算法呢?

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

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

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

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

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

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

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

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

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

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

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

1.搜索算法

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

2.排序算法

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

3.图算法

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

4.动态规划算法

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

5.分治算法

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

6.贪心算法

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

7.回溯算法

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

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

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

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

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

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

要学习基础,我们可以通过看书,看网上的视频课程,来了解各种常用的算法和数据结构原理。

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小灰 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档