Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >作为人类高质量程序员,必须掌握哪些算法?

作为人类高质量程序员,必须掌握哪些算法?

提问于 2021-09-07 08:28:50
回答 36关注 8查看 5.1K

数据结构、算法、计算机原理是编程和实践的根基,看似枯燥和基础,却具有最长久的生命力。

作为人类高质量程序员,写代码精髓就是领略数学之美

算法:

  • 排序算法:快速排序、归并排序、计数排序
  • 搜索算法:回溯、递归、剪枝
  • 图论:最短路径、最小生成树、网络流建模

.......

数据结构:

  • 数组和链表
  • 栈与队列
  • 树和图

.......

作为程序员的你,认为编程必须掌握哪些算法?快来分享你的见解吧!

内容要求

● 围绕算法,发表见解 50 字以上(需原创,禁止转载)

奖励

回答赞同数 TOP10 的用户将有机会获得精美定制小礼品一份

评选标准

  • 回答需符合活动中所提及的要求,符合社区规范
  • 请遵守社区规范,如有违规行为,一经发现即取消参与资格

评选结果 & 公示

腾讯云开发者社区小助手 9 月 10 日在获奖评论下通知答主,奖品将于30日内发放

更多精彩问答与定制好礼,尽请关注 【云+有奖问答专题】 \( ̄▽ ̄)/

已邀请
等2人回答

IT小马哥

精选回答

发布于 2021-09-04 06:59:03

程序 = 数据结构 + 算法 。数据是程序的中心。数据结构和算法两个概念间的逻辑关系贯穿了整个程序世界,首先二者表现为不可分割的关系。没有数据间的有机关系,程序根本无法设计。换言之数据结构是底层,算法就是高层。数据结构为算法提供服务。算法围绕数据结构操作。可以说没有算法的程序是没有灵魂的。

数据接口一般分为线性数据结构和非线性数据结构

  • 线性数据结构:常见的有一维数组,线性表,栈,队列,双队列,串。
  • 非线性数据结构:常见的有:多维数组,集合,树,图,散列表(hash).

大家知道了数据结构,还必须要掌握一些常见的基本算法。

理解算法之前必须要先理解的几个算法的概念:

  • 空间复杂度:一句来理解就是,此算法在规模为n的情况下额外消耗的储存空间。
  • 时间复杂度:一句来理解就是,此算法在规模为n的情况下,一个算法中的语句执行次数称为语句频度或时间频度。
  • 稳定性:主要是来描述算法,每次执行完,得到的结果都是一样的,但是可以不同的顺序输入,可能消耗的时间复杂度和空间复杂度不一样。

一般常见的算法有二分查找算法,递归算法,还有八大排序算法直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,基数排序基数排序

一个程序员算法能力如何可以能够准确辨别一个程序员的技术功底是否扎实,可以判断出 学习能力与成长潜力和分析并解决问题的能力如何。这也是为什么面试官都喜欢问一些算法和数据结构的原因。

其实算法没有好与坏只有适合自己业务的算法才是最优算法,深入了解每个算法的特性 和自己的业务适配起来

举个例子一些算法的最后往往是一个时空转换的问题

  • 时间换空间

用时间换空间的策略,出发点是内存和存储这样的“空间”资源,有时会成为最稀缺的资源,所以需要尽量减少占用的空间。比如,一个系统的最大性能瓶颈如果是内存使用量,那么减少内存的使用就是最重要的性能优化。

  • 用空间换时间

“用空间换时间”就是对“用时间换空间”策略反其道而行之。有些场景下,时间和速度更加重要,但是空间尚有富余,这时我们就可以考虑用空间来换时间。

其实我们部署的任何大规模系统,都或多或少地采用了用空间换时间的策略,比如在集群和服务器间进行负载均衡,就是同时用很多个服务器(空间)来换取延迟的减少(时间)。

优化策略中的最后一个大类就是“更先进算法和数据结构”。这两个策略是紧密配合的,比如先进的算法有时候会需要先进的数据结构;而且它们往往和程序的设计代码直接相关,所以放在一起。同一个问题,肯定会有不同的算法实现,进而就会有不同的性能。比如各种排序算法,就是各有千秋。有的实现可能是时间换空间,有的实现可能是空间换时间,那么就需要根据你自己的实际情况做权衡。

对每一种具体的场景,总会有一种算法是最适合的。我们需要考虑实际情况,来选择这一最优的算法。

查看全部 36 条回答
相关文章
程序员必须掌握哪些算法和数据结构?
以下 5 个步骤总结了此方法,依次为如下,我们设计的实验必须是可以重现的,我们形成的假设必须是具有真伪的。
CSDN技术头条
2019/08/06
4500
程序员必须掌握哪些算法和数据结构?
程序员必须掌握的算法
作为程序员,掌握一些基本的算法是非常重要的,因为它们可以帮助你更高效地解决编程问题。以下是一些程序员必须掌握的基本算法:
楠羽
2023/10/17
2090
程序员必须掌握的算法有哪些?谈谈这这几年学过的算法
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过不错的文章给大家。大家也可以留言区补充。
帅地
2019/10/23
3.6K0
程序员必须掌握的算法有哪些?谈谈这这几年学过的算法
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过不错的文章给大家。大家也可以留言区补充。
乔戈里
2019/10/28
6360
程序员必须掌握哪些算法?算法与数据结构文章详细分类与整理!
为了让你对数据结构和算法能有个全面的认识,我画了一张图,里面几乎涵盖了所有数据结构和算法书籍中都会讲到的知识点。
五分钟学算法
2019/12/06
5850
Java程序员必须掌握的核心技能有哪些?
私下里,经常有一些读者问我:“二哥,作为一名软件开发者,我应该掌握哪些技能,才能被领导赏识呢?”说实话,我心目中很多选项,不少于 20 个,但我斟酌再三,只挑选了其中最能让你受益的 8 个,不仅能让领导赏识你,还能让领导给你升职加薪。
马士兵的朋友圈
2020/09/18
6300
作为程序员,必须知道的 Web 协议有哪些?
你会发现,这些问题其实都和 Web 协议密切相关。我常常听到身边人抱怨“学不动了”,之所以会这样,大多是因为没有掌握好互联网体系中的底层知识。这些知识点相对稳定,而其他时刻变化的知识点是构建在这些知识点之上的。一旦掌握好,就可以长久使用,并且保持快速学习的能力。
程序员历小冰
2019/05/14
3K0
作为程序员,必须知道的 Web 协议有哪些?
你会发现,这些问题其实都和 Web 协议密切相关。我常常听到身边人抱怨“学不动了”,之所以会这样,大多是因为没有掌握好互联网体系中的底层知识。这些知识点相对稳定,而其他时刻变化的知识点是构建在这些知识点之上的。一旦掌握好,就可以长久使用,并且保持快速学习的能力。
java思维导图
2019/05/14
4770
程序员那些必须掌握的排序算法(上)
现在的IT行业并不像以前那么好混了,从业人员过多,导致初级程序员过剩,这也间接导致了公司的招聘门槛越来越高,要求程序员掌握的知识也越来越多。 算法也是一个争论了很久的话题,程序员到底该不该掌握算法?不同的人有不同的答案,而事实上,很多公司都对算法有一定的要求,有些公司直接在面试的时候便会要求面试者手写算法题。这就对程序员的技术要求产生了很大的考验,所以面对如今的大环境,我们必须掌握算法,才能在今后的工作中占据一席之地。 那么接下来,我就简单介绍一下几个排序算法,希望对你们有所帮助。
wangweijun
2020/02/14
4540
程序员那些必须掌握的排序算法(下)
快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 演示:
wangweijun
2020/02/14
4130
程序员必须掌握的8大排序算法
分类: 1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排序(基数排序) sort.jpg 一、直接插入排序 (
海天一树
2018/04/17
9560
程序员必须掌握的8大排序算法
云原生时代,程序员应该掌握哪些能力?
云原生可以说是目前最火热的一个技术概念,它改变了我们对开发、部署和操作应用程序的思考方式。
Guide哥
2023/01/11
1.1K0
Java常用排序算法/程序员必须掌握的8大排序算法
1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排序(基数排序)
哲洛不闹
2018/09/19
5980
Java常用排序算法/程序员必须掌握的8大排序算法
程序员算法面试中,必须掌握的数组理论知识
数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力
代码随想录
2020/06/12
3830
程序员必须要掌握的十大经典算法
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。
程序员互动联盟
2018/03/15
6.9K0
程序员必须要掌握的十大经典算法
对话 Max Tegmark:掌控权必须掌握在人类手中
8月26日,集智俱乐部与腾讯研究院共同举办“AIS²系列学术报告和研讨活动”沙龙,共同提出AIS²倡议,意指AI+Society与AI+Science这两大如火如荼的前沿领域,并预言人工智能即将在跨学科研究中形成的集体涌现。
小腾资讯君
2023/09/05
2530
前端面试哪些是必须要掌握的
Cookie是最早被提出来的本地存储方式,在此之前,服务端是无法判断网络中的两个请求是否是同一用户发起的,为解决这个问题,Cookie就出现了。Cookie的大小只有4kb,它是一种纯文本文件,每次发起HTTP请求都会携带Cookie。
loveX001
2022/09/23
7670
JVM垃圾回收之垃圾收集算法,程序员必须掌握的知识
解释下,堆大小=新生代+老年代,新生代与老年代的比例为1:2,新生代细分为一块较大的Eden空间和两块较小的Survivor空间,分别被命名为from和to。
黎明大大
2020/09/08
4350
JVM垃圾回收之垃圾收集算法,程序员必须掌握的知识
作为一个程序员一定要掌握的算法之遗传算法
        一个程序员一生中可能会邂逅各种各样的算法,但总有那么几种,是作为一个程序员一定会遇见且大概率需要掌握的算法。今天就来聊聊这些十分重要的“必抓!”算法吧~,就比如说遗传算法啊
会洗碗的CV工程师
2023/10/14
6290
作为一个程序员一定要掌握的算法之遗传算法
学点程序员必须掌握的Linux知识
本文关于学习Linux的目的并不是让读者如运维人员那样去精通Linux,而是掌握一些java开发工程师所具备的Linux操作技能。因为很多java程序员在公司负责一个项目的过程中总是避免不了将项目打包后部署到Linux服务器,这时如果你不懂一点与项目部署相关的Linux命令,那你大概只会被你的老板当成一名初级程序员。
用户3587585
2022/09/21
6670
学点程序员必须掌握的Linux知识

相似问题

【有奖问答】 作为程序员,2023年有哪些高光时刻?(已完结)

383.7K

机器学习有哪些算法?

1432

【有奖问答】程序员有哪些浪漫行为?(已完结)

22847

【有奖问答】程序员有哪些行业黑话?(已完结)

251.7K

【有奖问答】程序员有哪些好物分享?(已完结)

16858
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
相关问答用户
到家集团 | 技术VP擅长5个领域
新浪微博 | 高级总监擅长4个领域
《用ChatGPT做软件测试》 | 作者擅长5个领域
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档