![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
wancong3
这个作者很懒,什么都没留下…
展开
-
n个球放k个盒子问题归纳
问题描述:有n个球,放进k个盒子,有多少种不同的放法?(球必须全部放在盒子中,不能丢弃)球可能相同,也可能不同,盒子亦然。另外,盒子可能限定可为空,也可能限定不可为空。这样就有8种可能:情况球是否相同盒子是否相同盒子能否为空答案计算时间复杂度1TTFd(n,k)=D(n−k,k)d(n,k)=D(n-k,k)d(n,k)=D(n−k,k)O((n−k)k)...原创 2020-01-19 17:40:51 · 5707 阅读 · 0 评论 -
最小生成树--kruskal算法(并查集+贪心)
忘了定义的来复习一下吧:树是指没有环的连通无向图(这样的树也叫无向树)。生成树是指连通无向图的极小(极小是指边数目最小)连通子图。最小生成树,就是对于一个加权图来说,所有生成树中边的权值之和最小的那一个。显然,n个顶点的图,生成树有n-1条边。我们先说一个重要定理(有兴趣的自己去看证明):一个无向图的最小生成树。必然包含权值最小的边;必然不包含环路中权值最大的边(或者至少有一条这样的边不被包含)...原创 2019-02-10 10:53:23 · 1318 阅读 · 0 评论 -
漫话最短路径(一)--迪杰斯特拉(dijkstra)算法
最短路径是图论中比较有实际意义的一个问题。它属于多项式可解的,也就是说有非常漂亮的算法。目前,单源最短路径比较好的算法有迪杰斯特拉算法(贪心算法,效率最高,局限:图中不可有负权边),贝尔曼-福特算法(可以判断能否求出最短路径并找出负权环,但速度比迪杰斯特拉算法慢)。多源最短路径有弗洛伊德算法(优点:代码简洁,缺点:效率低)。特别地,如果是有向无环图,那么任意两顶点间最短路径和最长路径一定存在(这...原创 2019-08-11 23:26:43 · 557 阅读 · 0 评论 -
漫话最短路径(三)--SPFA算法
上一节,我们讲了求带负权边有向图最短路径的方法–bellman-ford算法。友情链接:bellman-ford算法。上节说到,bellman算法有一个致命缺点:时间复杂度过高,达到了O(VE)O(VE)O(VE)。主要是因为,有些情况下对结点的更新是不必要的。因此,bellman和ford又各自提出了改进方法–队列法。1994年,西南交大的段凡丁又重新发现了该算法,并将其命名为SPFA(sho...原创 2019-08-13 17:08:14 · 370 阅读 · 0 评论 -
漫话最短路径(四)--Floyd(弗洛伊德)算法
前三节,我们讲了三个比较复杂的最短路算法,分别是迪杰斯特拉,bellman-ford和SPFA。dij适合求非负权无向图或有向图最短路径,而后两者适用于有负权边的有向图。这一节再介绍一个叫做Floyd算法。这个弗洛伊德可不是奥地利那个心理学家哦,只是刚好重名而已。相比前三个算法,它非常简洁,思想是简单的动态规划,原理也异常易懂。它是一个多源最短路径算法,运行一次,就可以求出任意两点之间的最短路径...原创 2019-08-13 23:09:15 · 517 阅读 · 0 评论 -
求一个数的因子个数
有一个很简洁的公式:假设一个数的质因子为p1,p2,p3,...,pn(两两不相等)p_1, p_2, p_3, ..., p_n(两两不相等)p1,p2,p3,...,pn(两两不相等)对应的指数分别为a1,a2,a3,...,ana_1, a_2, a_3, ..., a_na1,a2,a3,...,an则它的因子个数为(1+a1)(1+a2)...(1+an)(1+a...原创 2019-08-09 16:35:40 · 9765 阅读 · 4 评论 -
漫话最短路径(二)--bellman-Ford(贝尔曼-福特)算法
上次讲到,没有负权边的图,可以使用迪杰斯特拉算法求出单源最短路径。如果没吃透迪杰斯特拉算法,请移步迪杰斯特拉算法然而,有负权边时,则有可能正确,也有可能不正确。我们可以用下图来解释:比如我们从A出发,按迪杰斯特拉算法,找到最短的是C,路径长度为1。注意,此时C点的路径长度是不能再更改的。从C出发松弛B。则得到A到B C的最短路径长度分别为1 1。但显然,A到C的最短路径长度为2+(-2)=0...原创 2019-08-12 15:11:30 · 1204 阅读 · 0 评论