1.为什么要学习数据结构和算法?¶
对数据结构的研究是一个效率问题。给定一个特定的数据量,为了实现一个特定的目标,什么是最好的存储方式?
作为一个程序员,你经常使用各种集合类型,如数组、字典和集合。这些是保存数据集合的数据结构,每个结构都有自己的性能特点。
作为一个例子,考虑一下数组和集合之间的区别。两者都是为了保存一个元素的集合,但在数组中搜索一个元素所需的时间远远长于在集合中搜索一个元素。另一方面,你可以对数组中的元素进行排序,但你不能对集合中的元素进行排序。
数据结构是一门精心研究的学科,其概念与语言无关;C
语言的数据结构在功能和概念上与任何其他语言(如Swift
)的相同数据结构相同。同时,Swift
的高级表达能力使其成为学习这些核心概念的理想选择,而不会牺牲太多的性能。
另一方面,算法是完成一项任务的一组操作。这可以是一个排序算法,将数据移来移去,使其排列有序。也可以是一种将8K图片压缩到可管理大小的算法。算法对软件来说是必不可少的,许多算法被创造出来,作为有用程序的构建块。
那么,你为什么要学习数据结构和算法呢?
面试¶
保持你的算法技能的一个重要原因是为面试做准备。大多数公司至少有一到两个算法问题来测试你作为一个工程师的能力。数据结构和算法方面的坚实基础是许多软件工程职位的"门槛"。
工作¶
在处理大量数据时,使用一个适当的数据结构是至关重要的。使用正确的算法对你的软件的性能和可扩展性起着重要作用。你的移动应用程序将有更多的响应,并有更好的电池寿命。你的服务器应用程序将能够处理更多的并发请求,并使用更少的能源。算法通常包括正确性的证明,你可以利用这些证明来构建更好的软件。
使用正确的数据结构也有助于向读者提供背景。举个例子,你可能在你的代码库中遇到一个Set
。马上,你就可以推断出:
- 由于
Set
是一个无序的集合,所以Set
的消费者并不关心元素的顺序。 Set
还确保没有重复的值。你可以假设消费者是在处理唯一的数据Set
非常适合检查值的成员资格,所以工程师很可能为此目的引入了一个Set
。
一旦熟悉了各种数据结构,你就可以使用数据结构作为"线索"从代码中提取额外的上下文。这是一个强大的技能,可以帮助你理解一个软件的工作原理。
自我改进¶
了解算法用于解决棘手问题的策略,可以为你的代码提供改进的思路。Swift
标准库有一小套通用的集合类型;它们并没有涵盖所有的情况。然而,正如你将看到的,这些基元可以作为一个很好的起点,用于构建更复杂和特殊用途的抽象概念。了解更多的数据结构,而不仅仅是标准的数组和字典,会给你带来更大的工具集合,你可以用它来构建你的应用程序。
Note
一位智者曾经说过。算法的练习类似于音乐家练习音阶的方式。你的基础打得越好,你在使用更复杂的软件时就会变得越好。
本书的目标¶
本书既是一本参考书又是一本练习书。如果你熟悉raywenderlich.com
的其他书籍,你会感到宾至如归。每一章后面都有一个简短的章节,有一些挑战。这些挑战的解决方案出现在每一章的末尾。帮你自己一个忙,在偷看解决方案之前认真尝试解决每个挑战。
本书分为五个部分,每个部分涵盖一个特定的主题:
- 简介
- 基本数据结构
- 树
- 排序
- 图形
本书最好按时间顺序阅读,但如果你想跳过,它也可以作为参考。
如果你是研究算法和数据结构的新手,你可能会发现其中一些材料具有挑战性。但是,如果你坚持到最后,你就会在成为Swift
数据结构和算法大师的路上走得更远。让我们开始吧!