名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波·莫听穿林打叶声》
本篇笔记整理:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)
目录
- 0、思维导图
- 1、数据结构
- 1)数据结构是什么?
- 2)算法是什么?
- 2、数据结构三要素
- 1)逻辑结构
- 2)存储(物理)结构
- 3、算法与评价
- 1)算法的特性
- 2)算法效率如何评价?
1️⃣数据结构
数据结构是指一组数据元素的组织方式。数据结构为计算机提供了一种高效、有序且灵活的方式来组织和处理数据。
2️⃣数据结构的作用
决定了数据元素之间的逻辑关系和物理存储结构。
1️⃣算法
算法是指解决特定问题的一系列有限的步骤。
2️⃣算法的作用
算法指导如何有效地在数据结构上执行操作和处理数据,确保高效、优化的数据管理和问题解决。
3)数据结构与算法之间的关系
可以从以下两个角度来理解:
① 数据结构是要处理的信息,而算法则是处理信息的步骤。
② 数据结构是算法的基础,算法是数据结构的实际应用。
逻辑结构:数据对象中数据元素之间的逻辑关系
1️⃣线性结构(“一对一关系”)
由零个或多个数据元素组成的有限序列。序列中第一个元素没有前驱,最后一个元素没有后继,其余每个元素有且只有一个前驱和一个后继。
②栈
仅在表尾进行插入或删除操作的线性表。
特性:后进先出(Last In First Out,LIFO)。
③队列
只允许在一端进行插入操作,在另一端进行删除操作的线性表。
特性:先进先出(First In First Out,FIFO)。
④串
由零个或多个字符组成的有限序列,通常用于表示文本。
①集合
集合是一组不重复元素的结构。它不关心元素的顺序,只关心是否存在某个元素。集合通常用于表示一组唯一项,如字典中的单词或数据库中的用户ID。
②树形结构(“一对多”)
树形结构是一种分层数据结构,其中每个元素称为节点。在树形结构中,除了顶部的节点(根节点)外,每个节点都有一个父节点,并可能有多个子节点。
一种基本的树形结构,其中每个节点可以有任意数量的子节点。树通常用于表示层次结构,如文件系统中的文件和目录。
二叉树
一种特殊类型的树,其中每个节点最多有两个子节点,通常称为左子树和右子树。二叉树广泛应用,特别是在搜索和排序算法中。
③图形结构(“多对多”)
边是有方向的(也有称为"弧"的),从一个节点指向另一个节点。关系是单向的。用于表示具有方向性的关系,如城市之间的行驶路线。
边没有方向,即关系是双向的或无向的。无向图用于表示双向或无特定方向的关系,如社交关系中的朋友关系。
指的是数据元素在存储空间中的存储方式。
①顺序存储
常适用于线性结构
优缺点
a.优点
可以随机访问,访问速度快
存储密度大
b.缺点
内存空间的利用率比较低
插入和删除要移动大量元素,效率低
②链式存储
适用于线性和非线性结构
线性:链表、栈、队列
非线性:树、图
优缺点
a.优点
内存空间利用率高
插入或删除方便,效率高
b.缺点
不能随机访问任意元素
不支持下标访问元素
需要用额外的空间来表达数据之间的逻辑关系
访问元素需从头结点开始遍历整个链表,访问速度较慢。
③索引存储
适用于线性和非线性
线性:顺序表、串
非线性:树、图
优缺点
a.优点
可以快速查找数据元素
检索速度快
b.缺点
存储空间的开销大
在插入和删除数据时要修改索引表,花费时间较多
④散列存储
适用于线性结构和非线性结构
线性:散列表、集合
非线性:树、图
优缺点
a.优点
b.缺点
不支持排序,一般比用线性表存储需要更多的空间
记录的关键字不能重复
可能产生散列冲突
① 有穷性(Finiteness):
② 确定性(Definiteness):
③ 可行性(Effectiveness):
④ 输入(Input):
⑤ 输出(Output):
这些特性共同定义了算法的本质,保证了算法能够有效、可靠地解决问题。
①时间复杂度O(n)
时间复杂度(Time Complexity)是一个算法在处理数据时所消耗时间的量度。它通常表示为算法执行步骤数量与输入数据大小之间的关系。
时间复杂度通常用大写字母 “O” 表示。例如:
例如,一个简单的循环从1遍历到n(n是输入大小)的算法具有 O ( n ) O(n) O(n) 的时间复杂度,而一个嵌套循环(每个循环都从1遍历到n)的算法具有 O ( n 2 ) O(n^2) O(n2) 的时间复杂度。
遇到一些循环时,求解时间复杂度的思路:
单层循环求解方案:设执行次数为 t 去求解
多层循环求解方案:分析循环之间的关系,之后用求和公式求解
②空间复杂度
空间复杂度(Space Complexity)是衡量算法执行过程中所需内存大小的一个指标。与时间复杂度类似,它描述的是算法对存储空间需求与输入数据大小之间的关系。
空间复杂度可以帮助我们理解一个算法在执行过程中需要占用多少内存资源。
上述内容笔记部分图片来源网络,侵删。
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)
点赞加关注,收藏不迷路!本篇文章对你有帮助的话,还请多多点赞支持!