我正在寻找一个算法的Python实现,它执行以下任务:
给定两个有向图,可能包含周期及其根,对两个图的相似性产生分数.
(Python difflib可以为两个序列执行的方式)
希望这样的实现存在.否则,我会尝试自己实现一个算法.在这种情况下,什么是优选的算法(关于简单性).
算法的工作方式对我来说并不重要,尽管它的复杂性是.此外,只要可以用该DS表示诸如我所描述的图形,也可以使用与不同数据结构一起工作的算法.
我要强调的是,一个实现会更好.
编辑:
似乎同构algortihm是不相关的.有人建议图形编辑距离更接近点,这会将我的搜索范围缩小到一个解决方案,该解决方案执行图形编辑距离或将图形缩小为树,然后执行树编辑距离.
它们的节点由每行的几行汇编代码组成.
这主要是一个逻辑问题,但上下文是在Django中完成的.
在我们的数据库中,我们有Vertex和Line Classes,它们形成一个(神经)网络,但它是无序的,我无法改变它,它是一个遗留数据库
class Vertex(models.Model)
code = models.AutoField(primary_key=True)
lines = models.ManyToManyField('Line', through='Vertex_Line')
class Line(models.Model)
code = models.AutoField(primary_key=True)
class Vertex_Line(models.Model)
line = models.ForeignKey(Line, on_delete=models.CASCADE)
vertex = models.ForeignKey(Vertex, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)
现在,在应用程序中,用户将能够直观地选择两个顶点(下面的绿色圆圈)
然后javascript将这两个顶点的pk发送到Django,它必须找到满足它们之间路由的Line类,在这种情况下,以下4个红线:
商业逻辑:
到目前为止我所拥有的:
我知道基本逻辑是循环遍历每个Vertex的所有行,然后得到这些行的另一个Vertex,并继续递归,但我真的不知道从哪里开始.
这是我可以得到的,但它可能没有帮助(views.py):
def findRoute(request):
data = json.loads(request.body.decode("utf-8"))
v1 = Vertex.objects.get(pk=data.get('v1_pk'))
v2 = Vertex.objects.get(pk=data.get('v2_pk'))
lines = v1.lines.all()
routes = []
for line in lines:
starting_line = line
#Trying a new route
this_route_index = len(routes)
routes[this_route_index] = [starting_line.pk]
other_vertex = line.vertex__set.all().exclude(pk=v1.pk)
#There are …Run Code Online (Sandbox Code Playgroud) 我正在尝试找到工具/算法来搜索与面向图中指定模式相对应的部分,例如:
A-> B-> C或或A- - B-> C.
请建议我搜索的方向.
我的意思是模式匹配.我需要找到匹配指定模式的所有节点和边的组
非常简短,关于minimize_nested_blockmodel_dl函数的两三个基本问题graph-tool library.有没有办法找出哪个顶点落在哪个块上?换句话说,从每个块中提取列表,包含其顶点的标签.
分层可视化对于网络理论中的业余爱好者来说相当难以理解,例如,绘制有向边的正方形是否意味着涉及所考虑的两个块之间的下层边缘的主方向?块使用不同的颜色很好地显示,但在概念层面上,哪些类型的图案或边/顶点属性位于顶点的块分类后面?换句话说,当两个顶点在同一个块中时,我可以对它们的共同属性说些什么呢?
Python没有对图形的直接支持,但很多消息来源都说它们可以用字典表示,例如.
graph = { "a" : ["c"],
"b" : ["c", "e"],
"c" : ["a", "b", "d", "e"],
"d" : ["c"],
"e" : ["c", "b"],
"f" : []
}
Run Code Online (Sandbox Code Playgroud)
因为这是一个无向图,字典是定向映射,所以看起来真的很不合适.说graph = {'x':['y'], 'y':['x']}而不是真的graph = {{'x', 'y'}}好吗?
我正在努力研究一些问题和算法.我知道C++,但是一位朋友告诉我,如果用Python完成它会更好.因为开发速度 会快得多,花在编程细节上的时间也会少,实际上并没有任何解决方案.
编辑2:我打算使用谷歌代码中的python-graph lib,如果您使用过,请提供示例代码.
编辑1:更快 - 更少的时间和更少的工作来编写解决方案
感谢大家的帮助 !
python ×7
graph ×5
algorithm ×2
c++ ×1
dictionary ×1
django ×1
graph-theory ×1
graph-tool ×1
isomorphism ×1
logic ×1
math ×1
recursion ×1
set ×1
subgraph ×1