图同构(对于JAR文件)

2024-04-28 04:41:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理*.jar文件和图形同构。我想检查两个*.jar文件之间的图形同构。有没有一个python或ruby的库。我能用测谎仪吗?在

谢谢。在


Tags: 文件图形jarruby同构测谎仪
1条回答
网友
1楼 · 发布于 2024-04-28 04:41:09

这里是一个使用NetworkX isomorphism checking作为基础来做我理解你要问的事情的一个努力。。。在

假设您使用两个jar文件的内容创建文本文件,例如使用the methods here。在

这段代码将加载两个jar文件并将这些图加载到NetworkX中。这里的例子被简化为每个路径名中只有两个级别,但是一般原则仍然是相同的。。。如果您发布一些示例内容,我们可以调整get_edges()函数来处理更深层次的嵌套。在

import networkx as nx
from networkx.algorithms import isomorphism

# Contents of two jar files listed, as in
# http://java.sun.com/developer/Books/javaprogramming/JAR/basics/view.html
jar1 = '''a/g
a/h
a/i
b/g
b/h
b/j
c/g
c/i
c/j
d/h
d/i
d/j'''

jar2 = '''1/2
2/3
3/4
4/1
5/6
6/7
7/8
8/5
1/5
2/6
3/7
4/8'''

def get_edges(jar):
    nodes = set( jar.replace('\n', '/').split('/') )
    nodes = dict( zip(nodes, range(len(nodes)) ) )
    edges = [ edge.split('/') for edge in jar.split('\n') ]
    edges = [ (nodes[ edge[0] ],nodes[ edge[1] ]) for edge in edges ]
    return edges

if __name__ == '__main__':
    G1 = nx.Graph()
    G1.add_edges_from( get_edges(jar1) )

    G2 = nx.Graph()
    G2.add_edges_from( get_edges(jar2) )
    print 'Edges from jar1: ', G1.edges()
    print 'Edges from jar2: ', G2.edges()

    GM = isomorphism.GraphMatcher(G1,G2)
    print 'Isomorphic: ', GM.is_isomorphic()
    print 'Mapping between the two jars: ', GM.mapping

这将打印:

^{pr2}$

希望这有帮助。在

相关问题 更多 >