高级算法和数据结构
上QQ阅读APP看书,第一时间看更新

1.2 设定目标:阅读本书后的期望

读到这里,你可能想问:“我还需要自行编写数据结构吗?”

通常来说,你应该很少会遇到“只能从头开始编写一种新的数据结构”这种情况。如今,就大多数编程语言来说,找到一个包含常见数据结构实现的库还是很容易的。此外,这些库的编写者都是懂得如何对性能进行优化或是能解决安全问题的专家。

实际上,本书的主要目标是让你熟悉各种工具,并且通过训练让你能够识别出可以使用这些工具改进代码的机会。在较高层次上了解这些工具的内部工作方式是学习过程中的重要组成部分。但是,在某些特殊情况下,你还是会需要动手编写代码。例如,你使用了一种没有太多可用库的全新编程语言,或者你需要自定义一种数据结构来解决特殊问题,等等。

因此,是否要为数据结构编写你自己的实现取决于许多因素。其中一个因素就是,你需要的数据结构有多高级以及你使用的编程语言有多主流。

为了说明这一点,让我们以聚类为例。

如果你使用的是像Java或Python这样的主流语言,那么通常你能找到许多包含k均值算法且值得信赖的库。k均值算法是一种非常简单的聚类算法。

如果你使用的是像Nim或Rust这样的新兴语言,那么你可能很难找到一个由团队实现的、进行过全面测试的并且会不断得到维护的开源库。

另外,如果你需要的是像DeLiClu这样的高级聚类算法,那么即便使用的是Java或Python语言,也很难找到可以信任的且可以直接放在生产环境中运行的实现。

需要了解这些算法的内部工作方式的另一个因素是,你需要对某种算法进行自定义。这可能是因为你需要针对现实环境进行优化。例如,你需要一些特别的类似支持多线程运行且保证线程安全这样的属性,或者需要一种略有不同的行为。

也就是说,即使你只专注我们在前面所呈现的内容(只是了解应该什么时候以及如何使用这些数据结构),也足以让你的编码技能提升一个层次。下面让我们通过一个例子来说明算法在现实世界中的重要性,并介绍我们是如何对算法进行描述的。