目录
- 《未来简史》 尤瓦尔·赫拉利
- 问题
- 问题的分类
- 数学:解决问题的终极工具
- 希尔伯特命题
- 关于计算的数学模型
- 哥德巴赫猜想
- 计算机是数学家一次失败思考的产物
- 图灵机
- 世界上最早的算法
- 欧几里得算法 《几何原本》
- 计算复杂性
- NPC问题
- 研究本质
- 突破计算的极限
- 抽象 和 实现
- 清晰高效的表达算法
《未来简史》 尤瓦尔·赫拉利
- 生命活动是数据流的传输及处理算法,人类的智慧和自由意识也无法例外
问题
人们在生活、生产、学习、探索、创造过程中遇到的未知的事物
问题的分类
- What 面向判断与分类——>通过树状的判定和分支解决
- Why 面向求因和证明——>通过有限的公式序列来解决
- How 面向过程和构建——>通过算法流程来解决
- 问题解决之道
感觉、经验——>占卜、求神——>逻辑、数学、实验——>工程、计算——>模型、模拟、仿真——>哲学
数学:解决问题的终极工具
- 清晰明确的符号表述体系
- 严密确定的推理系统
希尔伯特命题
为解决数学本身的可检验性问题,20世纪20年代,大数学家希尔伯特提出“能否找到一种基于有穷观点的能行方法,来判定任何一个数学命题的真假”
关于计算的数学模型
20世纪30年代,关于计算的数学模型
- 哥德尔和克莱尼的递归函数模型
- 丘奇的Lambda演算模型
- 波斯特的Post机模型
- 图灵的图灵机模型
最终证明,希尔伯特的计划是无法实现的,因为总有一些数学问题的真假是无法被证明。
哥德巴赫猜想
任一大于2的整数都可写成三个质数之和
哥德巴赫1742年给欧拉的信中提出,寻求欧拉的答案
- 常见哥德巴赫猜想
- 强哥德巴赫猜想(欧拉版哥德巴赫猜想):任一大于2的偶数都可写成两个质数之和
- 弱哥德巴赫猜想:任何一个大于7的奇数都能被表示成三个奇质数的和
计算机是数学家一次失败思考的产物
图灵机
1936年, Alan Turing提出一种抽象的计算模型图灵机Turing Machine , 基本思想是用机器模拟人们用纸笔进行数学运算的过程。
Visual Turing 图灵机模拟软件
世界上最早的算法
欧几里得算法 《几何原本》
- 辗转相除法
计算复杂性
一些问题的解决会爆炸性的吞噬我们的时间和空间,其可行性相当差,计算复杂性高,例如:哈密顿回路、货郎担问题
哥尼斯堡七桥问题(欧拉)——>图论和几何拓扑
在哥尼斯堡的一个公园里,有七座桥将河中两个岛及岛与河岸连接起来,问是否可能从这四块陆地中任一块出发,恰好通过每座桥一次,再回到起点。
哈密顿回路
由指定的起点前往指定的终点,途中经过所有其他节点且只经过一次。
货郎担问题
有n个城市,用1,2,…,n表示,城i,j之间的距离为dij,有一个货郎从城1出发到其他城市一次且仅一次,最后回到城市1,怎样选择行走路线使总路程最短?
NPC问题
NPC问题(Non-deterministic Polynomial Complete):多项式复杂程度的非确定性问题
研究本质
- 计算复杂性理论研究本质:将各种问题按照其难易程度分类,研究各类问题的难度等级,并不关心解决问题的具体方案
- 算法的研究本质:在不同的现实资源约束的情况下的不同解决方案,致力于找到效率最高的方案。
突破计算的极限
- (闲置计算力+空闲智力)
- 机海战术 SETI@home 利用全球联网计算机共同搜寻地外文明的科学实验计划
社会公众也能通过贡献计算力参与众包,进行科学计算,以形成超大规模的分布式计算。
- 新型计算技术
- **光子计算:**用超微透镜代替晶体管,以光信号代替电信号进行计算。
- DNA计算:以DNA分子和酶的相互作用实现逻辑运算和数据存储,获取较高的计算并行度和存储能力。
- 量子计算:量子力学态叠加原理,让信息单元处于多种可能性的叠加状态,从而实现指数级别的并行计算,根本上解决最高复杂度的计算问题。
- 分布式智慧:众包
- 空闲智力
抽象 和 实现
- 含义
- 抽象:为更好的处理机器相关性或独立性,以从逻辑或者物理的不同层次上看待问题和解决方案。
- 实现:编程是一种实现,是通过一种程序设计语言,将抽象的算法实现为计算机可以执行的代码的过程。
- 意义
- 对抽象数据类型可以有多种实现方案
- 独立于实现的数据模型
- 让底层开发程序员专注于实现和优化数据处理,而不需要改变数据的使用接口。
- 让用户专注于用数据接口来进行问题的解决,而无需考虑如何实现这些接口。
- 通过层层抽象,降低问题解决过程中的复杂度
- Niklaus Wirth (尼古拉斯·沃斯)
图灵奖获得者,Pascal语言设计者
- 算法+数据结构 =程序
- 相当于物理学中E=mc ^2
清晰高效的表达算法
- 过程抽象
- 为了控制问题及问题表达过程中的复杂度,利用抽象来保持问题的“整体感”,而不会陷入到过多的细节中。
- 要求:对现实问题进行建模时,对算法所要处理的数据要保持与问题本身的一致性,不要有太多与问题无关的细节。
- 数据抽象
- ADT 抽象数据类型、
- 对数据实现逻辑层次和物理层次的分离,可以定义复杂的数据模型来解决问题,而不需要立即考虑此模型如何实现。