将分词转化为图的最短路径问题
假设要切分一下句子 :主席出现在这里。可将其转化为以下的图:
从而,找出这个句子的最短切分的问题就可以转化为找出上图的0-->7最短路径的问题。这里所有边的权值都是1。
Dijkstra最短路径算法
关于这个算法的描述,网上很多,诸多教科书中也有描述,这里就不详述了。我们现在任务是根据Dijkstra算法计算出的源点0到所有点的最短路径值distace[]来找出所有的最短路径。
比如上图就有2条最短路径,对应两种切分方法:
- 0->2->4->5->7 主席/出现/在/这里
- 0->2->3->5->7 主席/出/现在/这里
Input : 源点S,汇点T,distance[]
- Queue VQ,用来作为广度优先搜索的队列, VQ.append(T)
- while(!VQ.empty())
- Vertex V = VQ.pop()
- if V == S :
- 回溯出一条路径
- for vn in vertexlist :
- if distace[vn] == distacnce[V]-1 and w(vn,V) == 1 :
- VQ.append(vn)
Dijkstra算法的复杂度取决于图的数据结构,在最好的情况下可以达到VlogV的复杂度。
没有评论:
发表评论