我正在尝试分析C文件中“#include”的用法(首先包含的内容,依赖项......)。
为此,我从C文件中提取“#include”并构建图形。我想在此图中找出常见的模式......
到目前为止,我正在使用JGraphT作为图形引擎(不确定这是正确的表达式)和JGraph用于渲染(但是使用jgraph有点问题,因为布局不再包含在免费版本中)。
我一直无法在jgrapht中找到任何同构支持。你知道任何提供这种支持的解决方案(比如igraph,但是对于java)..?
我正在使用java 1.5,建议的解决方案必须是免费的......
答案 0 :(得分:1)
不确定其中一个是否可以做同构,但我在我的博客中收集了一些指向图形布局引擎的链接:http://blog.pdark.de/2009/02/11/graph-layout-in-java/
您也可以查看graphviz。它不是Java,而是具有非常强大的布局引擎。
至于同构:你可能只需要检查0级的模式(即直接包含),因为根据定义,下面的任何东西必须是同构的(某些包含文件包含的所有文件总是相同的,除非有人使用了包含部分中的很多#if魔术。)
答案 1 :(得分:1)
答案 2 :(得分:0)
我最近一直在思考这个问题(在我的例子中,寻找常见的标记结构将JSP分解为标记)。
这个库很棒。我还没找到一个。与此同时,这里有一些可能与你有关的问题(同构?)。
我计划研究数学软件用于分析评估微积分问题积分的技术。在这种情况下,存在许多已知的结构模式,并且所讨论的问题必须与已知模式之一匹配。这样做的最好方法并不总是很明显,因为它取决于哪些术语组合在一起等等。
生物学中用于在两个复杂分子中找到相应结构的算法也可能适用于这个问题。
答案 3 :(得分:0)
我肯定不知道具有子图同构代码的特定图库 - 因为它已知NP-complete,除了搜索之外你不能做很多事情。它在图形重写方案中显示了很多,因此AGG可能有所帮助。
答案 4 :(得分:0)
看起来几个月前JGraphT的“实验性”包中有一个mention of isomorphism,但显然没有文档。
同构比较是化学信息学软件的基本要求(技术上它是monomorphism使用的)。原子是“节点”,键是“边缘”。分子图是无向的,可以是循环的。可以使用一些用Java编写的开源cheminformatics库。您可以通过查看这些库来找到解决问题的线索。
例如,我编写了一个名为MX的BSD授权化学信息库,它实现了基于VF的单态算法。我写了high-level overview如何实现算法,你可以在我的GitHub存储库中browse the source for the mapping package。大多数工作都在DefaultState课程中完成。
MX还包含可能适用于您的问题的快速exhaustive ring detector和其他图表操作。