OCaml中的图形疑问和与图形相关的函数

时间:2016-05-08 22:57:01

标签: graph ocaml

我这里有这个代码:

type ('state,'letter) automaton = {
  initial    : 'state ;
  final      : 'state -> bool ;
  transition : 'letter -> 'state -> 'state ;
}   

let example_graph =
{ 
nodes = ['a'; 'c'; 'd'; 'f'; 'g'; 'h'; 'k'];
edges = ['h', 'g';  'k', 'f';  'f', 'b';  'f', 'c';  'c', 'b']

} 

这是OCaml网站提供的关于graths的默认示例。

我的问题是,如何使用OCaml中的图表?我的意思是Lists我们有一个大的功能页面,可以帮助我们使用它,但我还没有找到任何有关图形的预定义函数。

我有一个复杂的工作与图形有关,更确切地说,我需要用automaton建立OCaml,但首先我想了解如何做简单的思考,如从图中获取nodes,如何转换节点和边输入值,或者如何使用此处的图形进行测试,例如我如何在节点之间移动...(以及你可以记住的每一个简单的动作,或者我可以获得更多信息的任何地方都会有帮助)

基本上我想知道网上是否有任何地方我可以获得有关OCaml或函数中图形的更好信息,如果你们可以帮我一个忙!

谢谢

PS:我已经完成了我的搜索,发现没有什么真正有用的(仅适用于像我这样的初学者的复杂代码)

2 个答案:

答案 0 :(得分:1)

嗯,我认为ocamlgraph对于一个新的OCaml程序员来说有点复杂(但后来使用它会是一个好主意)。

据我所知,您希望以可理解的方式处理节点和边缘。

首先,我会向您提供测试Map module(使用它的tutorial)的建议,因为这是一种快速而简单的方法(我使用此实现Glushkov's construction模块,它的效果非常好。)

为您提供一个小小的见解:

type ('state,'letter) automaton = {
  initial    : 'state ;
  final      : 'state -> bool ;
  transition : 'letter -> 'state -> 'state ;
}   

这就是你到现在为止看到自动机的方式。

type ('state,'letter) automaton = {
  initial    : 'state ;
  final      : 'state -> bool ;
  transition : ('letter, 'state) list Map.Make('state);
}   

这就是我看到它的方式(这不是一个正确的实现,因为'state不是一个明显的有序类型,但这个想法就在这里)。您可以将任何州映射到列表(如果您了解如何创建新映射,则可以使用Set而不是列表)。

尝试自己实现它,它可以非常有用,你可以学到很多东西。

答案 1 :(得分:1)

由于OCamlgraph库,OCaml对图​​表提供了出色的支持。它有很好的文档记录,非常强大,但它依赖于仿函数很多,而且它们通常会混淆OCaml新手。所以你也可以考虑尝试我们为程序分析而开始的另一个graph library。它不会发布到官方的opam存储库,但您始终可以从我们自己的存储库中获取最新的alpha版本:

opam repository add git://github.com/BinaryAnalysisPlatform/opam-repository.git
opam install graphlib

P.S。 Graphlib不是OCamlgraph的替代品,它可以很好地使用它。它只是有点不同的焦点。当graphlib时,OCamlGraph更专注于可用于任何图形表示的通用算法 更侧重于图形数据结构。所以它更容易使用,但更难扩展。