【问题标题】:finding the minimum weight of a graph找到图的最小权重
【发布时间】:2014-12-12 23:27:11
【问题描述】:

我正在尝试制作一个使用 Kruskal 算法计算最小跨度重量的程序, 我已经使用它们的权重按递增顺序对边缘进行了排序,并将其放入二维列表中。 然后我写了一个方法来使用 sortededge 获得最小权重, 取样,sortededge = [['1', '2', '1'], ['5', '6', '1'], ['2', '4', '2'], ['3', '6', '2'], ['3', '5', '3'], ['4', '6', '3'], ['3', '4', '5'], ['1', '3', '6']] 方法是

vertexcheck = []
minimumdistance  = 0
def MSW:
    for i in range(len(sortededge)):
        if (sortededge[i][0] not in vertexcheck) or (sortededge[i][1] not in vertexcheck):
            if (sortededge[i][0] not in vertexcheck):
                vertexcheck.append(sortededge[i][0])


            if (sortededge[i][1] not in vertexcheck):
                vertexcheck.append(sortededge[i][1])
            minimumdistance += int(sortededge[i][2])

但它不适用于所有图表,我欢迎任何帮助

【问题讨论】:

  • 欢迎来到 Stackoverflow!您可以使用编辑器中的“{ }”按钮以可读的方式格式化您的代码。请具体说明“不起作用”的含义;代码失败的例子是什么?该示例的实际和预期结果是什么?

标签: python algorithm data-structures graph


【解决方案1】:

你的算法实现是错误的。

举一个你的算法失败的例子:

排序后边缘会是这样的:

边缘:

    1, 2, 1
    3, 4, 2
    2, 3, 5

在第一次迭代中,您会将 1 和 2 放入您的顶点检查中。更新顶点检查=[1,2]
在第二次迭代中,您将在顶点检查中放入 3 和 4。更新顶点检查=[1,2,3,4]
但是在第 3 次迭代中,您不能添加 2->3 边,因为两个顶点都存在于您的顶点检查中。

这就是你的实现给出错误输出的原因:(

实际上,对于 Kruskal 的实现,您需要了解并使用一种称为 Union-Find 的数据结构算法,它会告诉您当前尝试连接的节点是否已经连接:)

如果它们已经连接,则跳过边缘,因为它们已经以较低的成本连接:) 否则连接它们...

由于使用 python 的 MST 有很多实现,我不会费心给你一个 :)

您可以在此处找到伪代码: Kruskal's_algorithm

还有一个示例实现: Kruskal's_implementation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多