数据结构与算法笔记——基本概念篇


前言

数据结构的基础概念部分


一、计算机解决问题的步骤是什么?

将具体问题抽象建立数学模型
设计解出此数学模型的算法
编程与测试调整

二、数据结构的内容是什么?

逻辑结构:线性结构与非线性结构(集合树形与图状)。
物理(存储)结构:顺序存储、链式存储、索引存储与散列存储(索引对应B树和B+树索引,也是数据库中索引的内存结构,散列对应哈希表结构)。
数据运算:插入、修改、删除、查找与排序。

三、程序 = 数据结构 + 算法

数据结构:将实际问题信息化存储到计算机中,并实现对于数据结构的基本操作。
算法:如何处理这些信息,以解决实际的问题。

四、基本概念

1.数据、数据元素、数据项与数据对象

类比人,湖北人,湖北人的体重与武汉人(具备相同特征的数据元素的集合)

2.数据元素间的四类逻辑结构(基本)

集合、线性、树形与图状

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

数据的物理结构是数据结构在计算机中的表示,包括数据元素的表示和关系的表示。目的将数据的逻辑结构在计算机表示实现。

计算机中表示信息的最小单位(即是二进制数中的一位)
(1)数据元素与位的关系:
数据元素是由若干位组成的一个位串在计算机中表示的,数据元素又称节点或元素。
(2)数据域定义:
数据域 是当数据元素由若干数据项组成时,位串中表示各数据项的子位串。
由(1)(2)可知,元素或节点可以看成数据元素在计算机的映像。

数据元素之间的关系是在计算机中有两种表示方法:顺序映像与非顺序映像。因此,得到两种物理存储结构:顺序存储与链式存储。此外,还有索引存储与散列存储。

4.数据类型与抽象数据类型的区别

数据类型是一个值的集合与定义在该值上的一组的操作的总称。
抽象数据类型是由用户自定义表示应用问题的数据模型。它由基本数据类型构成,并包含一组相关操作。比如c++的抽象类。
抽象数据类型三元组包含数据对象、数据关系与基本操作。抽象数据类型的定义是从数据的逻辑结构和数据运算方面来考虑,并未确定物理存储结构。

5.算法五种基本特性(基本)

有穷性、确定性、可行性、输入、输出

6.设计好的算法要求(重点)

正确性:符合语法,能编译链接
可读性:添加注释,变量命名规范,程序结构化(缩进有序,逻辑清晰,不要重复阐明语句执行含义,而应抓住主要)
健壮性: 需要考虑程序异常的处理,包括输入输出IO异常,临界条件未考虑等,而不至于程序非正常退出
高效率和低存储:需要采用事先估算分析度量算法的时间和空间复杂度

7.算法复杂度和稳定性(重点)

复杂度分为时间复杂度与额外空间复杂度,稳定性是指在排序算法前后相同数据元素的相对顺序不变。

常数操作:是指一个与数据量无关,每次需要固定时间来运行完成的操作
f(N):在算法常数操作数量的表达式中,不要低阶项,只取最高阶项且不要其系数的剩余部分
时间复杂度:在一个算法流程中,常数操作数量的指标,用O(读作big O)来表示,O(f(N))即为一个算法的时间复杂度。

时间复杂度按数量级指标递增的顺序为
常数阶、对数阶、线性阶、线性对数阶、平方阶、立方阶、k次阶、指数阶、阶乘阶。

平均时间复杂度为算法每种情况发生的数学期望。
最好时间复杂度为该算法在不同样本数据中运行的最小的时间复杂度
最坏时间复杂度为该算法在不同样本数据中运行的最大的时间复杂度

如何从时间复杂度角度衡量一个算法的好坏?

1.先看常数操作数量的指标,即算法的时间复杂度
2.再分析不同样本数据下的实际运行时间,即常数项时间

递归函数的复杂度分析:需要借助master公式计算

额外空间复杂度则是指执行该算法过程中所需要开辟的空间数量指标。


总结

学会分析一个算法时间复杂度和额外空间复杂度是学习算法的基本。另外有时还可以借助题目限定的数据范围来辅助分析题目应该采用什么时间复杂度的算法,进而找到对应思路。刷题亦是不断找寻最优解的过程。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值