子图同构-subgraph isomorphism

子图同构即subgraph isomorphism,
假设G为图,S为子图,如果S中所有node(节点)和之间的edge(边)都可以映射到G中的话(结构相同就行),就称之为子图同构。
induced subgraph isomorphism:G和S中对应的node之间的edge一一对应
non-induced subgraph isomorphism:G中对应的node之间的某些edge不存在于S中

子图匹配(Subgraph matching computation):

  1. 计算候选node(Candidate computation)
    即帮助每个S中的node寻找G中的有可能互相对应的节点
    伪代码:
candidate_node=list()
for node_u in S:
    for node_v in G:
        if v拥有所有u的label and len(v.neighbours)>=len(u.neighbours):
            candidate_node.append(v)
  1. 设定查找顺序
    简易方法中按照随即顺序查找

  2. 同构搜寻
    使用递归的形式挨个将S中每个node对应的G中的候选node放入新建子图,并匹配(回溯算法,backtracking,有点类似于树的遍历)
    query_node: S中的node
    data_node: G中的node(那些对应S的candidate node)
    O:query_node的查找顺序(就是一个query_node的list)
    Φ \Phi Φ:所有同构的集合
    ϕ \phi ϕ:一个同构对象(包含了query_node和对应的data_node)
    v:一个data node
    u:一个query node
    伪代码:

def IsomorphismSearch(G,S,C,O,i,$\phi$,$\Phi$):
    if $\phi$.query_node=S.node:
        $\Phi$.append($\phi$)
    else:
        u=O[i]
        for v in u的candidate node:
            if v not in $\phi$.data_node and IsValid(G,S,$\phi$,u,v):
                $\phi$[U]=v
                IsomorphismSearch(G,S,C,O,i,$\phi$,$\Phi$)
                $\phi$.query_node.remove(u)
    return $\Phi$

def IsValid(G,S,$\phi$,u,v):
    for u' in u.neighbours:
        if neighbour在$\phi$.query_node中,但是u和u'映射的edge(v,$\phi$(u'))却在G中不存在:
            return False
    if isomorphism是induced的:
        for u' in u.query_node:
            if u'和u之间不相连,但是他们在G中的映射(v,$\phi$(u'))是相连的:
                return False
    return True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值