自学笔记之数据结构(1)--基本概念

本文是作者自学数据结构的笔记,介绍了数据结构的基本概念,包括数据、数据元素、数据对象和数据结构的定义,以及clock()函数、抽象数据类型、算法、空间复杂度和时间复杂度等相关知识。通过渐进表示法分析了复杂度计算,并强调了理解数据结构对优化算法效率的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自学过程中学到的知识点的总结,相当于自己的笔记,一个非本专业的小白,单纯喜欢,文章里面可能会有许多错误,希望看到我的文章发现里面有问题的小天使们,不要羞涩,直接向我砸过来,我一定改……

基本概念


数据结构(没有统一定义):


  • 数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。

  • 数据结构是计算机中存储、组织数据的方式、通常情况下,精心选择的数据结构可以带来最优效率的算法。

  • 数据结构是ADT(抽象数据类型Abstract Data Type)的物理实现。

数据对象在计算机中的组织方式
数据对象必定与一系列加在其上的操作相关联
完成这些操作所用的方法就是算法

数据:

对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称

数据元素:

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

数据对象:

是性质相同的数据元素的集合,是数据的一个子集。

数据结构:

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

clock():

捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。
常数CLK_TCK(或CLOCKS_PER_SEC):机器时钟每秒所走的时钟打点数。
一个过程太短没有打上点可以重复多次调用这一函数然后求平均。

抽象数据类型(Abstract Data Type)

定义:
是指一个数学模型以及定义在该模型上的一组操作。

  • 他的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。

类型名称:矩阵(Matrix)
数据对象集:一个MN的矩阵A mn=(a ij) 由M×N个三元组<a,i,j>构成: a:矩阵元素的值、 i:元素所在的行号、 j:元素所在的列号。
操作集:对于任意矩阵A、B、C、属于Matrix,心及整数i、j、M、N

Matrix Create(int M, int N): // 返回一个M*N的空矩阵;
int GetMaxRow( Matrix A ): // 返回矩阵A的总行数;
int GetMaxCol( Matrix A ): //返回矩阵A的总列数;
ElementType GetEntry( Matrix A, int i,int j): //返回矩阵A的第i行j列元素;
Matrix Add( Matrix A, Matrix B): //如果A和B的行列数一致,则返回矩阵C=A+B,否则返回错误标志;
Matrix Multiply( Matrix A,Matrix B): //如果A的列数等于B的行数,则返回矩阵C=AB,否则返回错误标志;

算法(Algorithm)


是对特定问题求解步骤的一种描述,它是指令的有限序列,其中一条指令表示一个或多个操作。

一个有限指令集在接受一些输入产生输出,一定在有限步骤之后终止,每一条指令必须有充分明确的目标不可以有歧义,在计算机能处理的范围之内, 描述应不依赖于任何一种计算机语言以及具体的实现手段。

特征:

  • 有穷性、确定性、可行性、输入、输出

空间复杂度S(n)

根据算法写成的程序在执行时占用 存储单元 的长度。
长度往往与输入数据的规模有关,过高会导致内存超限造成程序非正常中断。

时间复杂度T(n)

根据算法写成的程序在执行时 耗费时间 的长度。
长度往往与输入数据的规模有关,时间复杂度过高的低效算法可能会一直等下去。

S(n)=C×N
T(n) 数程序中有几次乘法—T(n)=C1n2+C2n
最坏情况复杂度:TWorst(n)
平均复杂度:Tavg(n)
Tavg(n) <= TWorst(n) 平时一般分析最坏复杂度。

复杂度的渐进表示法

  • T(n)=O(f(n)) 表示C>0,n0<0使得当n>=n0时有T(n)<=C·f(n);;即f(n)是T(n)的上限;
  • T(n)=Ω(g(n)) 表示C>0,n0<0使得当n>=n0时有T(n)>=C·g(n);;即g(n)是T(n)的下限;
  • T(n)=Θ(h(n)) 表示同时有T(n)=O(h(n))和T(n)=Ω(h(n));;即是上限也是下限;

复杂度计算

  • 若两段算法分别有复杂度T1(n)=O(f1(n)) 和T2(n)=O(f2(n)) ,则

T1(n) + T2(n) = max(O(f1(n)) ,O(f2(n)))

T1(n) × T2(n) = O(f1(n) × f2(n))

  • 若T(n)是关于n的k阶多项式,那么T(n)=Θ(nk)
  • 一个 for 循环的 时间复杂度=循环次数×循环体代码的复杂度
  • if-else 结构的复杂度取决于 if 的条件判断复杂度和两个分枝部分的复杂度,总体复杂度取三者中最大

遇到n2的复杂度的时一般会将其下降到 nlogn
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值