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

简介: 本节书摘来自华章出版社《数学与泛型编程:高效编程的奥秘》一 书中的第3章,第3.5节,作者:丹尼尔E.罗斯(Daniel E. Rose),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

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的两条线段所具备的最大公度量,然而本章在举例时为了简单起见,会直接用代表线段长度的那个整数来表示该线段本身。
在接下来的几章中,我们还要使用该算法的各种版本,因此大家一定要理解这个算法,并明白它的计算原理。你可以自己用手算上几轮,以便获得更加确切的印象。

相关文章
|
8月前
|
设计模式 算法 开发者
代码之美:探索编程艺术与实践的交汇点
【4月更文挑战第2天】 在数字世界的构建中,代码不仅仅是一种工具,它亦是艺术家手中的画笔。本文旨在探讨编程作为一种技术和艺术相结合的领域,揭示那些隐藏在代码背后的美学原则和创造力。我们将从编程的基础出发,逐步深入到设计模式、算法优雅性以及代码的可读性和维护性,最终探讨如何通过技术实现创新并解决问题。文章的目的是为那些渴望在技术实践中寻找创造性和美感的开发者提供灵感和指导。
|
8月前
|
算法
【编程技巧】精通编程的秘密武器:高效编程技巧揭秘!
【编程技巧】精通编程的秘密武器:高效编程技巧揭秘!
42 0
|
小程序 JavaScript 前端开发
兴趣编程六步法
欢迎来到我的小院,在当今时代,科技力量代表一个国家的核心竞争力,其中计算机编程技术尤为重要,可以从中学习逻辑分析能力,业务抽象能力,专注思考能力等等,美国等一些发达国家,已经把编程教育纳入小学课本中,所以我们也需要加快步伐,掌握编程的一些理念和实战技巧。
兴趣编程六步法
《数学与泛型编程:高效编程的奥秘》一3.6 毕氏构想中的严重缺陷
本节书摘来自华章出版社《数学与泛型编程:高效编程的奥秘》一 书中的第3章,第3.6节,作者:丹尼尔E.罗斯(Daniel E. Rose),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1421 0
|
算法 程序员
《数学与泛型编程:高效编程的奥秘》一2.2 改进该算法
本节书摘来自华章出版社《数学与泛型编程:高效编程的奥秘》一 书中的第2章,第2.2节,作者:丹尼尔E.罗斯(Daniel E. Rose),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1381 0
|
算法
《数学与泛型编程:高效编程的奥秘》一导读
Alex是数学专业出身,但我不是。因此,我很努力地试着去读懂课程里的一些材料,并根据自身体会来确定那些需要加以解说的难点。如果你发现本书所用的一些描述方式及术语和专业数学家稍有不同,或是本书在解释某个问题时多写了几个简单的步骤,那么这应该归咎于我才对。
1526 0
|
程序员 C++
《数学与泛型编程:高效编程的奥秘》一1.3 阅读准备
本节书摘来自华章出版社《数学与泛型编程:高效编程的奥秘》一 书中的第1章,第1.3节,作者:丹尼尔E.罗斯(Daniel E. Rose),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1282 0
|
算法
《数学与泛型编程:高效编程的奥秘》一3.7 本章要点
本节书摘来自华章出版社《数学与泛型编程:高效编程的奥秘》一 书中的第3章,第3.7节,作者:丹尼尔E.罗斯(Daniel E. Rose),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1544 0