kruskal算法_算法设计结课超精简总结

线性结构(排序)
树形结构
图形结构
更多数据结构
算法设计相关(分治、贪心、递归回溯、动态规划)

线性问题(排序)

O(n*n) 选择排序、 插入排序
(O(n*n) 并非一无是处,如插入排序在很多高级排序算法中都是一个很好的优化)O(n*logn) 归并排序、快速排序
归并排序可以快速求解每个数组中逆序数个数
快速排序时partition->随机化->大量重复元素时的优化 其中三路快排挺知名;快速排序还可求解k-selection问题(在无序数组中找到第k大的元素)

树形问题

①堆

堆排序是堆的很小的应用,他更重要的应用是构建优先队列。另外,索引堆也是比较重要且高级的数据结构,它能大大降低prim最小生成树算法和dijkstra算法的时间复杂度。

另外对于树形问题,还有一种二叉查找树的树形结构,它能解决查找问题。如二分查找法,帮助我们利用排序算法对一个排好序的数组进行快速查找。二叉查找树的意义在于可以动态维护数据:我们不仅可以用它查找数据,还可快速进行插入、删除、查找、遍历及解决一些顺序相关问题(如最大值最小值、next、previous等等)。

③并查集

基于rank我们可以一步步优化并查集;路径压缩也是一种很好的优化算法。
kruskal思想解决最小生成树问题就是使用并查集的典型例子。

图论问题

fbc892b81281718b9c19c7eecfa87b2d.png

更多数据结构

a999f4fde22e26204a02fd7286afe627.png

比如对堆来说,除了最大堆最小堆,还有索引堆、斐波那契堆这些更加高级的堆可以加速我们的操作。
而在树这个概念下,我们介绍了二叉搜索树,但二叉搜索树可能会退化成一个链表,类似还有不少比较平衡的解决方式,如红黑树

算法设计相关

分治、贪心(选最大/选最小)、递归回溯(如树和图的遍历/搜索)、动态规划(基于最优子结构)

7591953f50c8a9cff6b5c7577a3528b3.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值