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

news2024/11/17 16:03:23

绪论

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

数据结构以及相关概念

一、几个重要概念

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)

总结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2133386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++实现单向链表操作(实验3--作业)

一、单向链表介绍 单向链表是一种常见的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含一个数据域和一个指向下一个节点的指针域。 结构特点&#xff1a; 单向链表的节点通过指针链接在一起&#xff0c;形成一个线性的数据结构。链表的头节点通常是一个特殊…

【Google Chrome Windows 64 version及 WebDriver 版本】

最近升级到最新版本Chrome后发现页面居然显示错乱实在无语, 打算退回原来的版本, 又发现官方只提供最新的版本下载, 为了解决这个问题所有收集了Chrome历史版本的下载地址分享给大家. Google Chrome Windows version 64 位 VersionSize下载地址Date104.0.5112.10282.76 MBhtt…

leetcode 2398.预算内的最多机器人数目

2398.预算内的最多机器人数目 题意&#xff1a; 解析&#xff1a; 需要注意的是&#xff0c;题目询问中连续是子数组的意思&#xff0c;即求满足条件的最长子数组的长度。 因为是连续的&#xff0c;所以可以用双指针扫描整个数组。每次将右指针 r r r 向右移动一个位置&…

Vue的缓存组件 | 详解KeepAlive

引言 在Vue开发中&#xff0c;我们经常需要处理大量的组件渲染和销毁操作&#xff0c;这可能会影响应用的性能和用户体验。而Vue的KeepAlive组件提供了一种简便的方式来优化组件的渲染和销毁流程&#xff0c;通过缓存已经渲染的组件来提升应用的性能。 本文将详细介绍Vue的Ke…

2024年职场人士PDF转换的新宠儿

PDF文件已经成为日常收发文件的首选项了&#xff0c;它能保证文件页面内容、版式的统一性&#xff0c;但是不太好编辑&#xff0c;所以我们还需要一些小工具来帮我们解决这个问题。今天我们来探讨一下有什么可以从pdf转换器免费版官网下载的工具。 1.Foxit PDF转换大师 链接一…

BuripSuiteProfessional 抓取HTTPS配置

1.电脑拿开代理 谷歌为例 点击三点-设置 -输入代理--点击代理设置 打开手动代理---IP ,端口如图-点击保存 2.下载CA证书 打开代理后,谷歌浏览器打开,输入/burp--如下图-点击CA证书下载证书 选择下载目录--桌面 3.安装CA证书 谷歌浏览器中点开设置-输入证书-点击安全 点击…

Apollo(阿波罗)架构由浅入深剖析

1.最简架构 如果不考虑分布式微服务架构中的服务发现问题,Apollo 的最简架构如下图所示: 注意事项: ConfigService 是一个独立的微服务,服务于 Client 进行配置获取。 Client 和 ConfigService 保持长连接,通过一种拖拉结合 (push & pull) 的模式,实现配置实时更新…

【鸿蒙】HarmonyOS NEXT星河入门到实战8-自定义组件-组件通信

目录 1、模块化语法 1.1 模块化基本认知 1.2 默认导出和导入 1.2.1 在ets下新建tools目录 1.2.2 在tools下新建moduls.ets文件 1.2.3 index.ets 1.3 按需导出和导入 1.4 全部导入 2、自定义组件 -基础 2.1 自定义组件 - 基本使用 2.2 自定义组件 -通用样式 2.2.1 et…

Wophp靶场寻找漏洞练习

1.命令执行漏洞 打开网站划到最下&#xff0c;此处的输入框存在任意命令执行漏洞 输入命令whoami 2.SQL注入 搜索框存在SQL注入&#xff0c;类型为整数型 最终结果可以找到管理员账户和密码 3.任意文件上传漏洞 在进入管理员后台后&#xff0c;上传木马文件 访问该文件&…

【智路】智路OS airos-edge

欢迎来到智路OS https://gitee.com/ZhiluCommunity/airos-edge 智路OS是全球首个开源开放的智能网联路侧单元操作系统&#xff08;简称“智路OS”&#xff09;&#xff0c; 是以高等级自动驾驶技术为牵引&#xff0c;沉淀出来的“车路云网图”一体化的智能交通基础软件平台。…

基于SpringBoot+Vue的智慧自习室预约管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

基于vue框架的宠物店管理系统的设计与实现4czn0(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,商品分类,服务类型,商品信息,商品订单,宠物服务,服务预约,服务评价,商品咨询 开题报告内容 基于Vue框架的宠物店管理系统的设计与实现开题报告 一、引言 随着宠物行业的蓬勃发展&#xff0c;宠物店作为宠物产品与服务的重要提供…

神经网络通俗理解学习笔记(2)循环神经网络RNN

循环神经网络RNN 序列建模自回归模型隐变量自回归模型 文本数据预处理循环神经网络随时间反向传播循环神经网络代码实现RNN的长期依赖问题 序列建模 序列数据-时间 不同时间上收集到的数据&#xff0c;描述现象随时间变化的情况 时间序列分析是指从时间排列的数据点中抽取有价…

Linux下编译Kratos

本文记录在Linux下编译Kratos的流程。 零、环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1Boost1.74.0oneAPI2024.2.1 一、依赖与代码 1.1 安装依赖 apt-get update apt-get install vim openssh-server openssh-client ssh \build-essential …

Web:HTTP包的相关操作

目录 一、请求包修改页面来源 二、Cookie身份认证 三、XXF修改本地访问 四、向页面同时发出GET和POST请求 一、请求包修改页面来源 题目提示要从 http://localhost:8080/flag3cad.php?a1&#xff0c;请求包中没有指定请求来源&#xff0c;需要指定。 而表示页面来源的字段…

cv2.bitwise_or 提取ROI区域

原图如下所示&#xff0c;想提取圆形ROI区域&#xff0c;红色框 img np.ones(ori_img.shape, dtype"uint8") img img * 255 cv2.circle(img, (50,50), 50, 0, -1) self.bitwiseOr cv2.bitwise_or(ori_img, circle)使用一个和原图尺寸一致的图像做mask,图白圆黑 以…

【Echarts】vue3打开echarts的正确方式

ECharts 是一个功能强大、灵活易用的数据可视化工具&#xff0c;适用于商业报表、数据分析、科研教育等多种场景。那么该如何优雅的使用Echarts呢? 这里以vue3为例。 安装echarts pnpm i echarts封装公用方法 // ts-nocheck import * as echarts from echarts; // 我们这里借…

Naive UI中的时间选择器如何禁止选择今天之前的时间

:is-date-disabled"dateDisabled"<n-date-pickerv-if"formData.timeEndActive"type"date"style"width: 100%"placeholder"请选择任务结束时间"value-format"yyyy-MM-dd 23:59:59":is-date-disabled"dateD…

mysql-搭建主从复制

文章目录 1、准备主服务器2、准备从服务器3、主库配置3.1、创建MySQL主服务器配置文件&#xff1a; 4、从库配置5、搭建主从&测试5.1、使用命令行登录MySQL主服务器5.2、主机中查询master状态&#xff1a;5.3、从机中查询slave状态&#xff1a;5.4、主机中创建slave用户&am…

CSP-J算法基础 树状结构与二叉树

文章目录 前言树状结构树状结构的基本概念&#xff1a;为什么需要树状结构&#xff1f;优点树状结构的示例 二叉树什么是二叉树&#xff1f;二叉树的类型什么样的树不是二叉树&#xff1f;二叉树的五种形态 完全二叉树相关概念完全二叉树的定义&#xff1a; 相关概念1. **高度&…