第一章:为什么要学习数据结构和算法?(译)

175 阅读4分钟

对数据结构的研究是一个效率研究的问题。给定一个特定的数据量,什么是实现特定目标的最佳存储方式?

作为一个程序员,你经常使用各种集合类型,如 lists、maps 和 sets。这些是保存数据集合的数据结构,每个结构都有自己的性能特点。例如,考虑一下 list 和 set 之间的区别。两者都是为了保存元素的集合,但在 list 中搜索一个元素要比在 set 中搜索一个元素花费的时间长得多。另一方面,你可以对一个 list 中的元素排序,但不能对 set 中的元素排序。

数据结构是一门精心研究的学科,其概念与语言无关。C语言中的数据结构在功能和概念上与任何其他语言(如Dart)中的数据结构是相同。同时,Dart 的高层次表达能力使它成为学习这些核心概念的理想选择,而不会牺牲太多的性能。

另一方面,算法是完成一项任务的一组操作。这可以是可以是一个排序算法,将数据移来移去,使其排列有序。或者它可以是一个算法,将一张8K的图片压缩到一个可管理的大小。算法对于软件来说是必不可少的,许多算法被创造出来,作为有用的程序的基石。那么,你为什么要学习数据结构和算法呢?

面试

保持你的算法技能符合标准的一个重要原因是为面试做准备。大多数公司至少有一到两个算法问题来测试 你作为一个工程师的能力。数据结构和算法方面的坚实基础是许多软件工程职位的 "门槛"。

工作

在处理大量数据时,使用适当的数据结构是至关重要的,而且使用正确的算法对软件的性能和可扩展性起着重要作用。

你的移动应用程序会有更好的响应,并且有更好的电池寿命。你的服务器应用程序将能够处理更多的并发请求并使用更少的能源。算法通常包括正确性的证明,你可以利用这些证明来构建更好的软件。使用正确的数据结构也有助于向读者提供背景。举个例子,你可能在你的代码库中遇到一个Set。马上,你就可以推断出:

  • Set 的消费者并不关心元素的顺序,因为 Set 是一个无序的集合。
  • Set 还确保没有重复的值。你可以假设消费者是在处理唯一的数据。
  • Set 非常适用于检查值的归属,所以工程师很可能是为了这个目的而引入它就是为了这个目的。 熟悉数据结构可以让你从代码中提取额外的上下文。这是一项强大的技能,可以帮助你了解一个软件是如何工作的。

自我提升

了解算法用于解决棘手问题的策略,可以为你提供改进代码的思路。Dart 核心库有一套小的通用的集合类型;它们并没有涵盖所有的情况。然而,正如你将看到,这些基元可以作为一个很好的起点,用于构建更复杂和特殊用途的抽象。 了解更多的数据结构,而不仅仅是常见的数据结构,使你有更广泛的工具可以用来构建你的应用程序。

本书的目标

本书既是一本参考书又是一本练习册。如果你熟悉的其他书籍,你会有宾至如归的感觉。大多数章节会在结尾处包括一些挑战。这些挑战的解决方案出现在这些挑战的解决方案出现在书末的 "挑战解决方案 "部分。帮助自己,认真尝试解决每个挑战,然后再偷看解决方案。 本书有五个内容部分,每个部分涵盖一个特定的主题。

  1. 简介
  2. 初级数据结构
  3. 排序算法
  4. 图形 最好按照时间顺序来阅读本书,但如果你有一些先前的知识,它也可以作为参考。如果你是研究算法和数据结构的新手,你可能会发现一些素材具有挑战性。但是,如果你坚持到最后,你就会很好地成为一名Dart数据结构和数据结构专家。现在是开始的时候了!