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

数据结构、算法和STL简介 【复习笔记】

1. 数据结构

1.1 数据结构的定义和背景

定义: 数据结构是一种数据组织、管理和存储的格式。它是相互间存在一种或多种特定关系的数据元素的集合

背景: 随着计算机的发展,需要处理的数据越来越大、越来越复杂,这需要我们研究数据的特性,提高计算机处理数据的效率

数据结构即研究如何组织数据、如何管理数据和如何将数据存储在计算机里

1.2 数据结构三要素

1.2.1 逻辑结构

数据中各种元素间逻辑关系

常见逻辑结构:

1.集合:所以数据在一个集合中,无其他的联系(随机,无规律)

2.线性结构:一对一的关系(像一条线一样)

3.树形结构:一对多关系(如大树的主干和分支)

4.图结构:多对多关系

1.2.2 存储结构(物理结构)

数据在计算机中的存储方式

主要的存储结构:

1. 顺序存储:逻辑上相邻的元素在物理上也存储在相邻单元(数组)

2. 链式结构:通过指针存储上一个或下一个元素的地址,像一条链子一样(链表)

1.2.3 数据运算

数据结构的实现基于数据结构的各种操作

分别对应:创建+增删查改+其他

2. 算法

2.1 算法的定义

算法是为解决一个特定问题而设计的一系列精确的、可执行的步骤和规则的集合,它可以用某种程序设计语言来描述和实现,并且在有限的时间和空间内完成任务(算法可以没有输入,但一定有输出)

可以简单看作:初始数据 -> 算法 -> 目标数据

2.2 算法好坏的衡量

这取决于算法中语句的执行次数需求资源个数

如果根据算法执行中对需求资源个数(即对空间的消耗)判断,这就是空间复杂度

如果根据算法执行中对执行次数(即需要的时间)判断,这就是时间复杂度

2.2.1 时间复杂度

时间复杂度是一个函数式T(N)

void fun1(int N)
{int count1 = 0;int count2 = 1000;int count3 = 0;for (int a = 0; a < N; a++){count1++;  //执行 n 次}for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){count1++;  //执行n^2次}}while (count2--){count3++;   //执行1000次}
}//T(N)=N^2+n+1000

注:关于log N \ log2  N \ lg N,当 N 接近无穷大时,底数大小对结果无影响,可以将底数2省略不写

2.2.2 大O表示法

上面案例,随着N增大,对结果影响最大的是N^2,其余项可以忽略不计

大O表示法中,一般把T(N)中对结果影响不大的项忽略,即上面案例看作O(N^2)

大O表示法规定:1. 时间复杂度T(N),只保留最高项,去掉最低项

                             2. 如果最高项不是1,去除这个项目的常数系数

                             3. T(N)中只有常数项,用1取代所以常数

2.2.3 递归算法的时间复杂度

单次递归时间 * 总的递归次数(这只是简单的估算方式)

严谨的计算方式要利用主定理求得

2.2.4 空间复杂度

const int N = 15;
int arr[N]; //需要大小和问题规模一样大的数组,空间复杂度为O(N)int main()
{int n = 0;cin >> n;for (int i = 0; i < n; i++){cin >> arr[i];}
}

递归算法的空间复杂度同理:单次递归空间复杂度*总的递归次数

2.2.5 常见的时间复杂度

O(1) < O(log N) < O (N) < O(Nlog N) < O (N^2) <O (N^3) < O(2^N) < O( N!)

2.2.6 时间限制和空间限制

1. c++设定1到2秒的时间限制,控制执行次数在 10^7 到 10^8 之间

2. 空间限制在128MB 或 256MB,可以开一个3*10^7大小的 int 类型数组,或 5000*5000大小的二维数组

3. STL

3.1 STL的定义

STL即标准模板库,是c++标准库的一部分,含有一些模板化的数据结构和算法


http://www.mrgr.cn/news/91952.html

相关文章:

  • 【Akashic Records】THE EGG
  • 正确清理C盘空间
  • bind()函数的概念和使用案例
  • windows11那些事
  • HTML项目一键打包工具:HTML2EXE 最新版
  • socket()函数的概念和使用案例
  • Spring源码分析の依赖注入(byNamebyType模式)
  • 【面试系列】Java开发--AI常见面试题
  • 设计心得——解耦的实现技术
  • Python采用DeepSeekR1本地部署+本地API接口实现简单对话
  • FTP 实验(ENSP模拟器实现)
  • C++ DAY3
  • 个人环境配置--安装记录
  • 虚拟机从零实现机器人控制
  • 深入理解设计模式之解释器模式
  • Java Web开发实战与项目——开发一个在线论坛系统
  • 一个解析cyber record文件的python示例脚本
  • 分布式事务-本地消息表学习与落地方案
  • python使用httpx_sse调用sse流式接口对响应格式为application/json的错误信息的处理
  • Swiper插件的运用和学习