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

相关文章
|
缓存 运维 负载均衡
阿里云运维架构实践秘籍
1. 中国互联网发展编年史 2. 运维 3. 不同云盘单路随机写访问响应时间对比 4. 常见数据库性能对比 5. 常见衡量业务量级别指标 6. 如何根据PV估算服务器数量? 7. 不同业务特性计算模型 8. PV量和服务器配置/RDS配置对应表 9. 服务器CPU/内存配置模型 10. 云盘空间选择 11. 宽带的选择 12. 共享文件存储的方法 13. OSS文件管理 14. OSS数据迁移 15. 缓存 16. Session管理六种策略 17. 分库分表 18. 云迁移步骤 19. 监控方案 20. 云端安全 21. 架构阶段
1573 0
阿里云运维架构实践秘籍
|
6月前
|
安全 JavaScript 前端开发
Burp Suite Professional 2026.4 发布 - 领先的 Web 渗透测试软件
Burp Suite Professional 2026.4 发布 - 领先的 Web 渗透测试软件
645 1
Burp Suite Professional 2026.4 发布 - 领先的 Web 渗透测试软件
|
7月前
|
人工智能 运维 Cloud Native
玄晶引擎XgenCore Works V2.8.01更新解析:技术优化、云场景适配与开发者赋能
玄晶引擎XgenCore Works V2.8.01发布:聚焦云原生适配,完成11项关键迭代——新增数字人声音克隆失败精准提示、分镜混剪能力;优化24H视频生成等3大流程;修复8类云环境高频Bug,全面支持阿里云轻量服务器、无影云电脑及百炼生态,助力开发者高效落地AI内容创作与智能运营。
490 1
|
9月前
|
机器学习/深度学习 弹性计算 编解码
2026年阿里云服务器4核8G租用价格,可选实例收费标准与最新活动价格
本文解析2026年阿里云4核8G云服务器租用价格及选择策略。涵盖经济型e实例、通用算力型u1/u2a、计算型c9i等多规格实例,价格从经济型e实例1M带宽年费1595.11元至计算型c9i实例3147.56元不等。不同实例适配不同场景:经济型e适合轻量应用,u2a以高性价比适配预算敏感用户,c9i专为高性能计算设计。
|
10月前
|
JSON 缓存 前端开发
什么是跨域
跨域是指浏览器出于安全考虑,限制不同源之间的资源访问。CORS(跨域资源共享)是W3C标准,通过服务器设置响应头,允许浏览器向跨源服务器发送XMLHttpRequest请求。它分为简单请求与非简单请求,后者需先发起OPTIONS预检。相比仅支持GET的JSONP,CORS支持所有HTTP方法,更灵活安全,是现代跨域解决方案的首选。(238字)
|
传感器 人工智能 物联网
智能鞋:从脚下开始的科技革命
智能鞋:从脚下开始的科技革命
1521 6
|
存储 网络性能优化 网络虚拟化
局域网络设备
网卡、中继器、集线器、网桥和交换机是网络通信中的关键设备。网卡实现计算机与网络的连接,中继器用于延长网络传输距离,集线器将多台设备连接至共享网络,网桥通过MAC地址转发数据,而交换机提供高性能的数据转发和过滤服务,支持VLAN、QoS等功能,适用于不同规模的网络环境。
1365 3
|
开发框架 资源调度 JavaScript
uniapp本地导出表格excel
uniapp本地导出表格excel
3025 1
|
Python
接上python如何处理下载中断的情况
实现断点续传机制涉及记录已下载的字节数、使用`Range`头继续下载及合并文件块。Python示例代码展示了如何通过`requests`库从上次中断的位置开始下载,将新内容追加到现有文件。函数`resume_download(url, filename, last_byte=0)`接收URL、文件名和最后字节位置作为参数。注意,实际使用时需确保URL和文件路径有效。
735 0
|
Nacos Docker 容器
关于NACOS-1.4.0未授权访问和旁路身份验证安全漏洞及其复现
关于NACOS-1.4.0未授权访问和旁路身份验证安全漏洞及其复现