数据结构&算法学习笔记——基本概念

目录

 

什么是数据结构?

基本概念和术语

数据元素

数据对象

数据结构(逻辑结构、存储结构、运算)

逻辑结构

存储结构(物理结构)

运算(算法)

数据类型

抽象数据类型:(Abstract Data Type,ADT)

算法

算法的五大特性

一个好算法的五大特性

算法的分析

时间复杂度

空间复杂度


什么是数据结构?

数据结构是一门研究非数值计算的程序设计问题中,计算机的操作对象以及它们之间的关系和操作的学科。

基本概念和术语

  • 数据元素

定义:是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

说明:

1、数据是信息的描述,数据由若干个数据元素组成

2、如学生信息表中的一条记录,称为一个数据元素

3、数据元素可以由更小的数据项组成(单个属性)

 

  • 数据对象

定义是性质相同的数据元素的集合。

 

  • 数据结构(逻辑结构、存储结构、运算)

定义1:相互之间存在一种或多种特定关系的数据元素的集合

定义2某种逻辑关系组织起来的一批数据,应用计算机语言并按一定的存储表示方式把它们存储在计算机的存储器中,并在其上定义了一个运算的集合

 

  • 逻辑结构

从具体问题抽象出来的数学模型,它与数据的存储无关,简称数据结构(狭义)

定义数据结构中所说的关系实际上是指数据元素之间的逻辑关系,又称此为逻辑结构。

 

定义:数据逻辑结构可以一个二元组来描述

Data_Structure=<D,S>

D是数据元素的有限集,SD上关系的有限集

 

  • 存储结构(物理结构)

数据结构在计算机中的标识(又称映像),数据的逻辑结构在计算机存储器中的实现

定义1数据的逻辑结构在计算机中的表示(又称为映像),称此为物理结构,或称存储结构

说明:

数据存储结构要建立一种映象,对于数据逻辑结构<D ,S>

“数据元素”的映象

对结点集合D的每一个数据元素建立从D到存储器的单元的映射:对于每一个结点d∈D都对应一个唯一的连续存储区域与之对应。

“关系”的映象

每一个关系元组<d1 ,d2>∈S(其中d1, d2∈D是结点), d1 ,d2的逻辑关系应映射为存储单元的地址顺序关系(或链接关系)

 

  • 顺序存储结构:

1、逻辑上相邻的元素存储在物理位置相邻的存储单元中

2、结点间的逻辑后继关系用存储单元的自然顺序关系来表达

  • 链式存储结构:

1、逻辑上相邻的元素不要求其物理位置相邻

2、元素间的相邻关系借助于指示数据元素地址的指针来实现

 

  • 运算(算法)

检索、排序、插入、删除、修改等

 

  • 数据类型

定义:一个值的集合以及定义在这个值集上的一组操作的总称

分类:原子类型和结构类型

 

  • 抽象数据类型:Abstract Data TypeADT

定义:通常由用户定义,用以表示应用问题的数据模型以及定义在该模型上的一组操作

 

抽象数据类型的形式定义:ADT=DSP

其中:D是数据对象;SD上的关系集;P是对D的基本操作集。

说明:类似面向对象程序中“类”的概念,是用户根据实际应用抽象出来的模型。

 

算法

  • 算法的五大特性

1、输入:一个算法有零个或多个输入。

2、输出:一个算法有一个或多个输出。

3、有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。

4、确定性:算法中的每一条指令必须有确切的含义,对于相同的输入只能得到相同的输出。

5、可行性:算法描述的操作可以通过已经实现的基本操作执行有限次来实现。

 

  • 一个好算法的五大特性

1、 正确性(correctness):  算法能满足具体问题的需求,即对于任何合法的输入,算法都会得出正确的结果;对不合法的输入能作出相适应的反映并进行处理

2、 健壮性(robustness): 算法对非法输入的抵抗能力,即对于错误的输入,算法应能识别并做出处理,而不是产生错误动作或陷入瘫痪。

3、可读性算法容易理解和实现,它有助于人们对算法的理解、调试和修改。

4、时间复杂度低运行时间短。  

5、空间复杂度低占用的存储空间尽量少。

 

  • 算法的分析

  • 时间复杂度

 

O符号描述增长率的上限,表示T(n)的增长最多f(n)增长的那样快

大Ω符号用来描述增长率的下界

问题的计算时间下界为W(f(n)),则计算时间复杂性为O(f(n))的算法是最优算法 

Θ符号---运行时间的准确界

若存在三个正的常数c1c2n0,对于任意nn0都有c1×f(n)≥T(n)≥c2×f(n),则称T(n)=Θ(f(n))

一个算法的T(n)=Θ(f(n))意味着该算法在最好和最坏情况下的计算时间就一个常因子范围内而言是相同的 。

 

 

常见函数的时间复杂度按数量递增排列及增长率:

常数阶O(1)

对数阶O(log2n)

线性阶O(n)

线性对数阶O(nlog2n)

平方阶O(n^2)

立方阶O(n^3)

……

k次方阶O(n^k)

指数阶O(2^n)

阶乘阶O(n) 

算数运算:

O(f(n))+O(g(n)) = O(max{ f(n),g(n)})

O(f(m))+O(g(n)) = O(f(m)+g(n))

O(f(n))*O(g(n)) = O(f(n)*g(n))

O(cf(n)) = O(f(n))

g(n)= O(f(n))   O(f(n))+O(g(n)) = O(f(n))

 

T(n)是关于nk阶多项式,那么T(n)=O(nk)

      

证明:取n0=1,n>=n0时,利用T(n)的定义和一个简单的不等式,有

c=|am|+….+|a0定理得证.

事实上,只要将n0取得足够大,可以证明只要c是比|am|大的任意一个常数,此定理都成立。

此定理表明,变量n的固定阶数为m的任一多项式,与此多项式的最高阶n^m同阶

 

  • 空间复杂度

 

猜你喜欢

转载自blog.csdn.net/weixin_45900618/article/details/108449154