【数据结构与算法】北大陈斌(1)

1.1.1 引子:数据时代

目的:如何把数据组织起来,进行有效的处理,以解决问题

1.1.2 问题求解的计算之道

尚未解决和无法解决问题的共性:表述含混、标准不一、涉及主观、结果不确定。

基于有穷观点的能行方法,“能行可计算”概念成为计算理论的基础

1.1.3 图灵机计算模型

(1)图灵机Turing machine:

在纸上写上擦除某个符号

注意力从纸的一个位置转向另一个位置

在每个阶段,要决定下一步动作依赖于:

此人当前所关注的纸上某个位置的符号

此人当前思维的状态

(2)图灵机的基本定义

由以下几部分构成

一条无限长的分格纸带,每格可以记录1个符号

一个读写头,可在纸带上左右移动,能读出和擦写格子的字符

一个状态寄存器,记录有限状态中的1个状态

一系列有限的控制规则:

某个状态,读入某个字符时

要改写成什么字符

要如何移动读写头

要改变为什么状态

(3)图灵机例子

判定{a^m·b^m|m>=0}:左半部全是a,右半部全是b,且ab数量相等的字符串

如:ab、aabb、aaaabbbb,进入“接受”状态

如:b、ba、abb,进入“拒绝”状态

规则思路:读写头来回移,将a和b 一一对消,如果最后剩下空白B则接受,否则拒绝

初始状态s0是读写头停在第一个字符处

s1状态是读写头正在右移

s2状态是读写头到字符串最右边

s3状态是读写头正在向回左移

1.1.4 算法和计算复杂性

(1)问题的分类:

what:是什么?面向判断与分类的问题:通过树状的判定分支解决

why:为什么?面向求因与证明的问题:通过有限的公式序列 来解决

how:怎么做?面向过程与构建的问题:通过算法流程来解决

(2)最早的算法:辗转相除法
(3)计算复杂性

可行性

计算复杂性理论研究问题的本质,将各种问题按 照其难易程度分类,研究各类问题的难度级别, 并不关心解决问题的具体方案 而算法则研究问题在不同现实资源约束情况下的 不同解决方案,致力于找到效率最高的方案

(4)不可解决问题

1.1.5 突破计算极限

(1)超大规模分布式计算
(2)新型计算技术:光子计算
(3)新型计算技术:DNA计算
(4)新型计算技术:量子计算
(5)突破计算极限:分布式智慧 -- 众包
(6)游戏化众包:Foldit

1.1.6 什么是抽象和实现

(1)计算机科学研究什么
(2)抽象(Abstraction)

为了更好地处理机器相关性独立性,引 入了“抽象”的概念 。用以从 “ 逻辑 Logical ” 或 者 “ 物 理 "Physical”的不同层次上看待问题及解决 方案 举例:

逻辑对应物理,接口对应实现

  1. 从抽象角度说,司机看到汽车的“逻辑”层次:

司机可以通过操作各个机构来达到运输的目的 (司机上车、点火、换档、踩油门加速、刹车) 这些操纵机构(方向盘、油门、档位)就称为“ 接口 Interface

  1. 从具体角度说,汽车修理工看到了汽车的“物理”层次:

汽车修理工还需要清楚每项功能是如何实现的(如发动机工作原理,档位操作的机械结构,发动机舱内各 处温度如何测量和控制等等 ),这些内部构造构成了汽车的“物理”层次 ;工作过程就称为“实现Implementation 。 计算机

大多数用户只需要掌握计算机是如何使用的,不需要具备计算机内部如何处理的知识,利用这些功能是计算机的“逻辑”层次。

而计算机科学家,程序员,技术支持,系统管理员,就需要掌握硬件结构,操作系统原理,网络协议等各方面低层次细节。内部如何实现是计算机的物理层次

抽象发生在各个不同层次上

如调用库:直接得到结 果,而无需关心其内部是如何实现 。这种功能上的“黑盒子”称作“过程抽象 Procedural Abstraction

抽象与实现:编程

编程是通过一种程序设计语言,将抽象的算法实现为计算机可执行的代码的过程

算法+数据结构 = 程序

程序设计语言实现算法的基本机制

程序设计语言需要为算法的实现提供实现“过程”和“数据”的机制,具体表现为“控制结构”和“数据类型”

程序设计语言均有语句对应控制结构 :顺序处理、分支选择、循环迭代

【数据结构与算法】北大陈斌(1)_第1张图片

程序设计语言提供最基本的数据类型来 表示数据:如整数、字符等 。

【数据结构与算法】北大陈斌(1)_第2张图片

1.1.7 为什么要研究数据结构与算法

(待续)

你可能感兴趣的:(数据结构与算法,数据结构,算法)