我没有发现不相交集在C#中的任何良好实现,而是使用Union实现,所以我实现了自己的。它在O(log )时间复杂度中工作。
在C#中是否有更快的(或内置的实现)或者我可以使用自己的实现?
class DisjointSetUBR
{
int[] parent;
int[] rank; // height of tree
public DisjointSetUBR(int[] arr)
{
parent = new int[arr.Length +1];
rank = new int[arr.Length + 1];
}
I studied the union find algo and found it is very useful in following ways.
to find out if 2 node are connected or not
to compress the path. (save space)
if the problem is to find if 2 node connected or not , then we can use union
find.But if we have to find out the path between
当图有多个连通分量时,我不知道如何实现Kruskal算法
根据我对Kruskal算法的理解,它多次向集合中添加最小边。然后,当所有的边都被检查时,它会返回一组最充分的边。
但是,如果我的图是断开的呢?说我有:
A - B - C - D
E - F
假设成本( are )=成本(E)= 1,其余的边大于1。
当我运行Kruskal时,我会得到所有的边的成本,但是我想得到每个连接组件的成本,所以我对所有连接的组件做了一个平均最小的成本。
我有一个图G(V,E),如果存在,我必须计算包含e (边属于E)的最小生成树。我在想,我可以使用Kruskal算法,在列表的顶部插入圆弧e,以便算法首先选择这个弧线,然后构建包含e的树。这是正确的推理方式吗?如果包含e的MST不存在,则忽略弧吗?
这是我想要更改的java代码:
import java.util.ArrayList;
import java.util.Comparator;
import java.util.PriorityQueue;
public class KrushkalMST {
static class Edge {
int source;
如何使用Floyd-Warshall算法获得从顶点1到顶点10的每条具有相同权重的最短路径?我设法得到了从顶点1到顶点10的所有最短路径的总数。
public static int[][] shortestpath(int[][] adj, int[][] path, int[][] count) {
int n = adj.length;
int[][] ans = new int[n][n];
copy(ans, adj);
// Compute incremently better paths through vertex k.
for (i
像这样有数十亿行
id | type | groupId
---+------+--------
1 | a |
1 | b |
2 | a |
2 | c |
1 | a |
2 | d |
2 | a |
1 | e |
5 | a |
1 | f |
4 | a |
1 | b |
4 | a |
1 | t |
8 | a |
3 | c |
6 | a |
我需要为这些数据添加groupId,如果id相同或类型相同,则它是相同的gro
我有一个听起来像这样的问题:一家公司在4个不同的(A,B,C,D)地点有4辆出租车。4个人(W X Y Z)打电话给公司,说他们需要一辆出租车。我需要找到出租车到达他们的人的最快方式,知道一辆出租车只能载一个人,而且每辆出租车都在其目的地和人们的目的地之间分配了一个值。
我正在考虑用所有可能的组合来构建一棵树,例如: AW-BX-CY-DZ或AX-BW-CY-DZ等,并找到每个组合的最小成本,但我需要使用DFS或贪婪的BFS方法来解决这个问题。你知道这是怎么回事吗?我无法想象。
我只想知道如何使用DFS/GBFS解决这个问题。我不知道它将如何进行,也不知道搜索何时结束,因为我正在寻找使用的最小