数据结构与算法——0概述

未来简史(人类简史的作者):人类文明进入数据主义时代。
人们应该将生命活动理解为数据流的传输及处理算法,人类智慧和自由意识也无法例外。

电影:超时空接触
SETI@home:1999年开始,地外文明搜索一直在进行,有个众包的分布式平台利用多余的算力来地外探索,已进行了20多年。

数学:解决问题的终极工具。

但是科学不是万能的,数学也不例外。

伽利略(1564-1642):mathmatics is the alphabet in which god written the universe.

Donald in mathmagic land. 1959 数学应用的动画片

问题解决的计算之道

希尔伯特:能否找到一种基于有穷能行方法,判断任何一个命题的真假

关于“计算”的数学模型

  1. 递归数学模型
  2. lambda演算模型
  3. 图灵机模型

研究证明:希尔伯特提出的计划无法实现。但 能行可计算概念成了计算理论的基础,相当于是希尔伯特抽象出的计算的概念。

计算机是数学家一次失败思考的产物。---无名氏

算法(HOW)和计算复杂度

计算复杂度:问本身的特性

世界上最早的算法:辗转相除法,公元前3世纪,《几何原本》
1844年,数学家加百利,证明辗转相除法步骤不超过较小的数的5倍。
相当于开创了计算复杂性的理论。

计算复杂性:通过研究发现问题的难易程度是不同的。

  • 非常容易:基本数值计算
  • 尚能满意:表达式求值,排序等
  • 无可行性:哈密顿回路等

同一个问题不同的解决方案,复杂性也会差别很大。而且运行环境不同,编程语言不同,硬件设备不同(服务器,移动端?)都会影响结果。

新型计算技术:

  • 分布式计算--机海战术
  • 光子计算:能耗低,不需要复杂散热装置
  • DNA分子计算:DNA和酶的相互作用作为映射,极高的并行性
  • 量子计算:利用量子力学态叠加原理,信息单元处于多种可能性的叠加状态(既可以是0,也可以是1,也可以同时是0和1),实现指数级别的并行计算,根本上解决最高复杂度计算问题。

什么是抽象(abstract)实现(implement)?

抽象:以汽车为例,汽车可以为反向盘,油门,刹车,档位等(接口),逻辑层次
实现:如方向盘功能(接口)的内部结构,如油门的标定、喷油量等,物理层次

抽象:功能级别,如司机看到的是上车,点火,换挡,刹车等,比物理层次更高
如c语言中分为逻辑行和物理行,一个逻辑行可能包含多个物理行。

抽象:从物理层次--->逻辑层次,从实现---->接口(interface). 物理层次对应实现,逻辑层次对应接口。

抽象发生在不同的层次上:如封装后的只有API接口的函数调用形式---过程抽象

抽象与实现:编程

算法 + 数据结构 = 程序,图灵奖的获得者,pascal语言设计者---Niklaus wirth

因此程序语言需要提供“过程”和“数据”的机制:

  • 过程---由语句对应控制结构,如顺序结构,分支判断结构,循环迭代结构
  • 数据类型---数值类型,非数值类型(字符串,布尔类型);基本数据类型及复杂数据类型

抽象数据类型(ADT):实现了对数据的封装encapsulation
用户user--->接口interface--->实现implement--->操作operation
ADT:

  • 逻辑层次,接口设计
  • 物理层次,内部具体实现

抽象的好,接口使用维护方便,即使内部实现变了,不影响user的使用。

研究算法的目的

  • 学习解决常见问题的方法
  • 评判问题本身的特性
  • 区分问题是不是有算法的类型(有穷可计算)
  • 不同的解决方案(算法)复杂度不同,学会折中
  • 生活中的实际问题大都可以抽象为典型的数据结构及算法解决。如(最短路径,最小值等)排序查找,社交网络的人物属性计算等。
posted @ 2020-07-05 21:20  Parallax  阅读(189)  评论(0编辑  收藏  举报