原文出处:http://www.cricode.com/3208.html

在Quora上看到一个问题:工程实践当中,最常用的算法和数据结构有哪些?

以下是Google工程师Arjun Nayini给出的答案,得到了绝大多数人的赞同。

最常用的算法

1.图搜索算法(BFS,DFS)。

2.排序算法

3.通用的动态规划算法

4.匹配算法和网络流算法

5.正则表达式和字符串匹配算法

最常用的数据结构

1.图,尤其是树结构特别重要。

2.Maps结构

3.Heap结构

4.Stacks/Queues结构

5.Trie

其他一些相对比较常用的数据算法还有:贪心算法、Prim’s / Kruskal’s算法、Dijkstra’s最短路径算法等等。

在学习了解这些数据结构和算法之前,引用一位前辈的话:

“我们不需要你在不参考任何资料,能够实现红黑树;我们需要的是你能在实践当中,选择恰当的数据结构完成程序开发;在必要的时候,能在已有的数据结构基础上进行适当改进,满足工程需要。但要做到这一点,你需要掌握基础的算法和数据结构,你需要理解并应用一些高级数据结构和算法的思想。因此,在程序员这条道路上,你要想走得更远,你需要活用各种数据结构,你需要吸收知名算法的一些思想,而不是死记硬背算法本身。”

关于这段话,这里举几个栗子。

1)什么叫做理解算法了思想?

这里是一篇很好的例子:说一说程序员“举一反三”的能力

2)怎么样才能活用各种数据结构?

你能很清楚的知道什么时候用hash表,什么时候用堆或者红黑色?在什么应用场景下,能用红黑色来代替hash表么?要做到这些,你需要理解红黑树、堆、hash表各有什么特性,彼此优缺点等,否则你不可能知道什么时候该用什么数据结构。

常言道:

程序 = 算法 + 数据结构

程序 ≈ 数据结构

If you want to become a good programmer, you can spend 10 years programming, or spend 2 years programming and learning algorithms.——大师说

因此,算法+数据结构的重要性就无需多讲了。

工程实践中最常用的10大数据结构与算法讲解相关推荐

  1. 不容错过,数据分析中最常用的10大Python库

    学习数据分析绝非易事,有无数种工具和资源可供使用.因此,有时会让我们很难弄清楚该学习什么技能,该使用哪种工具. 在本文中,我们就来给大家介绍一下数据分析中最常用的10个Python库.看看这些库你都用 ...

  2. 一致性协议raft详解(四):raft在工程实践中的优化

    一致性协议raft详解(四):raft在工程实践中的优化 前言 性能优化 client对raft集群的读写 参考链接 前言 有关一致性协议的资料网上有很多,当然错误也有很多.笔者在学习的过程中走了不少 ...

  3. 编程面试过程中最常见的10大算法

    编程面试过程中最常见的10大算法 编程语言:C/C++ 1. 字符串 如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法. toCharArray() // 获得字符串对应的char数组 A ...

  4. 【转】Web 设计中最常用的 10 种色调以及它们的示例

    文章转载自:开源中国社区 [http://www.oschina.net ] 本文标题:Web 设计中最常用的 10 种色调以及它们的示例 本文地址:http://www.oschina.net/ne ...

  5. 希尔排序的详细过程_算法系列: 10大常见排序算法(4)希尔排序

    本课程是从少年编程网转载的课程,目标是向中学生详细介绍计算机比赛涉及的编程语言,数据结构和算法.编程学习最好使用计算机,请登陆 www.3dian14.org (免费注册,免费学习). 一句 希尔排序 ...

  6. c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)

    原标题:10 大经典排序算法(动图演示+ C 语言代码) 来源:C语言与CPP编程 以前也零零碎碎发过一些排序算法,但排版都不太好,又重新整理一次,排序算法是数据结构的重要部分,系统地学习很有必要. ...

  7. 算法大总结之----10大经典排序算法(从小到大排列)

    目录 1. 冒泡排序 1.1. 算法讲解 1.2. 代码实现 2. 选择排序 2.1. 算法讲解 2.2. 代码实现 3 插入排序 2.1. 算法讲解 2.2. 代码实现 4 希尔排序 2.1. 算法 ...

  8. 轻大数据结构与算法实训在线餐馆预订管理系统

    使用c++语言,用了两天实现所有功能,等写完报告后,整理一下遇到的问题和解决办法. 一共620行代码 任务书要求使用中文作为key,建立散列表,但是使用c++很难把中文转unicode编码,我找到的代 ...

  9. 关于概率分布理论的原理分析的一些讨论,以及经典概率分布的应用场景,以及概率统计其在工程实践中的应用...

    1. 随机变量定义 0x1:为什么要引入随机变量这个数学概念 在早期的古典概率理论研究中,人们基于随机试验的样本空间去研究随机事件,也发展出了非常多辉煌的理论,包括著名的贝叶斯估计在内. 但是随着研究 ...

  10. 面试最常考、最常用的10大机器学习算法

    在机器学习领域,有种说法叫做"世上没有免费的午餐",简而言之,它是指没有任何一种算法能在每个问题上都能有最好的效果,这个理论在监督学习方面体现得尤为重要. 举个例子来说,你不能说神 ...

最新文章

  1. 2星|《快公司》2018年2-3期:商业人物访谈集
  2. 一文看完吴恩达最新演讲精髓,人工智能部署的三大挑战及解决方案
  3. linux cpu平均利用率st,理解 CPU 利用率
  4. KeDelayExecutionThread使用注意
  5. Ubuntu14.04 YouCompleteMe Configure
  6. java try catch_Java捕获异常
  7. python with关键字_完全理解Python关键字with与上下文管理器
  8. Javascript提升阶段学习
  9. WebView控件中的javascript与Android本地功能交互
  10. 在c语言中 char型数据在内存中的存储形式是,在c语言中char型数据在内存中的存储形式是什么?...
  11. ui界面设计基本原则
  12. 软件授权解决方案FlexNet Publisher
  13. python结合conda安装ifcopenshell报错Preparing transaction: failed的解决办法
  14. Abaqus 固定云图标尺
  15. 八数码问题的A*算法
  16. python多线程爬取段子_Python爬虫实战之一秒爬取内涵段子
  17. 荣耀Play6T配置怎么样 荣耀Play6T值得买吗
  18. 【Python简明教程二十八】PIP
  19. ASP.NET+SQL网上校友录设计与实现
  20. 如何在复古PPT模板内插入图片

热门文章

  1. php 判断访问是否是手机或者pc
  2. 项目中用到的一些特殊字符和图标
  3. LeetCode(26): 删除排序数组中的重复项
  4. 【iCore4 双核心板_FPGA】例程一:GPIO输出实验——点亮LED
  5. spring cloud报错解决:java.lang.ClassNotFoundException: com.netflix.servo.monitor.Monitors
  6. Shell之根据关键字符串替换文件中的行
  7. 团队项目-个人博客-4.27
  8. 第一篇:一个win32控制台程序
  9. 在Sohu的最后一个作品-2011版大视野
  10. 《鬼谷子》决篇第十一(翻译)