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

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

算法:

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

.......

数据结构:

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

.......

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

内容要求

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

奖励

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

评选标准

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

评选结果 & 公示

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

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

云加社区云加社区

腾讯云 · 产品运营 (已认证)

修改于
IT小马哥

北京天谱同盛教育科技有限公司 · JAVA高级研发经理 (已认证)

想做个有钱人,却误入程序世界的一个小码农。回答于
推荐

2860元腾讯云代金券免费领取,付款直接抵现金,立即领取>>>

腾讯云服务器1折限时抢购,2核4G云主机698元/3年,立即抢购>>>

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

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

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

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

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

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

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

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

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

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

  • 时间换空间

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

  • 用空间换时间

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

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

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

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

回答过的其他问题

程序员过节指南:如何用代码做一个月饼?

IT小马哥

北京天谱同盛教育科技有限公司 · JAVA高级研发经理 (已认证)

想做个有钱人,却误入程序世界的一个小码农。

【有奖互动】你是哪个星球的人?

IT小马哥

北京天谱同盛教育科技有限公司 · JAVA高级研发经理 (已认证)

想做个有钱人,却误入程序世界的一个小码农。

【有奖互动】新年将至,如何过一个技术范的新年?

IT小马哥

北京天谱同盛教育科技有限公司 · JAVA高级研发经理 (已认证)

想做个有钱人,却误入程序世界的一个小码农。

花99元买的服务器后后面再怎么扩容?

IT小马哥

北京天谱同盛教育科技有限公司 · JAVA高级研发经理 (已认证)

想做个有钱人,却误入程序世界的一个小码农。

2020-01-27:如何把文件从服务器复制到本地,用什么命令?

IT小马哥

北京天谱同盛教育科技有限公司 · JAVA高级研发经理 (已认证)

想做个有钱人,却误入程序世界的一个小码农。

哪位高手知道需您在您的已备案网站下添加对应的备案号,并超链接工信部官网?

IT小马哥

北京天谱同盛教育科技有限公司 · JAVA高级研发经理 (已认证)

想做个有钱人,却误入程序世界的一个小码农。

关于作者

IT小马哥

北京天谱同盛教育科技有限公司 · JAVA高级研发经理 (已认证)

北京天谱同盛教育科技有限公司 JAVA高级研发经理

扫码关注云+社区

领取腾讯云代金券


http://www.vxiaotou.com