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

【数据结构】第一讲 —— 概论

【数据结构】第一讲 —— 概论

文章目录

  • 【数据结构】第一讲 —— 概论
    • 1.1 基本概念和常用术语
    • 1.2 了解数据结构
      • 1. 数据结构
      • 2. 数据的逻辑结构
      • 3. 数据的物理结构(存储结构)
      • 4. 数据的运算
    • 1.3 算法的描述和分析
      • 1.3.1 算法的描述
      • 1.3.2

1.1 基本概念和常用术语

  • 数据的基本单位是数据元素,最小单位是数据项
  • 一个数据元素可以由若干个数据项组成

1.2 了解数据结构

1. 数据结构

定义:数据结构指的是数据元素之间的相互关系,即数据的组织形式
内容:数据的逻辑结构、数据的存储结构、数据的运算

2. 数据的逻辑结构

定义:从逻辑关系上描述数据,与数据元素的存储结构无关,独立于计算机
分类:线性结构和非线性结构

在这里插入图片描述

3. 数据的物理结构(存储结构)

定义:数据元素及其关系在计算机内的存储方式,称为数据的存储结构
实现方法:顺序存储、链接存储、索引存储、散列存储
在这里插入图片描述

4. 数据的运算

定义:对数据元素施加的操作(行为)
内容:最常用的插入、删除、查找、排序等。

插入:增加节点、入栈、入队
删除:删除节点、出栈、出队
查找:二分查找、散列查找
排序:选择排序、快速排序

1.3 算法的描述和分析

1.3.1 算法的描述

算法的定义:
算法是对特定问题的求解方法(步骤)的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作

算法的五大基本准则

  • 有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
  • 确定性:算法中每一条指令必须由确切的含义,不存在二义性
  • 可行性:一个算法是能行的。即算法描述的操作都可以通过已经实现的基本运算执行有限次来实现。
  • 输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象集合
  • 输出:一个算法有一个或多个输出,这些输出是同输入有着某些特定关系的量

1.3.2

算法的分析因素

在这里插入图片描述

健壮性又叫鲁棒性

时间复杂度
算法中基本操作重复执行的次数是问题规模n的某个函数,其时间量度记作T(n) = O(f(n)) ,称作算法的渐进时间复杂度(Asymptotic Time complexity),简称时间复杂度。
一般地,常用最深层循环内地语句中原操作地执行频度(重复执行地次数)来表示。

在这里插入图片描述

for (i = 1; i <= n; ++i) {++x;s+=x;
}

时间复杂度为:O(n) ,即为线性阶

for (i = 1; i <= n; ++i) {for (j = 1; j <= n; ++j) {++x; s+=x}
} 

时间复杂度为:O(n^2) ,即平方阶

for (i = 1; i <= n; ++i) {for (j = 1; j <= n; ++j) {c[i][j] = 0;for (k = 1; k <= n; ++k) {c[i][j] += a[i][k] * b[k][j];}} 
}

需要注意其中 c[i][j] = 0 不能纳入计算时间复杂度的语句。需要计算最深层循环c[i][j] += a[i][k] * b[k][j]; 的语句。
时间复杂度为:O(n^3) ,即为立方阶

空间复杂度

空间复杂度是指算法编写成程序后,在计算机中运行时所需存储空间大小的度量,该存储空间一般包括三个方面:

  • 指令常数变量所占用的存储空间;
  • 输入数据所占用的存储空间;
  • 辅助(存储)空间。

一般地,算法的空间复杂度指的是辅助空间

在这里插入图片描述

http://www.dtcms.com/a/289657.html

相关文章:

  • Shell脚本-sort工具
  • 两个数据表的故事第 2 部分:理解“设计”Dk
  • SElinux和iptables介绍
  • 【Linux操作系统 | 第21篇-进阶篇】Shell编程(下篇)
  • 什么是的优先级反转(Priority Inversion) 和 优先级继承(Priority Inheritance)?
  • 【软件测试】使用ADB命令抓取安卓app日志信息(含指定应用)
  • 【AI论文】递归混合体:学习动态递归深度以实现自适应的令牌级计算
  • faster-lio与fast-lio中如何修改雷达的旋转角度
  • 单片机启动流程和启动文件详解
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 59(题目+回答)
  • 商业秘密保护:从法律理论到企业实战
  • 牛客-删除公共字符
  • 股票账户数据及其数据获取
  • 【时时三省】(C语言基础)字符指针作函数参数
  • 如何系统性备考网络规划师
  • TCL --- 列表_part1
  • 第459场周赛
  • 开源社区贡献指南:如何通过Three.js插件开发提升企业技术影响力?
  • 【JS逆向基础】数据库之mysql
  • Python,GPU编程新范式:CuPy与JAX在大规模科学计算中的对比
  • 【企业架构】TOGAF概念之一
  • Linux基础命令详解:从入门到精通
  • 详解Mysql解决深分页方案
  • 试用SAP BTP 05A:AI服务-Document Information Extraction
  • Python桌面版数独(二版)-增加4X4、6X6
  • 小型支付项目3-5:检测未接收到或未正确处理的支付回调通知
  • 论文笔记:Seed: Bridging Sequence and Diffusion Models for RoadTrajectory Generation
  • LLM指纹底层技术——KV缓存压缩
  • 嵌入式通信DQ单总线协议及UART(一)
  • 是否可以将“进化”应用到软件系统的设计中?