在 Go 中使用 Gonum 进行图形算法



我是一个新的Go程序员,几天前刚刚完成了"Go 之旅"教程。我想创建一个 150 x 120 大小的图,然后获取每个节点的所有边缘节点,并实现一些图搜索算法,如 BFS 和 Dijkstra。我找到了一个名为 Gonum 的漂亮库,其中包含一个看起来很有希望使用的图形包。

我的问题是它有很多信息,我不知道从哪里开始。我希望能有某种教程让我朝着正确的方向开始,但我没有任何运气找到一个。

我在 Python 中设置它

的方式是制作一个零的 numpy 数组来表示图形的大小,然后遍历它以获得每个节点的每个边,但我不确定这是考虑如何在 Go 中设置图形的最佳方式。

如果你刚开始使用 Go,我建议你坚持使用标准库一段时间,不要在你的学习曲线上增加更多。尝试使用一些基本算法实现一个简单的图形数据结构 - 这非常简单,并且可以让您练习该语言。稍后,当您需要更多性能/功能时,您可以四处寻找库(gonum 或其他库)。例如,一个简单的图形可以用:

// Node is a node in the graph; it has a (unique) ID and a sequence of
// edges to other nodes.
type Node struct {
    Id    int64
    Edges []int64
}
// Graph contains a set of Nodes, uniquely identified by numeric IDs.
type Graph struct {
    Nodes map[int64]Node
}
<</div> div class="one_answers">

偶然发现了这个问题,寻找用 gonum/graph 计算边缘的提示。除了挖掘 API 文档之外,我没有找到大量资源。

认为我找到了计算单个节点边缘的正确方法。或!

for _, node := range graph.NodesOf(g.Nodes()) {
    toNodes := g.From(node.ID()) // returns graph.Nodes
    nodeArray := graph.NodesOf( toNodes ) // returns []graph.Node
    edgeCount := len(nodeArray)
    // - or -
    edgeCount := len(graph.NodesOf( g.From(node.ID()) ))
    // do work with edge count
}

给定一个已知节点以及您可以从那里到达的所有节点,您可以计算(例如:len(graph.NodesOf(g.From(node.ID())))边的数量!

要计算所有边:

totalEdges := len(graph.EdgesOf(g.Edges()))

相关内容

  • 没有找到相关文章

最新更新