《数学与泛型编程:高效编程的奥秘》一3.5 毕达哥拉斯学派的构想

3.5 毕达哥拉斯学派的构想

对于毕达哥拉斯学派的人来说,数学并不像今天这样,是对抽象符号所做的运算,而是一种关于数字和空间的科学。在可以感知的现实世界中,数字和空间正是两个最为基本的方面。毕氏学派除了关注正方形数、长方形数及三角形数等有形数(figurate number)之外,他们还认为,空间有着离散的结构(discrete structure),于是他们试图提供一套以数字为基础的理论,使得几何学可以建立在该理论之上。这种想法实际上就相当于要创建一套基于正整数的统一数学理论。
为此,他们提出一个概念,说一条线段可以用另一条线段来“度量”(be measured):
定义3.1 当且仅当线段A可以通过有限个连续的线段V来表示时,线段V才能用作线段A的量度。
这个量度必须选取得足够小,使我们可以通过整数次的拼接来产生所需的线段,没有“分数”(fractional)量度这一说法。测量不同的线段时,当然可以分别使用不同的量度,但如果想用同一种量度来测量两条线段,那么该量度必须是二者的公度:
定义3.2 当且仅当线段V可以同时成为线段A与线段B的量度时,它才能用作二者的公度。
毕氏学派认为,对于任何一个给定的情境来说,都能找到适用于其中所有相关物件的公度,因此,空间就可以离散地进行表示了。

    • *
      由于公度可能有很多个,因此,他们提出最大公度量(greatest common measure)这一概念。

定义3.3 如果线段V是线段A和线段B的公度,而且比两者的其他公度都要大,那么V就是A和B的最大公度量。
毕氏学派还意识到了最大公度量(GCM)所具备的很多性质,这些性质用现代的记法可以表示为:
gcm(a, a) = a(3.7)
gcm(a, b) = gcm(a, a + b)(3.8)
b<a gcm(a, b) = gcm(a-b, b)(3.9)
gcm(a, b) = gcm(b, a)(3.10)
根据这些性质,他们提出了古希腊数学中最为重要,或许也是整个数学中最为重要的算法,那就是如何计算两条线段的最大公度量。古希腊人所使用的计算器具是可以对线段进行操作的直尺和圆规。如果用C++代码来表示该算法,并把line_segment视为一种类型,那么我们可以将其写为:
screenshot

上面这段代码借助了三分律(trichotomy law),也就是说,如果a与b这两个变量是同一种类型,并且该类型的所有取值都是可以比较大小的(totally ordered),那么a与b的关系只可能是a = b、a<b或a>b这三种情况之一。
我们以gcm(196, 42)为例来演示该算法的计算过程:
a b
196>42, gcm(196, 42) = gcm(196-42, 42) = gcm(154, 42)
154>42, gcm(154, 42) = gcm(154-42, 42) = gcm(112, 42)
112>42, gcm(112, 42) = gcm(112-42, 42) = gcm(70, 42)
70>42, gcm(70, 42) = gcm(70-42, 42) = gcm(28, 42)
28<42, gcm(28, 42) = gcm(28, 42-28) = gcm(28, 14)
28>14, gcm(28, 14) = gcm(28-14, 14) = gcm(14, 14)
14 = 14, gcm(14, 14) = 14
由此可见,gcm(196, 42) = 14。
我们这里所说的gcm(196, 42),意思当然是指长度为196和长度为42的两条线段所具备的最大公度量,然而本章在举例时为了简单起见,会直接用代表线段长度的那个整数来表示该线段本身。
在接下来的几章中,我们还要使用该算法的各种版本,因此大家一定要理解这个算法,并明白它的计算原理。你可以自己用手算上几轮,以便获得更加确切的印象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值