- 博客(11)
- 资源 (3)
- 收藏
- 关注

原创 数据结构与算法 —— 最短路径Dijkstra算法(迪杰斯特拉)详细图解以及python实现
前两章我们讲到了关于图的基本知识,和广度/深度优先搜索。本章,我们将介绍加权图和最短路径的相关知识。最短路径和最小生成树是图论中常见的问题。最短路径是指在一个图中找到两个节点之间的最短路径,最小生成树是指在一个图中找到一个连通子图,使得所有节点都能够互相到达,且总权值最小。最短路径算法常见的有floyd算法(弗洛伊德算法)和 dijkstra算法(迪杰斯特拉)。本文只介绍dijkstra算法。最短路径运用非常广泛,比如在导航系统中,确定两个地点间哪条路线最短;
2023-04-28 18:07:29
20149
2
原创 最大流之Ford-Fulkerson和Edmonds-Karp算法
Ford-Fulkerson 算法的基本思想是不断寻找从源点(source)到汇点(sink)的增广路径(augmenting path),这些路径通过所谓的残余网络来找到。这种方法确保了每次都能找到涉及边数最少的路径,这有助于更快地达到最大流,因为它减少了反复遍历同一路径的次数,从而避免了 Ford-Fulkerson 方法中可能的高复杂度。:如果在原始网络中有从 u 到 v 的边,那么在残余网络中就会有从 v 到 u 的反向边,其残余容量表示可以从 v 到 u 回退多少流量。
2024-04-12 19:46:37
994
原创 贪心/分治/动态规划 -- 总结
动态规划通过将大问题分解为相互关联的较小子问题,并存储这些子问题的解(通常称为“状态”),避免重复计算,最终组合子问题的解以求得原问题的解。分治算法通过将原问题分解成几个规模较小但类似于原问题的子问题,递归地解决这些子问题,然后再合并这些子问题的解来解决原问题。当问题显示出最优子结构和重叠子问题的特性时,即同一个小问题在问题的求解过程中被多次计算,DP是非常合适的。在某些情况下,子问题会重叠,分治算法会重复解决相同的子问题,这时就不如动态规划高效。分治算法很适合用递归方法实现,可以并行处理子问题。
2024-04-04 16:01:49
226
原创 动态规划1(DP)
动态规划(Dynamic Programming,DP)通过将复杂问题分解为更小的子问题,并存储这些子问题的解(通常是在表格中),从而避免重复计算,提高了算法的效率。动态规划与贪心算法、分治算法等其他优化算法相比,最大的特点是它对子问题的全面考察。贪心算法每步都做出在当前看来最好的选择,可能无法达到全局最优;分治算法将问题分解后独立解决各子问题,不适用于子问题重叠的情况。而动态规划通过存储子问题的解来避免重复计算,旨在找到全局最优解。
2024-04-04 15:27:57
950
原创 分而治之--分治算法
分治算法通常遵循一种通用的模式:在解决规模较大的问题时,将其分解为若干规模较小的相似子问题,递归解决这些子问题,然后将各子问题的解合并为原问题的解,即分而治之。
2024-04-03 17:28:35
421
1
原创 贪心/贪婪算法
贪心算法的优点在于实现简单,解题速度快,在具有贪心性质的问题中可以得到最优解。但是缺点也很明显,在每一步只选择局部最优解的前提下,无法最终解保证一定是全局最优解。
2024-04-03 16:58:40
428
原创 数据结构与算法 —— 树的基本操作以及实现(python实现)
树是由节点和边组成的非线性数据结构。其结构可以用来表示层次关系,例如文件系统的目录结构、公司的组织架构等。本文用python来实现一颗通用树,可以用于构建任何类型的树,如二叉树、多叉树等。定义了一个类Node,并使用Generic[T]表示它是一个泛型类,类型参数为T。在类中定义了四个属性,分别是_value_parent_children和。其中,_value用于存储节点的值,_parent用于存储节点的父节点,_children用于存储节点的子节点列表,用于存储节点的子树大小。__init__
2023-05-05 21:18:11
3094
1
原创 数据结构与算法 —— 最小生成树Prim算法和Kruskal算法详细图解以及python实现
上一章我们整理了最短路径中的Dijkstra算法。现在我们整理最小生成树中Prim算法(普里姆算法)和Kruskal算法(克鲁斯卡尔算法)。最小生成树也是图论中常见问题,其指的是在一个图中找到一个连通子图,使得所有节点都能够互相到达,且总权值最小。最小生成树的例子在生活中也很常见,比如城市的公交线路系统需要规划如何走完一趟路径和是最短的,或者快递公司如何给不同住址的客户送货才能是最短的路径。2. Prim算法(普里姆算法)2.1 Prim算法历史。
2023-05-04 21:50:57
4239
1
原创 数据结构与算法 —— 图的搜索算法(广度/深度优先搜索)以及python实现
图的搜索算法:图的搜索是指从图的某个顶点出发,沿着边连接的其他顶点,最后到达目标顶点的过程。根据搜索过程中访问节点的顺序,图搜索算法可以分为“广度优先搜索”和“深度优先搜索”两类。一、广度优先搜索(这两种搜索算法的核心操作都是搜索和扩展节点,只是在选择下一个节点的方式上有所不同。广度优先搜索选择最近扩展的节点的相邻节点作为下一个要扩展的节点,而深度优先搜索则选择当前节点的一个未被访问的子节点作为下一个要扩展的节点。
2023-04-21 15:24:36
4330
2
原创 数据结构与算法 —— 图 (Graph)的基本介绍
目录图的定义有向图和无向图图的概念图的存储图的基本操作图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E)- G表示一个图,- V(Vertex)表示顶点的有穷非空集合,- E表示图中边(Edge)的集合。
2023-04-20 08:00:00
1611
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人