gpt4 book ai didi

data-structures - 什么是表示无向图的好数据结构?

转载 作者:行者123 更新时间:2023-12-04 14:21:09 27 4
gpt4 key购买 nike

我需要构建一个无向图。我不需要它做任何太花哨的事情,但理想情况下它会像这样工作:

structure UDG = UndirectedGraph
val g = UDG.empty
val g = UDG.addEdges(g, n1, [n2, n4, n7]) (* n1 is connected to n2, n4, and n7 *)
val g = UDG.addEdge(g, n2, n3)
UDG.connected(g, n2) (* returns [n1, n3] *)

SML/NJ 中是否有一个很好的数据结构来模拟这些关系?我应该自己动手吗?

更新

我已经继续尝试自己滚动,但是当我尝试测试它时出现类型不匹配错误。我对 SML 结构和仿函数的经验非常基础,所以我认为我做的事情显然是错误的。我如何让这个工作?另外,你能帮我把它变成 'a graph吗? ?从语义上讲,这似乎更有意义。

代码
signature ORD_NODE =
sig
type node
val compare : node * node -> order
val format : node -> string
end

signature GRAPH =
sig
structure Node : ORD_NODE
type graph
val empty : graph

(* val addEdge : graph * Node.node * Node.node -> graph
* addEdge (g, x, y) => g with an edge added from x to y. *)
val addEdge : graph * Node.node * Node.node -> graph

val format : graph -> string
end

functor UndirectedGraphFn (Node : ORD_NODE) :> GRAPH =
struct
structure Node = Node
structure Key = struct
type ord_key = Node.node
val compare = Node.compare
end
structure Map = BinaryMapFn(Key)

type graph = Node.node list Map.map (* Adjacency list *)
val empty = Map.empty

fun addEdge (g, x, y) = (* snip *)
fun format g = (* snip *)
end

structure UDG = UndirectedGraphFn(struct
type node = int
val compare = Int.compare
val format = Int.toString
end)

错误

当我做

结构 UDG = UndirectedGraphFn(struct
类型节点 = int
val compare = Int.compare
val 格式 = Int.toString
结尾)

UDG.addEdge (UDG.empty,1,2)

我得到一个类型不匹配:

错误:运算符和操作数不一致 [文字]
运营商域:UDG.graph * ?.UDG.node * ?.UDG.node
操作数:UDG.graph * int * int
在表达上:
UDG.addEdge (UDG.empty,1,2)

最佳答案

好吧,我不熟悉这种语言(请原谅我的无知):

我只是使用以下结构:

V.E1.E2.En+1
V2.E1.E2.En+1
Vn+1.E1.E2.En+1

所以基本上小数点前的第一个数字代表顶点,每个边将代表一个小数点(有点像 IP 地址)

使得:

alt text

可以存储为:

1.2.5

2.1.5.3

3.2.4

4.3.5.6

5.1.2.4

6.4

然后在您的代码中,添加/删除边很简单,并且很容易解析(因为顶点始终是第一个数字)

关于data-structures - 什么是表示无向图的好数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1386579/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com