热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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



推荐阅读
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 如何在跨函数中使用内存?
    本文介绍了在跨函数中使用内存的方法,包括使用指针变量、动态分配内存和静态分配内存的区别。通过示例代码说明了如何正确地在不同函数中使用内存,并提醒程序员在使用动态分配内存时要手动释放内存,以防止内存泄漏。 ... [详细]
author-avatar
mobiledu2502887493
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有