数据结构——python 001 绪论

绪论

什么是数据结构

数据是描述客观事物的数值、字符以及所有能输入计算机中并被计算机程序处理的符号的集合。

数据元素是数据的基本单位

数据对象是性质相同的有限个数据元素的集合,它是数据的一个子集(例如,A班中的每个学生记录都是一个数据元素)。在默认情况下,数据结构中的数据指的都是数据对象。

数据项是具有独立含义的数据最小单位,也成为成员或域(例如,A班中每个数据元素即学生记录是由学号、姓名、性别和班号等数据项组成)

数据结构是指所涉及的数据元素的集合以及数据元素之间的关系,由数据元素之间的关系构成结构,因此可以把数据结构看成带结构的数据元素之间的集合。
数据结构 = 数据对象 + 结构 数据结构 = 数据对象 + 结构 数据结构=数据对象+结构

  • 数据逻辑结构:由数据元素之间的逻辑关系构成,是数据结构在用户面前呈现的形式。
  • 数据存储结构:指数据元素及其关系在计算机存储器中的存储方式,也称为数据的物理结构。
  • 数据运算:指施加在数据上的操作。
数据的逻辑结构(面向用户)
逻辑结构的表示

数据的逻辑结构是面向用户的,它反映数据元素之间的逻辑关系而不是物理关系,是独立于计算机的。

可以采用表格、图等用户容易理解的形式表示。

为了更通用地表述数据的逻辑结构,通常采用二元组表示数据的逻辑结构,一个二元组如下
B = ( D , R ) B = (D, R) B=(D,R)
B是一种逻辑数据结构,D是数据元素的集合,在D上数据元素之间可能存在多种关系,R是所有关系的集合。即:

D={di | 0≤i≤n-1,n≥0}
R={rj | 1≤j≤m,m≥0}

  • R中的某个关系rj(1≤j≤m)是序偶的集合。
  • 对于rj中的任一序偶<x,y>(x,y∈D),把x叫做序偶的第一元素,把y叫做序偶的第二元素,又称序偶的第一元素为第二元素的前驱元素,称第二元素为第一元素的后继元素。如在<x,y>的序偶中,x为y的前驱元素,而y为x的后继元素。
  • 若某个元素没有前驱元素,则称该元素为开始元素;若某个元素没有后继元素,则称该元素为终端元素
  • 对于对称序偶,即满足这样的条件:若<x,y>∈r(r∈R),则<y,x>∈r(x,y∈D),可用圆括号代替尖括号,即(x,y)∈r。
逻辑结构的类型

集合:结构中数据元素之间除了“同属于一个集合”的关系外,没有其他关系,与数学中的集合概念相同。

线性结构:若结构是非空的,则有且只有一个开始元素和终端元素,并且所有元素最多只有一个前驱元素和一个后继元素。

树形结构:若结构是非空的,则有且仅有一个元素为开始元素(也成为根结点),可以有多个终端元素,每个元素有零个或多个后继元素,除开始元素外每个元素有且仅有一个前驱元素。

图形结构:若结构是非空的,则每个元素可以有多个前驱元素和多个后继元素。

数据的存储结构(面向程序员)

存储实现的基本目标:①数据元素的存储 ②数据元素之间关系的存储

逻辑结构是存储结构的本质,设计数据的存储结构称为从逻辑结构到存储器的映射。

顺序存储结构

1.所有元素存放在一片地址连续的存储单元中。

2.逻辑上相邻的元素在物理位置上也是相邻的,所以不需要额外空间表示元素之间的逻辑关系。

链式存储结构

1.把数据元素存放在任意的存储单元中,这组存储单元可以是连续的,也可以是不连续的。

2.通过指针域来反映数据元素的逻辑关系。

4种常用的存储结构类型:1.顺序存储结构 2.链式存储结构 3.索引存储结构 4.哈希(散列)存储结构

算法及其描述

算法是对特定问题求解步骤的一种描述,它是指令的有限序列。

五个重要特性

有穷性:指算法在执行有限的步骤之后自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。

确定性:对于每种情况下执行的操作,在算法中都有确定的含义,不会出现二义性。并且在任何条件下,算法都只有一条执行路径。

可行性:算法的每条指令都是可执行的,即便人借助纸和笔都可以完成。

输入性:算法有零个或多个输入。大多数算法中输入参数是必要的,但对于较简单的算法,如计算1+2的值,不需要任何输入参数,因此算法的输入可以是零个。

输出性:算法至少有一个或多个输出。算法用于某种数据处理,如果没有输出,这样的算法是没有意义的,算法的输出是和输入有着某些特定关系的量。

算法的描述方法:

程序流程图、 自然语言、 程序设计语言、 伪代码(算法语言)

算法分析——时间复杂度,T(n)

算法的设计目标:

正确性、可使用性、可读性、健壮性、高时间性能与低存储量需求

CPU时间 -> 时间性能分析

内存空间 -> 空间性能分析

算法分析目的:分析算法的时空效率以便改进算法性能

方法:事后统计法、 事前分析估算法

时间复杂度

一个算法是由控制结构(顺序、分支、循环三种)和原操作(指固有数据类型的操作,如+、-、*、/ 、++、–等)构成的。算法执行时间取决于两者的综合效果。

O(n)

如果代码循环减半,一定会出现对数情况O(logn)或O(log2n)

小结
  • 时间复杂度是用来估计算法运行时间的一个式子(单位)。
  • 一般来说,时间复杂度高的算法比复杂度低的算法慢。
  • 常见的时间复杂度(按效率排序)
    • O(1)<O(logn)<O(√n)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)<O(2n)<O(n!)
如何简单快速的判断一个时间复杂度

确定问题规模n

循环减半过程——>logn

k层关于n的循环——>nk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值