这就是问题,我承认这是一个家庭作业问题,我不是在寻找答案,而是我只想知道我是否在朝着正确的方向前进,如果我没有正确的方向,请告诉我正确的方向。
问:证明了如果加权图中没有两条边具有相同的权重,则每个最小生成树(MST)中都包含与顶点v关联的权重最小的边。
我的回答是:给定一个顶点( V )和一个加权图(G),我们注意到∃(存在)和与V相关的边(E)是最小权重的边。请注意,我们将有两个不同的顶点,它们将具有相同的最小权重边。这对我们来说不是问题,如果其中一个顶点包含在最小生成树中,另一个顶点将是。如果我们开始构建MST,在一个实例中必须将权重最小的边包括在MST中,因为必须包括具有最小边的顶点中
我在使用下面的python代码片段计算简单图的最小生成树时遇到了问题。手工做这件事很简单,我已经添加了一张图和教科书中的最小生成树的图像。
import numpy as np
import pandas as pd
import scipy as sp
from scipy.sparse import csr_matrix
from scipy.sparse.csgraph import minimum_spanning_tree
import networkx as nx
import matplotlib.pyplot as plt
%matplotlib inline
friends
当图有多个连通分量时,我不知道如何实现Kruskal算法
根据我对Kruskal算法的理解,它多次向集合中添加最小边。然后,当所有的边都被检查时,它会返回一组最充分的边。
但是,如果我的图是断开的呢?说我有:
A - B - C - D
E - F
假设成本( are )=成本(E)= 1,其余的边大于1。
当我运行Kruskal时,我会得到所有的边的成本,但是我想得到每个连接组件的成本,所以我对所有连接的组件做了一个平均最小的成本。
我有一个无向图,完全图,并希望将它转换成一个有向无圈图,在每个节点之间有一个(单向)路径。为了开始,我想添加随机边和停止一旦所有节点连接。需要研究的是一个算法(使用Python,但任何语言都可以)。
因此,例如,这个图不再被进一步连接:
A ---- B A ---> B
\ / => /
\ / v
C C
,但在这种情况下,所有无向边都会变成有向边。
A ---- B A ---> B
\
如果有多条最短路径可用,如何编写选择最小生成树路径的逻辑?
下面是我的java代码--它选择最小的生成树路径,而不是具有最少边数的路径。
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Kruskal {
static int path[];
static int n, m, mincost, i, j;
public static void main (String args[]) throws Exception {
InputSt
假设我有两组,set1 = {a,b,c,d,e,f}和set2 = {a,b,c,d,e,g}。与其显式地表达这些内容,我还想创建这样的东西
common = {a,b,c,d,e}
set1 = common + f
set2 = common + g
如果我们想表示{a,b,c,h},我们可以将它表示为common - d - e + h。
我的目标基本上是能够生成要使用的最佳公共部分。只有一个常见的部分,这不是太有挑战性,但我需要允许不止一个(但不是无限的,否则所获得的好处将是微不足道的)。
所谓最优,我指的是“所表达的最少元素数”。因此,在上面的示例中,使common变量“花费”5(