算法深潜:勇敢者的Python探险
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1 用算法解决问题

接球的动作很了不起。球可能从很远的地方来,看上去不过是地平线上的一个小点。可能只在空中停留几秒钟或更短的时间。球受到空气阻力、风,还有地心引力的作用,以类似抛物线的方式运动。每一次抛掷,球都会以不同的力、不同的角度、在不同的环境和条件下飞出去。那么,击球手击出棒球的那一刻,300英尺(约91米)外的外场手是如何立即知道该往哪里跑才能在球落地前把它接住的呢?

这就是外场手问题(outfielder problem),目前人们在学术期刊上仍在讨论这个问题。我们从外场手问题入手,有两种完全不同的解决方法:分析式方法和算法式方法。通过对比这两种解决方法可以生动地阐述什么是算法,以及它与其他解决问题的方法相比有什么不同。而且,外场手问题有助于想象一个抽象的运动场——你可能有一些抛球和接球的经验,这些经验有助于你理解实践背后的理论。

在真正理解人类是如何准确地知道球将会落在哪里之前,我们先理解机器是如何做到这一点的。首先看看外场手问题的分析式方法。这在数学上是精确的,计算机很容易立即执行,物理入门课程通常会教授这类方法;这能让一个足够敏捷的机器人为棒球队打外场。

但是,人类不能在头脑中轻松地运行分析方程,当然也做不到计算机那么快。对人类大脑来说更合适的是算法式方法,我们将由此探索算法是什么,算法的优势是什么。此外,算法式方法告诉我们算法是人类思维过程的自然产物,不必望而生畏。为了介绍解决问题的新方法——算法式方法,我们来讨论外场手问题。