算法学习dijkstra,dfs,bfs,查并集
dijkstra算法
dijkstra算法是一种用于解决单源最短路径问题的算法,即从一个顶点到其他所有顶点的最短路径。
dijkstra算法的基本思想是:从源点开始,每次选择距离源点最近的顶点,将其加入到已访问的顶点集合中,然后更新其他顶点的距离。
dijkstra算法的时间复杂度为O(n^2),其中n为顶点数。
算法步骤
- 初始化距离数组dist,dist[i]表示源点到顶点i的最短距离,初始时dist[i]为无穷大,dist[source]为0。
- 初始化已访问顶点集合visited,初始时visited为空。
- 重复以下步骤n次(n为顶点数):
- 从距离数组dist中选择距离源点最近的顶点u(使用优先队列),将其加入到已访问顶点集合visited中。
- 更新其他顶点的距离(根据题目,有不同的更新方式):如果顶点v未被访问,且通过u到达v的距离小于当前dist[v],则更新dist[v]为通过u到达v的距离。
- 最终dist数组中的值即为源点到其他所有顶点的最短距离。
代码实现
1 | |
dfs算法(深度优先搜索)
dfs算法是一种用于遍历或搜索树或图的算法。
dfs算法的基本思想是:从起始顶点开始,每次选择一个未被访问的邻接顶点,将其加入到已访问的顶点集合中,然后递归地访问该顶点的未被访问的邻接顶点。
dfs算法的时间复杂度为O(n+m),其中n为顶点数,m为边数。
算法步骤
- 初始化已访问顶点集合visited,初始时visited为空。
- 从起始顶点开始,执行以下步骤:
- 如果当前顶点未被访问,则将其加入到已访问顶点集合visited中。
- 递归地访问当前顶点的未被访问的邻接顶点。
- 重复步骤2,直到所有顶点都被访问。
bfs算法(广度优先搜索)
bfs算法是一种用于遍历或搜索树或图的算法。
bfs算法的基本思想是:从起始顶点开始,每次选择距离源点最近的顶点,将其加入到已访问的顶点集合中,然后递归地访问该顶点的未被访问的邻接顶点。
bfs算法的时间复杂度为O(n+m),其中n为顶点数,m为边数。
算法步骤
- 初始化已访问顶点集合visited,初始时visited为空。
- 从起始顶点开始,执行以下步骤:
- 如果当前顶点未被访问,则将其加入到已访问顶点集合visited中。
- 将当前顶点的未被访问的邻接顶点加入到队列中。
- 重复步骤2,直到所有顶点都被访问。
dfs和bfs的区别
- dfs是一种递归算法,而bfs是一种非递归算法。
- dfs的搜索顺序是深度优先,而bfs的搜索顺序是广度优先。
查并集算法
查并集算法是一种用于处理不相交集合的数据结构。
查并集算法的基本操作包括:查找(find)和合并(merge)。
查找操作用于确定一个元素属于哪个集合,合并操作用于将两个集合合并为一个集合。
算法步骤
- 初始化每个元素的父节点为自身,表示每个元素都是一个独立的集合。
- 查找操作:对于一个元素x,递归地查找其父节点,直到找到根节点。
- 合并操作:对于两个元素x和y,分别查找它们的根节点rx和ry,如果rx和ry不同,则将ry的父节点设为rx,表示将两个集合合并为一个集合。
变式
简单的查并集算法查找和合并操作的时间复杂度较高,可以考虑带秩优化,即将树的高度限制在一个较小的范围内,从而提高查找和合并操作的效率。
算法学习dijkstra,dfs,bfs,查并集
http://example.com/2025/10/06/25_10_06算法学习/