王道数据结构笔记-非考研自用

第六章

6.4.1最小生成树

1.定义

2.最小生成树算法

(1)prim(普里姆)算法:先选顶点

(2)Kruskal(克鲁斯卡尔)算法:先选边

(3)算法的实现思想

3.时间复杂度

6.4.2最短路径问题

1.两种问题 

(1)单源最短路径? 

     --BFS算法(无权图)

     --Dijkstra算法(带权图、无权图)

(2)每对顶点之间的最短路径?

      --Floyd算法(带权图、无权图)

2.算法

(1)BFS算法

(2)Dijkstra算法(不适用带负权值的图)

初始化:

计算机实现和时间复杂度:

(3)Floyd算法(不能解决带有负权的回路)

#初始:A(-1)表示不允许有中转点的最短路径矩阵

#0:允许在v0中转后,v2到v1的最短路径是5+6=11,中转点是0

1)遍历上一阶段即初始化阶段留下来的矩阵A(-1),检查其中每个元素(即两点最短路径长度);

2)若找到一个点满足,说明经过v0中转后,i、j两点间的最短路径变小

#1:允许v0、v1为中转点

过程可由#0类推。

#2:允许v0、v1、v2为中转点

过程类推。

核心代码:

复杂度分析

1)时间复杂度:有3层循环,n是节点数。

2)空间复杂度:需要两个辅助矩阵A和Path,大小都是n行n列。

增加节点的实例:不想看 P67 12:50

(4)重点总结

6.4.5有向无环图描述表达式

1.定义

2.描述表达式

不考研先不看 P68 03:20

6.4.6拓扑排序

1.概念补充

(1)AOV网:

2.拓扑排序

(1)代码实现:

省略对两个数组indegree[]、print[]的声明,对栈S的定义(也可用队列或数组):

(2)时间复杂度:

(3)DFS算法实现

还没讲到。

3.逆拓扑排序

(1)代码实现:

自己尝试

(2)时间复杂度:

自己思考

补充:逆邻接表(可回顾懒猫老师的十字链表讲解)

(3)DFS算法实现:

思考:如何判断回路

4.小结

6.4.7关键路径

暂时不看

第七章

7.1查找的基本概念

1.基础概念

2.对查找表的常见操作

3.查找算法的评价指标

太水不小结

7.2.1顺序查找

1.概念

也叫“线性查找”,通常用于线性表。线性表分为顺序存储和链式存储。去看P19

2.代码实现

(1)顺序存储:
(2)顺序存储(“哨兵”):

3.查找效率分析

4.优化顺序查找

(对于有序表)

查找判定树:

(被查的概率不相等)

5.小结

7.2.2折半查找(二分查找)只适用于有序的顺序表

查找成功

查找失败

1.代码实现:

查找表升序排列

2.查找效率分析:

ASL成功

ASL失败

时间复杂度

3.折半查找判定树的构造

mid那个式子表示向下取整

练习/模板:

特性:

4.小结

7.2.3分块查找(不咋考代码)

1.算法思想

2.效率分析:

特殊情况(顺序查找)

特殊情况(折半查找)

小结

7.3红黑树(复杂)

1.特性

是二叉排序树的优化

2.补充概念:黑高

性质

性质2解释补充:

4.基本操作

(1)查找
(2)插入

实例:建议去看他讲的平衡二叉树更好理解         回看印度哥的视频

(3)删除 难!!

5.小结

7.4.1 B树

先空着

7.5.1散列查找

1.定义

2.冲突处理

(1)拉链法

新元素放在链头也可

(2)开放定址法

①线性探测法(常考):

查找操作:

删除操作:

逻辑删除

②平方探测法(常考):

非重点小坑

③伪随机序列法:

(3)再散列法

3.平均查找长度

(1)拉链法

成功

顺序查找的ASL大概是6

最理想的情况是常数级:

失败

装填因子越大说明散列表越满

(2)开放定址法
①线性探测法

成功

失败

②平方探测法

4.设计散列函数——尽可能减少关键字冲突

(1)除留余数法

用质数取模,分布更均匀;但在实际应用中要根据关键字分布特点来设计散列函数(哈希函数)

(2)直接定址法

例题中key=学号

(3)数字分析法

手机号后四位分布更均匀

(4)平方取中法

5.小结

8.1排序的基本概念

1.概念

字面意思,不记

2.算法的评价指标

3.分类

8.2.1插入排序

1.算法思想

2.算法实现

不带哨兵:

带哨兵:

3.效率分析

(1)空间复杂度:O(1)
(2)时间复杂度:

4.优化——折半插入排序

(1)思路

(2)实现

(3)效率

5.练习——对链表的插入排序

代码实现

自己写

效率分析

6.小结

8.2.2希尔排序

1.算法思想

2.代码实现

3.性能分析

(1)空间复杂度:O(1)
(2)时间复杂度:

(3)算法稳定性:不稳定

8.3交换排序

  • 冒泡排序(例子是从后往前的递增)

1.算法思想:

2.代码实现:

                                                                                                                                                           

3.算法性能 :

                                                                                                                                                           

也适用于链表,实现代码自行练习             

4.小结:

                                                                                                                            

  • 快速排序

1.算法思想

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值