《数据结构与算法-Python语言描述》读书笔记(1)第1章绪论(关键词:数据结构/算法/Python/时间复杂度/空间复杂度)

第1章 绪论

1.1 计算机问题求解

1.1.1 程序开发过程

1.2 问题求解:交叉路口的红绿灯安排

《数据结构与算法-Python语言描述》读书笔记(1)第1章绪论(关键词:数据结构/算法/Python/时间复杂度/空间复杂度)_第1张图片

《数据结构与算法-Python语言描述》读书笔记(1)第1章绪论(关键词:数据结构/算法/Python/时间复杂度/空间复杂度)_第2张图片

1.2.1 问题分析和严格化

《数据结构与算法-Python语言描述》读书笔记(1)第1章绪论(关键词:数据结构/算法/Python/时间复杂度/空间复杂度)_第3张图片
(读者笔记:以上就是“抽象”,将问题符号化、抽象化、简单化!)

1.2.2 图的顶点分组和算法

1.2.3 算法的精化和Python描述

1.2.4 讨论

1.3 算法和算法分析

1.3.1 问题、问题实例和算法

算法的性质
  • 有穷性(算法描述的有穷性)
  • 能行性:算法中指令(语句)的含义严格而且简单明确,所描述的操作(计算)过程可以完全机械地进行。
  • 确定性:给定输入,将产生唯一确定的一个动作序列。
  • 终止性(行为的有穷性):对问题的任何实例,算法产生的动作序列都是有穷的,它或者终止并给出该问题实例的解;或者终止并指出给定的输入无解。
  • 输入/输出:有明确定义的输入和输出。
算法的描述

《数据结构与算法-Python语言描述》读书笔记(1)第1章绪论(关键词:数据结构/算法/Python/时间复杂度/空间复杂度)_第4张图片

算法和程序
算法设计和分析

算法设计中一些常见的通用想法,可以成为算法设计模式。常见模式包括:

1.3.2 算法的代价及其度量

度量的单位和方法
与实例和规模有关的两个问题
常量因子和算法复杂度
算法复杂度的意义
解决同一问题的不同算法

1.3.3 算法分析

基本循环程序

递归算法的复杂度

1.3.4 Python程序的计算代价(复杂度)

时间开销

Python程序中的很多基本操作不是常量时间。
下面是一些基本情况:
《数据结构与算法-Python语言描述》读书笔记(1)第1章绪论(关键词:数据结构/算法/Python/时间复杂度/空间复杂度)_第5张图片
这里先列举一些具体的操作:
《数据结构与算法-Python语言描述》读书笔记(1)第1章绪论(关键词:数据结构/算法/Python/时间复杂度/空间复杂度)_第6张图片
(读者补充:以上的“关键码”,应该是指字典的“键”(key)。)

空间开销

《数据结构与算法-Python语言描述》读书笔记(1)第1章绪论(关键词:数据结构/算法/Python/时间复杂度/空间复杂度)_第7张图片

Python程序的时间复杂度实例
程序实现和效率陷阱

1.4 数据结构

1.4.1 数据结构及其分类

信息、数据和数据结构
抽象定义与重要类别

人们总结出的一批特别有用的典型数据结构,主要有:

算法和程序中的数据结构

用数据结构存储信息,不仅要考虑如何把抽象的数据结构映射到计算机或程序可以表达和操作的数据存储形式,还要考虑作用于具体数据结构的各种操作,如结构的建立,其中元素的访问、插入或删除元素等一般的操作。在实际使用中,经常还需要考虑一些面向具体应用问题的特殊操作。

结构性和功能性的数据结构

结构性的数据结构:如线性结构树结构图结构。这些数据结构都对数据元素之间的相互关系做出了一些规定元素之间确实满足某种关系才能被称为线性结构树结构等。这些数据结构的最重要的特征就是它们的结构

(这一段应该说的是“功能性的数据结构”)本书中还将讨论另一类数据结构,它们并没有对其元素的相互关系提出任何结构性的规定,而是要求实现某种计算中非常有用的功能。作为可以包含一批数据元素的结构最基本的要求就是支持元素的存储使用(使用也常称为元素访问)。这个基本要求实际上是功能性的要求,而非结构性的要求,因为它完全不涉及元素如何存储、元素之间如何关联

补充:支持元素存储访问数据结构被称为容器

下面的讨论中,涉及的功能性数据结构包括队列优先队列字典等。这些结构都支持以某一套方式存储和访问元素(包括删除元素)。

由于只有功能要求,这类数据结构可以采用任何技术实现。实际中人们通常首先把这类结构*映射到某种结构性数据结构而后采用相应的实现技术*。

1.4.2 计算机内存对象表示

内存单元和地址

对象存储和管理


一个程序在运行中将不断建立一些对象并使用它们。建立的每个对象都有一个确定的唯一标识,用于识别使用这个对象。在对象的存续期间,其标识保持不变,这也是一个基本原则。例如,Python**标准函数id**取得对象的标识内置操作isis not通过比较标识的方式判断是否同一个对象。在具体系统里用什么作为对象标识,是系统设计者的考虑和选择。最简单的方式就是直接使用对象的存储位置内存地址)。这显然是一种唯一标识,因为不会有两个不同对象存放在同一个存储位置

对象的访问

在编程语言的层面,知道了一个对象的标识就可以直接访问(使用)它。已知对象标识无论它是否直接为对象地址),访问相应对象的操作可以直接映射已知地址访问内存单元,这种操作可以在常量时间完成(是O(1)时间操作)。

对象关联的表示

在计算机内存里表示数据元素之间的联系,只有两种基本技术:
《数据结构与算法-Python语言描述》读书笔记(1)第1章绪论(关键词:数据结构/算法/Python/时间复杂度/空间复杂度)_第8张图片
(读者补充:“对象关联的表示”这一小节建议详细看,我就不截图了。)

1.4.3 Python对象和数据结构

Python变量和对象

高级语言里的变量全局变量、函数的局部变量和参数)是内存其地址抽象变量本身也需要在内存中安排位置,每个变量占用若干存储单元。语言系统需要有一套系统化的安排方式处理这个问题,下面的讨论中不考虑。为了理解程序的行为,只需要假定在程序运行中总能找到根据作用域可见的变量取得或修改它们的值

Python对象的表示

Python语言的实现基于一套精心设计的链接结构变量其值对象关联通过链接的方式实现对象之间的联系同样也可以通过链接。一个复杂对象内部也可能包含几个子部分,相互之间通过链接建立联系。例如,如果一个list里包含了10个字符串,那么在实现中,在这个list对象里就会记录这10个字符串的链接关系(参看图1.10)。
《数据结构与算法-Python语言描述》读书笔记(1)第1章绪论(关键词:数据结构/算法/Python/时间复杂度/空间复杂度)_第9张图片

Python的几个标准数据类型

(读者补充:这里的“关键码”,应该是指“键”,即key。)

练习

未完待续。。

参考文献:
1.《数据结构与算法-Python语言描述》。

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