数据结构大纲

一、数据结构的作用

大规模数据进行合理的规划,提高数据的增、删、查、改等操作效率。

二、时间复杂度

时间复杂度是衡量算法效率的核心指标,用于描述操作次数随数据规模(n)增长的趋势。

1. 基本概念

设数据总量为x,x是足够大的数据,算法为了达到某个目的,执行的核心操作次数为y,时间复杂度用O()表示(忽略常数项和低阶项):看大头

y=ax+b --→y=x                        O(n)

y=ax^2+bx+c  --→y=x^2          O(n^2)

y=a  --→ y=1                            O(1)

y=logax --→y=logx                   O(logn)

01、O(1):操作次数与n无关(如数学公式计算);

02、O(n):操作次数与n成正比(如遍历数组);

03、O(n²):操作次数与n的平方成正比(如嵌套循环);

04、O(log n):操作次数随n增长呈对数级(如每次缩小一半范围的二分查找)。

2.大小关系

O(1)<O(log n)<O(n)<O(n²)

3.举例

算法名称算法描述操作次数推导过程时间复杂度
无序数组查找遍历数组,逐个比对目标值。平均操作次数:y ≈ n/2。O(n)
等差数列求和

算法1:遍历累加,循环n次。 O(n)

算法2:利用求和公式直接计算。O(1)

算法1:y = n → O(n);

算法2:1次操作 → O(1)。

O(n)、O(1)

冒泡排序

相邻元素两两比较,

大值后移,小值往前走;

一轮结束最大的数据到达正确的位置。

操作次数:

y = (n-1) + (n-2) + ... + 1 = n(n-1)/2。

O(n²)
二分查找

数据有序,

每次将查找范围减半(左/右区间)。

操作次数:第k轮后范围为n/2^k,

直到范围为1时k ≈ log₂n。

O(log n)

直接和数据总量有关  O(n)例如:数组的从前到后遍历

k层循环  O(n^k)

循环减半 O(log n) 例如:二分法,每次减半

4.降低时间复杂度

优化方法描述时间复杂度优化过程适用场景与限制
利用排序优化

无序数组转化为有序数组后

可使用二分查找等方法。

排序:

O(n²) / O(n log n)

查找:O(log n)

排序算法的选择

(冒泡排序、快速排序等)

以及后续查找操作适用于有序数组。

数组下标直接访问通过数组下标直接获取数据。O(1)

已知下标或数组中数据分布规律

明确的场景。

哈希算法与哈希表

利用哈希算法构建哈希表

进行查找。

平均:O(1);

最坏:O(n)

快速查找,需解决哈希冲突

(如拉链法)

当链表过长时性能会下降。

三、常见数据结构详解

1.哈希表

哈希表是一种基于哈希函数实现的,用于存储键值对的数据结构。其核心思想是通过哈希函数将键映射到表中的位置,从而快速地插入和查找数据。
基本原理
①哈希函数:将键转换为数组下标(哈希值)的函数。常见的哈希函数有除法取余、乘法取整等。
②数组:用于存储数据的底层结构。哈希函数计算出的哈希值直接决定了数据在数组中的存储位置。

优势:通过 “左小右大” 的规则,使查找操作可以快速缩小范围(类似二分法思想)。例如,查找一个值时,只需与当前节点比较,若小则去左子树,若大则去右子树,无需遍历全部节点。

2. 树和二叉树

树都分为二叉树或者多叉树,左边节点的值小于当前节点,右边节点的值大于当前节点

3. 有序二叉树

特点:左子树节点的值 <当前节点的值;右子树节点的值> 当前节点的值。

优势:通过 “左小右大” 的规则,使查找操作可以快速缩小范围(类似二分法思想)

例如,查找一个值时,只需与当前节点比较,若小则去左子树,若大则去右子树,无需遍历全部节点。

 局限:若插入数据有序(如从小到大插入),可能退化为链表(左子树为空或右子树为空),此时查找效率降为O(n)。

4. 平衡二叉树

定义:在有序二叉树基础上,左子树与右子树的高度差不超过1

平衡调整:当插入或删除数据导致不平衡时,通过旋转操作(LL、RR、LR、RL 四种类型)恢复平衡:

             左左   LL 型:左子树的左子树过高,向右旋转;

                RR 型:右子树的右子树过高,向左旋转;

              左右  LR/RL 型:需先调整子树方向,再整体旋转。

时间复杂度:稳定在O(log n)(n为节点数),因每次操作都能保证树的高度与log n成正比。

缺点:频繁的平衡检测和旋转操作会消耗额外性能,适合对查询效率要求极高的场景。

5. 2-3-4 树(简化版本四阶闭树)

简介:一种多路平衡查找树,是平衡二叉树的扩展(允许一个节点存储多个元素)。

特点:

节点可存储 2-4 个元素(对应 2-3-4 个孩子);

所有叶子节点在同一层,保证树的平衡;

插入、删除时通过分裂或合并节点维持平衡。

二节点:存一个数值,分两个叉

三节点:存两个数值,分三个叉

四节点:存三个数值,分四个叉

6. 红黑树(最优二叉树)

核心特点(保证近似平衡):

1、根节点永远为黑色

2、叶子节点为黑色,且值为null(哨兵节点)

3、红色节点的子节点必为黑色(避免连续红节点);

4、从根节点到任意叶子节点,路径上的黑色节点数量相同(“黑高” 一致)。

在红黑树里没有一条路径比其他路径超过了两倍(最多两倍)时间复杂度稳定在O(logn)

 优势:相比平衡二叉树,红黑树通过 “近似平衡” 降低了维护成本(旋转次数更少),插入、删除效率更高,是实际工程中应用最广的平衡树(如 Java 的TreeMap、HashMap在链表长度超过 8 时转为红黑树)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值