A星算法求解编辑距离

在这里插入图片描述
文章来源:ICPRAM 2015
在这里插入图片描述

算法1名称:A星算法计算编辑距离
输入:非空属性图 g 1 = ( U 1 , E 1 ) , q = ( V 2 , E 2 ) g_{1}=(U_{1},E_{1}) , q=(V_{2},E_{2}) g1=(U1,E1)q=(V2,E2).其中 U 1 = { u 1 , . . . , u ∣ U 1 ∣ } , V 1 = { v 1 , . . . , v ∣ v 1 ∣ } U_{1}=\{u_{1},...,u_{|U_{1}|}\},V_{1}=\{v_{1},...,v_{|v_{1}|}\} U1={u1,...,uU1},V1={v1,...,vv1},
输出:从图 g 1 g_{1} g1转变为图q的代价最小的路径 P m i n P_{min} Pmin.
例如 :
[ ( ( u 1 , v 1 ) , ( u 2 , v 2 ) , ( u 3 , v 3 ) , ( u 4 , v 4 ) , ( u 5 , v 5 ) ) ( 这 一 个 元 组 表 示 顶 点 映 射 ) , ( ( ( u 1 , u 2 ) , ( v 1 , v 2 ) ) , ( ( u 1 , u 3 ) , ( v 1 , v 3 ) ) , ( ( u 2 , u 4 ) , ( v 2 , v 4 ) ) , ( ( u 3 , u 5 ) , ( v 3 , v 5 ) ) , ( ( u 5 , u 4 ) , ( v 5 , v 4 ) ) , ( ( N O N E ) , ( v 3 , v 4 ) ( 这 一 个 元 组 表 示 边 映 射 ) ) ] [((u_{1},v_{1}), (u2,v2),(u3,v3),(u4,v4),(u5,v5) )(这一个元组表示顶点映射), \\ (((u1,u2),(v1,v2)),\\ ((u1,u3),(v1,v3)),\\ ((u2,u4),(v2,v4)),\\ ((u3,u5),(v3,v5)),\\ ((u5,u4),(v5,v4)),\\ ((NONE),(v3,v4)(这一个元组表示边映射))] [((u1,v1),(u2,v2),(u3,v3),(u4,v4),(u5,v5)),(((u1,u2),(v1,v2)),((u1,u3),(v1,v3)),((u2,u4),(v2,v4)),((u3,u5),(v3,v5)),((u5,u4),(v5,v4)),((NONE),(v3,v4))]
以上是python中networkx库中使用networkx.graph_edit_distance( q q q g 1 g_{1} g1)的路径。
在这里插入图片描述

算法开始:
第一步:初始化集合 O P E N OPEN OPEN为空集合, P m i n P_{min} Pmin为空集合。 O P E N OPEN OPEN集存放A星算法动态空间搜索的每个节点。 P m i n P_{min} Pmin是从 O P E N OPEN OPEN集中选取代价最小的元素,即代价最小的编辑路径。
第二步:对于查询图中的顶点 w ∈ V 2 w∈V_{2} wV2,随机选择 u 1 ∈ V 1 u_{1}∈V_{1} u1V1,构造映射 O P E N ← O P E N ∪ { u 1 → w } OPEN←OPEN∪\{u_{1}→w\} OPENOPEN{u1w}
第三步:在OPEN集合中考虑删除顶点的情况: O P E N ← O P E N ∪ { u 1 → ε } OPEN←OPEN∪\{u_{1}→\varepsilon\} OPENOPEN{u1ε}
第四步:执行5-19行无限循环。满足循环体中的跳出条件,则语句块跳出。
行5,开始计算 P m i n P_{min} Pmin P m i n P_{min} Pmin计算的过程是:从 O P E N OPEN OPEN中遍历元素,选择元素代价和最小的元素。其中每个元素“代价和”分为当前元素的实际代价 g ( p ) g(p) g(p)和估计代价 l b ( p ) lb(p) lb(p)(在其它文献中,也被称作估计代价的下限)。实际代价 g ( p ) g(p) g(p)是指考虑到当前元素(即当前映射路径)顶点和边标签的不同,估计代价是除了映射顶点和边的标签的不同。上述的实际代价和估计代价会在很多文献中都有不同的定义,定义的精确性影响了结果的精确性。在本算法中,只考虑最简单的标签差异的不同
行6,从 O P E N OPEN OPEN集中删除 P m i n P_{min} Pmin
行7-8:完整路径定义: P m i n P_{min} Pmin元素的size,即映射的顶点对数等于min{ ∣ U 1 ∣ |U_{1}| U1 ∣ V 1 ∣ |V_{1}| V1}。 判断 P m i n P_{min} Pmin是否为完整路径,如果为完整路径则返回 P m i n P_{min} Pmin。算法结束。
行10-17:如果 P m i n P_{min} Pmin不是完整路径,则从 O P E N OPEN OPEN中寻找代价最小且为完整路径的元素。行10-12,假设在这里插入图片描述,即 P m i n P_{min} Pmin当前的size为 k k k。若 k < ∣ V 1 ∣ k<|V_{1}| k<V1,则还需要扩展A星搜索树空间的节点,即往 O P E N OPEN OPEN集增加元素。增加的元素如算法行12所示:添加未映射的顶点对。(这个地方理解较为抽象,需要结合A星算法的搜索树进行理解)。行15:考虑空顶点映射。从直觉上来讲,图 q q q中一个空顶点映射到另外一个图 g 1 g_{1} g1的非空顶点,是在 q q q中增加一个顶点。因此,算法行11-17,是在 O P E N OPEN OPEN中添加完整路径。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值