北京大学 数据结构和算法
如何从未知到已知
1、基于有穷观点的能行方法
由有限数量的明确有限制令构成:
知令执行在优先步骤种植hi
指令在每次执行都总能得到唯一结果
原则可以由 抽象计算
逻辑学家 提出的计算的数学模型
哥德尔和克莱尼的:递归函数模型
丘奇的Lambada演算模型
波斯特的post机模型
图灵的图灵机模型
2、 图灵机 Turing Machine 模仿游戏
在纸上写上或擦除某个符号;
把注意力从纸的一个位置转向另一个位置
在每个阶段要绝顶下一步动作依赖于
a) 此人当前所关注的纸上某个位置的符号
so a,b都能一一消完,则进入接收状态,停机
viusal Turing 左边是变量 箭头所指就是初始状态,空格
向右移动读写头 他都是一直移动
##如何突破计算
超大规模分布式计算
SETI@home
BOINC 也是公众参与科学计算的超大型分布式系统 ,托管了众多学科的计算机搜寻项目
光子计算 用超微透镜取代晶体管、以光信号代替电信号进行运算
光信号无需改变二进制计算机的软件原理,但可以轻易实现极高的
运算频率,同时能耗非常低,不需要复杂的散热装置
DNA计算 以DNA分子和酶的相互作用进行九三
量子计算 量子力学态叠加 让信息单元处于多种可能性的叠加装填 从而实现指数计算的最高级别
分布式智慧 众包 基于有穷观点的能行方法
游戏化众包学术研究 Nature 一篇有57000位作者的Nature论文
通过多人游戏 进行蛋白质结构分析 FOLD it 用各种氨基酸进行组装,最终拼凑出这个蛋白的完全体
玩家只需要掌握基本方块的拼凑技巧 即可跟全世界众多玩家一起协同工作
3、突破算法的约束
相比分布式计算的限制计算力 革命性的利用了空闲智力
4、 什么是抽象和实例
为了更好的处理机器相关性或独立性,引入了抽象的概念 用以从逻辑或者物理的不同层次来看待问题
从司机观点看来 骑上车是一台可以待人去往目的地的代步工具
从抽象角度说司机看到汽车的逻辑层次
这些操纵机构(方向盘、油门、党委) 就称为接口Interface 就是接口
而从汽车修理工的角度 来看同一辆汽车 要清楚他们的工作原理 功能是如何实现的
如发动机工作原理 ,党委操作的机械结构,发动机舱内各处的 各处温度如何测量和控制等等
这些内部构造构成了汽车的物理层次
工作过程就称之为实现
什么是 抽象 从一般大众用户观点来看,计算机可以用来扁你及文档 收发邮件 上网聊天 处理照片
并不需要具备计算机内部的掌握,
而对于计算机科学家 程序员 技术支持 系统管理员来说
就必须要了解
使用编程语言进行编程,也会涉及到"抽象"
如计算一个数的平方根
程序员可以调用可函数 math.sqrt,直接得到结果,而无需关心其内部是如何实现的
这种功能上的"黑盒子"被称作议程中过程抽象
5、 算法+数据结构== 程序
程序设计语言 需要为算法的实现提供 过程 和数据的机制
具体表现为控制结构和数据类型
程序设计语言均有语句对应控制结构
顺序处理和分支选择 循环迭代
ADT,过程抽象
具体 是如何实现的 复杂实现 抽象数据类型 也就是 也就建立
控制结构 和基本数据类型 来实现ADT所提供的逻辑接口
如何实现物理层次和物理层次的分离 可以定义复杂的数据模型来解决的额 而不需要立即此模型如何实现的
6、接口的两端: 抽象与实现
如 电动车与 汽油车
底层动力\能源不同 但是擦做接口相同
司机无序重新驾照,而车厂可以持续改进实现技术
而接口的两端: 抽象与实现
由于对抽象数据类型可以有多种实现方案
##独立于实现的数据模型
让底层开发程序员专注于实现和优化数据处理
又不改变数据的使用接口
让用户在那住于用数据接口来进行问题的解决 而无需考虑如何具体实现这些接口
通过层层 抽象,降低问题解决过程中的复杂度
学习算法的目的 学习不同问题的解决方案 第一个想的是 我之前有没有类似的想象方案 类比的方法
差异也比较大 知识通过程序代码 不同的运行环境和输入数据的情况下啊 他的表现差异也会很大
在某些情况下当我们碰到棘手的难题
得能区分这种问题是根本不存在算法
还是能找到算法 但需呀耗非大量的资源
##什么是算法分析
##如何对比两个程序
看起来不同,但解决同意i个问题的程序 哪个更好
代码风格和 可读性