数据结构与算法(绪论)

本文详细介绍了数据结构的基础概念,包括数据项、数据元素和数据对象的区别,以及数据结构的逻辑结构、存储结构(如顺序和链接存储)。同时阐述了数据类型的作用和抽象数据类型的概念。文章还重点讲解了算法的定义、描述方式和分析方法,特别是时间复杂度和空间复杂度的计算。
摘要由CSDN通过智能技术生成

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

1.基本概念和术语

数据项->数据元素->数据对象->数据结构

数据项:构成数据元素的不可分割的最小单位。eg.0002-李明-男-1985/12/25/-党员

数据元素:数据的基本单位。eg.1985/12/25

数据对象:性质相同的数据元素的集合。eg.整数集、字母字符集

2.数据结构

数据结构是带结构的数据元素的集合,包括逻辑结构、存储结构(物理结构)、数据的运算和实现

数据结构的种类:

划分方式一:线性结构、非线性结构

划分方式二:集合结构、线性结构(1v1)、树形结构(1vn)、图状结构(nvn)

逻辑结构:从具体问题抽象出的数学模型,描述数据元素之间的逻辑关系

存储结构:数据元素及其关系在计算机存储器中的存储方式,包括顺序存储结构、链接存储结构、索引存储结构、散列存储结构

1.顺序存储结构:用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系由元素的存储位置表示。c语言中用数组来实现。eg.数组

2.链接存储结构:用一组任意的存储单元存储数据元素数据,元素之间的逻辑关系由指针表示。c语言中用指针来实现。eg.链表

逻辑结构是数据结构的抽象,存储结构是数据结构的实现,二者综合起来建立了数据元素之间的结构关系。

3.数据类型

数据类型:一组性质相同的值的集合以及定义于集合上的一组操作的总称。

作用:约束变量或常量的取值范围和操作。如,int型只能取[-32768,32767],在此基础上进行+-*/%等操作。

抽象数据类型:数学模型以及定义在该模型上的一组操作,包括数据对象、数据关系、基本操作,使用类语言描述。

4.算法

算法:对特定问题的求解方法和步骤的描述。

描述方式:自然语言、流程图、伪代码/类语言、程序代码

特性:有穷性(执行步骤、时间)、确定性(执行路径)、可行性、输入、输出

设计要求:正确性、可读性、健壮性(鲁棒性)(针对异常、错误处理)、高效性

算法效率:时间效率、空间效率。

时间效率的度量方法:事前分析、事后分析

5.算法分析

事前分析方法:算法运行时间=∑每条语句频度*单位时间(语句频度:每条语句的执行次数)

为了便于比较不同算法的时间效率,仅比较它们的数量级。一般不计算所有操作的执行次数,只考虑基本操作的执行次数,记作T(n)

若存在函数f(n),使得lim(n->∞)T(n)/f(n)=C,则称f(n)是T(n)的同数量级函数,记作T(n)=O(f(n)),O(f(n))为算法的渐进时间复杂度(O是数量级的符号),简称时间复杂度

分析算法时间复杂度的基本方法:

1.找出语句频度最大的那条语句作为基本语句;

2.计算基本语句的频度得到问题规模n的函数f(n);

3.取其数量级用符号“O”表示。

//eg.nxn矩阵相乘的算法可描述为:
for(int i=1;i<=n;i++)                          //n+1次
    for(j=1;j<=n;j++){                         //n*(n+1)次
        c[i][j]=0;                             //n*n次
        for(k=0;k<n;k++)                       //n*n*(n+1)次
            c[i][j]=c[i][j]+a[i][j]*b[i][j];   //n*n*n次
    }

T(n)=2n^{3}+3n^{2}+2n+1

T(n)=O(n^{3})

//eg.某些情况T(n)与输入数据集有关,如顺序查找:
for(i=0;i<n;i++)
    if(a[i]==e) return i+1;
return 0;

最好情况:1次,最坏情况:n,平均时间复杂度:O(n)

//易错题,分析一下程序段的时间复杂度:
i=1;
while(i<=n)
    i=i*2;

\because i=2^{x}\leq n,\therefore x\leq \log_{2}n,取最大值f(n)=log_{2}nT(n)=O(log_{2}n)

对于复杂的算法,可以分部然后利用加法法则和乘法法则计算。

加法规则

T(n)=T_{1}(n)+T_{2}(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))

乘法规则

T(n)=T_{1}(n)*T_{2}(n)=O(f(n))*O(g(n))=O(f(n)*g(n))

O(n)复杂度排序(由简单到复杂)

O(1)-O(log_{2}n)-O(n)-O(n log_{2}n)- O(n^{2})-O(n^{3})...O(n^{k})-O(2^{n})

渐进空间复杂度:算法所需存储空间的度量,记作S(n)=O(f(n))

算法占据的空间=本身要占据的(输入/输出、指令、变量、常量)+辅助空间

//eg.将一维数组中的数逆序存放到原数组中
//算法1
for(i=0;i<n/2;i++){
    t=a[i];
    a[i]=a[n-i-1];
    a[n-i-1]=t;
}

//算法2
for(i=0;i<n;i++)
    b[i]=a[n-i-1];
for(i=0;i<n;i++)
    a[i]=b[i];

算法1:S(n)=O(1);算法2:S(n)=O(n)

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值