- 博客(385)
- 资源 (4)
- 收藏
- 关注
原创 每周一算法:Kruskal算法求最小生成树
Kruskal 算法是一种常见并且好写的最小生成树算法,该算法的基本思想是从小到大加入边。具体来说,维护一个森林,查询两个结点是否在同一棵树中,连接两棵树。这里可以将森林抽象为一堆集合,查询两个元素是否属于同一集合,合并两个集合。其中,查询两点是否连通和连接两点可以使用并查集维护。
2024-05-23 12:20:15 693
原创 每周一算法:Prim算法求最小生成树
在一个无向图中求边权和最小的生成树,即无向连通图的最小生成树(Minimum Spanning Tree,MST)。本文介绍使用Prim算法求最小生成树。
2024-05-23 11:51:48 677
原创 每周题解:牛的旅行
在一个无向图中,编程找出一条连接两个不同牧场的路径,使得连上这条路径后,所有牧场(生成的新牧场和原有牧场)中直径最大的牧场的直径尽可能小。
2024-05-15 23:25:21 659
原创 每周一算法:恰好经过K条边的最短路
给定一张由M条边构成的无向图,求从起点S到终点E恰好经过K条边(可以重复经过)的最短路。可以使用快速幂倍增 + Floyd 求解。
2024-05-15 22:46:22 761
原创 每周一算法:无向图的最小环
给定一张无向图,求图中一个至少包含3个点的环,环上的节点不重复,并且环上的边的长度之和最小。该问题称为无向图的最小环问题,可以使用Floyd算法求解。
2024-05-10 15:02:38 762
原创 每周一算法:传递闭包
在交际网络中,给定若干个元素和若干对二元关系,且关系具有传递性。通过传递性推导出尽量多的元素之间的关系,这类问题被称为传递闭包。使用「Floyd」算法可以解决传递闭包问题
2024-05-09 15:22:54 640
原创 每周一算法:二维差分
要将m块地毯铺在 n×n 的矩阵上,每块地毯会覆盖一个子矩阵,求最终每个格子被多少个地毯覆盖。这样的题目可以用二维差分进行优化。
2024-04-28 11:07:41 997
原创 每周题解:拯救大兵瑞恩
拆点后使用BFS求最短路。如果一个点所表示的含义,已经不能满足题目所求内容时,就需要增加状态,从而满题目需求,这个过程就是拆点。
2024-04-26 21:14:56 656
原创 每周一算法:多起点最短路
反向建边的思想可以解决从多个起点出发到达终点的最短路问题,但是当终点也有多个时,则无法处理。此时,除了「Floyd」算法之外,还可以使用虚拟源点的思想来处理。虚拟源点的基本思想就是设置一个虚拟源点,从该源点到每个起点建立一条权重为0的边。这样,对于每条从起点到终点的最短路,都可以对应一条从虚拟源点出发,经过起点到达终点的最短路。这样就可以利用单源最短路算法求多起点最短路问题。
2024-04-24 10:16:29 780
原创 【每周题解】道路与航线
道路与航线的算法思想是把双向边添加到图中,那么会形成若干个连通块,可以把每个连通块看作一个点,再把单向边添加到图中,会得到一张有向无环图。在有向无环图中,无论边权正负,都可以按照拓扑序进行遍历,在线性时间复杂度内求出单源最短路
2024-04-19 11:24:55 903
原创 每周一算法:负环判断
每周一算法:判断负环可以使用Bellman–Ford算法,时间复杂度为O(nm);也可是使用SPFA,它比Bellman-ford要快上许多倍,最好情况下的复杂度是O(km),这里的k是一个小于等于2的常数,最坏情况也是O(nm)。
2024-04-18 15:34:09 681
原创 每周一算法:旋转游戏
每一步操作有A~H一共8种选择,状态空间随着深度增加呈指数级别增长,但是答案序列不会太长,为了避免搜索超时,可以使用迭代加深A*(IDA*)实现。在每个状态下,如果中间8个格子里出现次数最多的是x,一共出现了m次,那么其余数字全变成x,至少需要8-m次操作。可以用这个作为预估步数。
2024-03-22 14:49:59 703
原创 每周一算法:迭代加深A*
把估价函数与迭代加深的DFS结合就是迭代加深A*(IDA*),基本思想是以迭代加深DFS的搜索框架为基础,把原来简单的深度限制加强为:若当前深度+未来估计步数>深度限制,则立即从当前分支回溯。
2024-03-22 10:10:17 701
原创 每周一算法:双向深搜
双向搜索——从初态和状态出发各搜索一半,产生的两棵深度减半的搜索树,在中间交汇、组成最终答案。避免了层数过深时,分支数量的大规模增长。
2024-03-15 10:54:03 1077
原创 每周一算法:迭代加深搜索
当搜索树规模随着层次的深入增长很快,并且题目能够确保答案在一个较浅层的节点时,就可使采用迭代加深的深度优先搜索算法来解决问题。其基本思想是从小到大限制搜索的深度,如果在当前深度限制下搜索不到答案,就把深度限制增加,重新进行一次搜索。
2024-03-14 23:32:31 854
原创 每周一算法:第K短路
A*算法解决第K短路问题,对每个节点,使用节点到终点的最短路径长度作为预估代价,当终点第K次出队时,就得到了第K短路的长度。
2024-03-08 13:19:08 933
原创 每周一算法:A*(A Star)算法
A*(A Star)算法是一种很常用的路径查找和图形遍历算法,它有较好的性能和准确度。A*算法与BFS类似,不同之处在于A*算法使用优先队列,选取优先级最高的状态作为下一个待扩展的状态。
2024-03-07 23:20:07 1138
原创 NOIP2002提高组T2:字符串变换
朴素版BFS虽然可以满足题目要求,但是要搜索的状态空间大、时间复杂度太高,可以使用双向广搜进行优化。双向广搜,是指从起点和终点同时开始进行BFS,双向奔赴直到找到共同的目标为止。
2024-03-06 10:18:53 946
原创 每周一算法:双向广搜
双向广搜,是指从起点和终点同时开始进行BFS,双向奔赴直到找到共同的目标为止。使用双向广搜可以大大减少了要搜索的状态空间,剪枝效果明显。使用双向广搜时要注意:* 在双向广搜时,优先选择队列中状态数量较少的方向来扩展,可以优化搜索效率* 在扩展时,需要将一层的所有节点扩展完,不能只扩展一个点。
2024-03-01 15:33:55 999
原创 每周一算法:双端队列广搜
对于只包含边权0和1的最短路问题,可以使用双端队列广搜求解。与普通的BFS不同的是:如果扩展到的新节点边权为0时,需要把新节点插入队列的头部。
2024-03-01 12:46:41 1040
原创 NOIP2011提高组day1 - T3:Mayan游戏(玛雅游戏)
NOIP2011提高组day1 - T3:Mayan游戏(玛雅游戏),DFS深度优先搜索,可行性剪枝,优化性剪枝。
2024-01-19 17:22:06 893
scratch3.0文件打包工具-htmlifier
2020-04-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人