数学与泛型编程:高效编程的奥秘 - (EPUB全文下载)

文件大小:0.64 mb。
文件格式:epub 格式。
书籍内容:

数学与泛型编程:高效编程的奥秘
第1章 内容提要
1.1 编程与数学
1.2 从历史的角度来讲解
1.3 阅读准备
1.4 各章概述
第2章 算法初谈
2.1 埃及乘法算法
2.2 改进该算法
2.3 本章要点
第3章 古希腊的数论
3.1 整数的几何属性
3.2 筛选素数
3.3 实现该算法并优化其代码
3.4 完美数
3.5 毕达哥拉斯学派的构想
3.6 毕氏构想中的严重缺陷
3.7 本章要点
第4章 欧几里得算法
4.1 雅典与亚历山大
4.2 欧几里得的最大公度量算法
4.3 缺乏数学成就的一千年
4.4 奇怪的0
4.5 求余及求商算法
4.6 用同一份代码来实现求余及求商
4.7 对最大公约数算法进行验证
4.8 本章要点
第5章 现代数论的兴起
5.1 梅森素数与费马素数
5.2 费马小定理
5.3 消去
5.4 证明费马小定理
5.5 欧拉定理
5.6 模运算的应用
5.7 本章要点
第6章 数学中的抽象
6.1 群
6.2 幺半群与半群
6.3 与群有关的定理
6.4 子群及循环群
6.5 拉格朗日定理
6.6 理论与模型
6.7 举例说明范畴理论与非范畴理论
6.8 本章要点
第7章 推导泛型算法
7.1 厘清算法所应满足的要求
7.2 对模板参数A提出要求
7.3 对模板参数N提出要求
7.4 提出新的要求
7.5 将乘法算法改编为幂算法
7.6 对运算本身加以泛化
7.7 计算斐波那契数
7.8 本章要点
第8章 更多代数结构
8.1 斯蒂文、多项式及最大公约数
8.2 哥廷根与德国数学
8.3 埃米·诺特与抽象代数的诞生
8.4 环
8.5 矩阵乘法与半环
8.6 半环的运用:社交网络与最短路径
8.7 欧几里得整环
8.8 域及其他的代数结构
8.9 本章要点
第9章 整理数学知识
9.1 证明
9.2 数学史上的第一个定理
9.3 欧几里得与公理化方法
9.4 与欧氏几何并立的其他几何学
9.5 希尔伯特的形式化方法
9.6 皮亚诺与他的公理
9.7 用皮亚诺公理来构建算术体系
9.8 本章要点
第10章 编程的基本概念
10.1 亚里士多德与抽象
10.2 值与类型
10.3 concept
10.4 迭代器
10.5 迭代器的种类、所支持的操作及所具备的特性
10.6 区间
10.7 线性搜索
10.8 二分搜索
10.9 本章要点
第11章 置换算法
11.1 置换与换位
11.2 交换两个区间内的元素
11.3 旋转
11.4 利用循环来执行旋转
11.5 倒置
11.6 空间复杂度
11.7 内存自适应算法
11.8 本章要点
第12章 再论最大公约数算法
12.1 硬件的限制催生出更为高效的算法
12.2 Stein算法的推广
12.3 贝祖等式
12.4 扩展最大公约数算法
12.5 最大公约数算法的运用
12.6 本章要点
第13章 实际运用
13.1 密码学
13.2 素数测试
13.3 米勒–拉宾素数测试
13.4 RSA算法的步骤及原理
13.5 本章要点
第14章 全书总结
延伸阅读
附录A 记法
附录B 常用的证明办法
附录C 写给非C++程序员看的C++知识
参考文献
中英文词汇对照表
第1章 内容提要
不懂数学,就无法了解世界。
——罗吉尔·培根(Roger Bacon),《大著作》(Opus Majus)
这是一本谈编程的书,但是它与大多数的编程书都不太一样,因为除了算法和代码之外,本书还会给出数学证明和一些讲述从古代到20世纪各种数学发现的历史材料。
另一个更为具体的特色在于:这是一本谈论泛型编程(generic programming)的书。泛型编程是出现于20世纪80年代的编程方法,在20世纪90年代随着C++标准模板库(Standard Template Library,STL)而变得流行起来。我们可以这样定义它:
定义1.1 泛型编程是一种专注于对算法及数据结构进行设计的编程方式,它使得这些算法及数据结构能够在不损失效率的前提下,运用到最为通用的环境中。
用过STL的读者可能在想:“不对吧?泛型编程的概念只用这么简单的一句话就能定义出来?模板和迭代器(iterator)等特性怎么没有提到呢?”其实那些特性应该说是工具,它们使得编程语言能够支持泛型编程。程序员固然应该学会高效地使用那些工具,然而泛型编程主要谈的是编程态度(attitude),而不是某一套工具。
笔者认为,所有的程序员都应该抱持这种编程态度,也就是说,都应该试着以这种通用的方式来编写代码。如果能够写出高品质的泛型程序,那么很容易就能使用并修改其中的各个组件。这要比那种采用硬代码来编写的程序好很多,因为后者会针对具体的应用程序来给数据结构、算法以及接口施加一些毫无必要的限制。把程序写得通用一些可以令它变得更为简洁,也更为强大。
1.1 编程与数学
那么,这种泛型编程的想法是从哪里来的?我们又应该怎样来学习它呢?这种想法是从数学中衍生出来的,尤其与抽象代数(abstract algebra)这个数学分支有关。为了使大家能够理解这种编程方式,本书会对抽象代数做一些介绍,并着重讲解怎样从抽象的运算属性来认识对象。这个话题一般是数学专业的大学生才去研究的,然而笔者认为,它对于我们理解泛型编程会起到关键的作用。
实际上,还有很多基本的编程概念也同样来自数学。对这些概念的产生及变化过程加以学习,能够促使我们更好地思考软件的设计问题。比方说,欧几里得(Euclid)的《几何原本》(Elements)虽然是两千多年前写成的书,但是其中的范例仍然具有很高的参考价值,它可以告诉我们,怎样用一些较小且较易理解的组件来构建一套复杂的系统。
尽管抽象是泛型编程的要义,但这个抽象却并不是本来就有的。我们必须从具体的事物入手,才能够获得更为抽象的认识,要想对某个领域进行正确的抽象,就必须理解该领域的细节。
抽象代数里面的抽象很大程度上是从另外一个数学分支的具体成果中得出的,那个分支比抽象代数更为古老,它叫 ............

以上为书籍内容预览,如需阅读全文内容请下载EPUB源文件,祝您阅读愉快。

版权声明:书云(openelib.org)是世界上最大的在线非盈利图书馆之一,致力于让每个人都能便捷地了解我们的文明。我们尊重著作者的知识产权,如您认为书云侵犯了您的合法权益,请参考版权保护声明,通过邮件openelib@outlook.com联系我们,我们将及时处理您的合理请求。 数研咨询 流芳阁 研报之家 AI应用导航 研报之家
书云 Open E-Library » 数学与泛型编程:高效编程的奥秘 - (EPUB全文下载)