当前位置: 首页 > news >正文

【数据结构精讲】01绪论(基本概念介绍和时间复杂度计算)

绪论

在绪论这部分会介绍常用的一些基本概念,让同学们对这门课的整体有所了解!

数据结构以及相关概念

一、几个重要概念

1、数据:凡是能输入到计算机并能被计算机程序处理的符号的总称

2、数据元素:数据的基本单位(数据项为最小单位)又可称为记录、结点或顶点,通常作为整体进行处理。

3、数据对象:具有相同性质的数据集合,例如:整数集合,质数集合。

4、数据结构:彼此之间存在一种或者多种特定关系的数据元素的集合。

二、数据结构的基本类型

1、集合(彼此孤立)

在这里插入图片描述

2、线性结构(一对于一关系)

在这里插入图片描述

3、树形结构(一对多关系)

在这里插入图片描述

4、图形结构(网状结构)

在这里插入图片描述

三、数据结构的组成

研究范围——三个方面(逻辑结构、物理结构、运算)

1、逻辑结构(不依赖计算机)

定义:描述数据元素与数据元素之间的某种固有的逻辑关系。通常表示为:B=(D,R)

D:数据元素的有限集 R:关系的有限集

2、物理结构(依赖计算机)

定义:数据的逻辑结构在计算机存储器上的实现

目标:①存储元素②体现元素与元素之间的关系

四种储存方法

(1)顺序存储法:把逻辑上相邻的数据元素存储在物理位置上也相邻的存储单元中。(可以用数组实现)

如:已知Loc(a1)

则Loc(a2)=Loc(a1)+L

Loc(ai)=Loc(a1)+(i-1)L(这样我们就可以随机的访问我们的数组中第i个元素所在的位置)

(2)链式存储法:将储存结点的存储单元一分为二,一部分储存自身的数据信息(数据域),另一部分存储后续结点的地址(指针域)

例:(a1,a2,a3,…,an)对删除、插入方便,查找就比较复杂

在这里插入图片描述

(3)索引储存法:利用结点的索引号来确定地址的方法。

(4)哈希法(散列法):利用结点的值来确定结点地址的方法,其关键是找一个寻求恰当的哈希函数H(key)。

例如:H(key)=key mod 5 key:17,60,29,20,25

用哈希法存储如下:

在这里插入图片描述

3、运算

在数据的逻辑结构上定义的操作算法。例如:建立、查找、插入、删除、排序、遍历等。

四、算法及其评价

1、算法的含义:解决某一特定类型问题的有限运算序列,其实就是解决问题的方法与思路。

2、算法的五大特征

有穷性、确定性 、可行性、输入(可以有0个或多个),输出(1个或者多个)。

3、评价算法的四个标准

正确性、可读性、健壮性、时间复杂度、空间复杂度。

五、时间复杂度的计算

1、时间复杂度的含义

(1)频率:算法中基本语句重复执行的次数,通常用f(n)表示。

(2)时间复杂度:算法中基本语句重复执行的次数的数量集。T(n)=O(f(n))

(3)常用的有:O(1)常量阶,O(n)线性阶,O(log2n)对数阶,O(nlog2n)线性对数阶,O(n2)平方阶等

六、例题

PS:下面的代码块是通过伪代码的形式展示,大家只需要有点C语言基础,看得懂代码的执行流程即可!

(1)

{
int i;
for(i=1;i<=n;i*=2)
x++;
}

解:计算时我们先计算频度f(n),再计算时间复杂度T(n)。

出现 i*=2 的形式一般都是log2n对数阶的形式

f(n)=O(log2n) T(n)=O(log2n)

(2)

{
int i,j;
for(i=1;i<=n;i*=2)
for(j=1;j<=n;j++)
x++;
}

解:对于这道题,有双层循环,我们先假设最外层循环,会执行k次,而最内层循环显而易见外层执行1次,内层执行n次。我们用f(xi)表示当外层循环下标为i时,对应x的执行次数!

则梳理程序流程,当i=1,f(x1)=n;当i=2,f(x2)=n;i=4,f(x4)=n,…,i=k,f(xk)=n

我们做一个数据的累加f(n)=n+n+n+…+n=kn(x每次循环执行n次,一共执行k次,则最终的频率为kn)

我们已经得到f(n)=k*n,现在需要解决的是将k通过n的形式表达出来,再带入f(n)表达式中,就可以得到f(n)完整表达式。

如何求k?

k表示最外层循环的次数,即满足i<=n的i最大值,而i是通过i*=2的形式出现,在(1)中我们也提到i *= 2的形式,i的最大值为log2n,即k=log2n

则f(n)=k*n=nlog2n ,T(n)=O(nlog2n)

总结

通过上面两个关于时间复杂度的计算,我们知道,对于一些比较复杂的程序要分析其时间复杂度的时候

,要先分析程序的执行流程,然后计算其频率,最后再计算时间复杂度!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Android安全】Ubuntu 16.04安装GDB和GEF
  • 机器学习之实战篇——MNIST手写数字0~9识别(全连接神经网络模型)
  • AI与艺术的碰撞:当机器开始创作,创造力何在?
  • 前端性能优化——对节流与防抖的理解
  • CSS基本布局理解——WEB开发系列38
  • JAVA-网络(0907)
  • Loki 分布式日志中心服务
  • 从用户数据到区块链:Facebook如何利用去中心化技术
  • TDengine 签约前晨汽车,解锁智能出行的无限潜力
  • MySQL5.7基于mysqldump、xtrbackup、innobackupex工具进行全量备份/恢复、增量备份/恢复
  • Vue的学习(三)
  • DeepSeek缓存命中技术,成本降低10倍
  • ElementPlus表单验证报错 formEl.validate is not a function
  • 在线小说|基于java的小说阅读系统小程序(源码+数据库+文档)
  • Llama 3.1 大模型指令微调提升中文能力
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • ECS应用管理最佳实践
  • flutter的key在widget list的作用以及必要性
  • IDEA 插件开发入门教程
  • Nacos系列:Nacos的Java SDK使用
  • OSS Web直传 (文件图片)
  • Spring Boot MyBatis配置多种数据库
  • spring学习第二天
  • Sublime text 3 3103 注册码
  • Terraform入门 - 3. 变更基础设施
  • ucore操作系统实验笔记 - 重新理解中断
  • Web设计流程优化:网页效果图设计新思路
  • 基于遗传算法的优化问题求解
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 微信小程序填坑清单
  • 一份游戏开发学习路线
  • 云大使推广中的常见热门问题
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 交换综合实验一
  • $ git push -u origin master 推送到远程库出错
  • (02)vite环境变量配置
  • (1)(1.13) SiK无线电高级配置(六)
  • (1)虚拟机的安装与使用,linux系统安装
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (南京观海微电子)——COF介绍
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net 怎么循环得到数组里的值_关于js数组
  • .Net 执行Linux下多行shell命令方法
  • .NET开源纪元:穿越封闭的迷雾,拥抱开放的星辰
  • .net专家(张羿专栏)
  • /usr/bin/env: node: No such file or directory