数据结构与算法—Python版(1概述)

1 概述

目录

1 概述

1.1数据时代

1.2 问题求解的计算之道

抽象的“计算”概念:

关于“计算”的数学模型

1.3图灵机计算模型

图灵机Turing Machine基本概念

图灵机由以下几部分构成

一个图灵机例子

1.4算法和计算复杂性

问题的分类

计算复杂性与算法

不可计算问题

1.5突破计算极限

1.6什么是抽象和实现

抽象(Abstraction)

算法+数据结构=程序

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

清晰高效地表达算法

据抽象:ADT抽象数据类型

为什么要研究和学习算法


1.1数据时代

人类在各个领域的生产生活无时不刻在产生着巨量的数据。

1.2 问题求解的计算之道

在长期的发展过程中,人们把已经解决的问题逐渐表述为数学命题与模型尚未解决的问题,人们试图通过数学建模,采用 数学工具来解决; 无法解决的问题,人们试图转换表述、明晰问题 来部分解决。

why:

❖ 数学具有清晰明确的符号表述体系

❖ 严密确定的推理系统

❖ 但正如科学不是万能的,数学也不是万能的

有些问题天然无法明确表述(主观、价值观、意识形 态、哲学问题等)

有些可明确表述的问题仍然无法解决

抽象的“计算”概念:

由有限数量的明确有限指令构成;

指令执行在有限步骤后终止;

指令每次执行都总能得到唯一结果;

原则上可以由人单独采用纸笔完成,而不依靠其 它辅助;

每条指令可以机械地被精确执行,而不需要智慧 和灵感。

关于“计算”的数学模型

哥德尔和克莱尼的递归函数模型

丘奇的Lambda演算模型

波斯特的Post机模型

图灵的图灵机模型

研究证明,这几个“基于有穷观点的能行方法” 的计算模型,全都是等价的。

1.3图灵机计算模型

图灵机Turing Machine基本概念

❖在纸上写上或擦除某个符号;

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

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

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

    (b)此人当前思维的状态。

图灵机由以下几部分构成

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

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

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

一系列有限的控制规则:• 某个状态,读入某个字符时: • 要改写成什么字符 • 要如何移动读写头 • 要改变为什么状态

一个图灵机例子

数据结构与算法—Python版(1概述)_第1张图片

数据结构与算法—Python版(1概述)_第2张图片

数据结构与算法—Python版(1概述)_第3张图片

1.4算法和计算复杂性

问题的分类

分类问题:可以通过树状的判定分支解决;

证明问题:可以通过有限的公式序列 来解决;

过程问题:可以通过算法流程来解决。解决问题的过程:算法和相 应数据结构的研究,即为本课主要内容

计算复杂性与算法

❖计算复杂性理论研究问题的本质,将各种问题按 照其难易程度分类,研究各类问题的难度级别, 并不关心解决问题的具体方案

❖ 而算法则研究问题在不同现实资源约束情况下的 不同解决方案,致力于找到效率最高的方案

不可计算问题

有不少定义清晰,但无法解决的问题 。并不是尚未找到解,而是在“基于有穷观点的能 行方法”的条件下,已被证明并不存在解决方案。

例如:停机问题:判定任何一个程序在任何一个 输入情况下是否能够停机。

不可计算数:几乎所有的无理数,都无法 通过算法来确定其任意一位是什么数字 ,可计算数很少:如圆周率Pi,自然对数的底e

1.5突破计算极限

1、超大规模分布式计算

BOINC也是公众参与科学计算的超大型分布式系 统,托管了众多学科的计算搜寻项目

2、新型计算技术:光子计算

3、新型计算技术:DNA计算

4、新型计算技术:量子计算

5、分布式智慧——众包

❖突破算法的约束 ,相比分布式计算的闲置计算力 ,革命性地利用了空闲智力

1.6什么是抽象和实现

抽象(Abstraction)

❖为了更好地处理机器相关性或独立性,引 入了“抽象”的概念

❖用以从 “ 逻 辑 Logical ” 或 者 “ 物 理 Physical”的不同层次上看待问题及解决 方案

算法+数据结构=程序

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

清晰高效地表达算法

为了控制问题和问题解决过程的复杂度,利用抽 象来保持问题的“整体感” 而不会陷入到过多的细节中去 。这要求对现实问题进行建模的时候,对算法所要 处理的数据,也要保持与问题本身的一致性,不要有太多与问题无关的细节。

据抽象:ADT抽象数据类型

❖同一ADT可以采用不同的数据结构来实现;

❖采用程序设计语言的控制结构和基本数据 类型来实现ADT所提供的逻辑接口 属于ADT的“物理”层次。

❖对数据实现“逻辑”层次和“物理”层次 的分离,可以定义复杂的数据模型来解决 问题,而不需要立即考虑此模型如何实现

为什么要研究和学习算法

❖首先,学习各种不同问题的解决方案有助于我们在面对未知问题的时候,能够根据类 似问题的解决方案来更好解决 ;

❖其次,各种算法通常有较大差异我们可以通过算法分析技术来评判算法本身特性 而不仅仅根据实现算法的程序在特定机器和特定 数据上运行的表现来评判它 即使同一个程序,在不同的运行环境和输入数据 的情况下,其表现的差异可能也会很大。

 

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