文本比较算法Ⅸ——Primal-Dual算法

简介:

 研究文本比较算法有一段时间。看到Primal-Dual算法,作为不同的求LCS算法,介绍如下。

  原文在《An almost-linear time and linear space algorithm for the longest common subsequence problem》

 

  比较文本:

  A=a1a2a3……am

  B=b1b2b3……bn

 

  定义集合P={(i,j)|ai=bj}

  则P={p1,p2,……,pl}       pk表示(ik,jk),1≤k≤l

 

  定义三个比较运算符

      ①“∠”

          pxpy        当且仅当      ix<iy,jx<jy

      ②“⊿”

             pxpy        当且仅当      ixiy,jxjy

      ③“≦”

          pxpy        要么pxpy, 要么pxpy

 

  接下来,我们用例子阐述算法

    A481234781

    B4411327431

 

  第一步:先求出集合P

 

    P={P1=(1,1),P2=(1,2),P3=(1,8),P4=(3,3),P5=(3,4),P6=(3,10),P7=(4,6),P8=(5,5),

      P9=(5,9),P10=(6,1),P11=(6,2),P12=(6,8),P13=(7,7),P14=(9,3),P15=(9,4),P16=(9,10)}

 

  第二步:对集合P中的元素按照比较运算符≦排序,得到排序序列

    p3p2p1p6p5p4p7p9p8p12p11p10p13p16p15p14

 

 

  第三步:对集合P中的元素进行分组

    在排序序列中,从头开始找出按照比较运算符排序的子序列,可以得到

      p3p2p1p10

 

    把这4个元素从队列中抽出来,组成C1组。则剩下的序列为

      p6p5p4p7p9p8p12p11p13p16p15p14

 

    再从头开始找出按照比较运算符排序的子序列,可以得到

      P6p5p4p11

 

    把这4个元素从队列中抽出来,组成C2组。则剩下的队列为

      p7p9p8p12p13p16p15p14

 

    再从头开始找出按照比较运算符排序的子序列,可以得到

      p7p8p15p14

 

    把这4个元素从队列中抽出来,组成C3组。则剩下的队列为

      p9p12p13p16

 

    再从头开始找出按照比较运算符排序的子序列,可以得到

      p9p12p13

 

    把这三个元素从队列中抽出来,组成C4组。则剩下的队列为

      p16

 

    最后一个元素p16组成C5

 

    将上面的分组组成如下表格

 

C1

C2

C3

C4

C5

 

p3

p2

p1

p10

p6

p5

p4

p11

p7

p8

p15

p14

p9

p12

p13

p16

L

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  第四步:填充上面表格的L行,填充的依据如下

  1、 C1组全部填充0

  2、 后面组的每个元素都是填充,在排序序列中比自身靠前的,同时又是前一组中最后的元素

  排序序列:p3p2p1p6p5p4p7p9p8p12p11p10p13p16p15p14

 

  例如:p6元素

    在C1组中排在p6前的元素有3个,分别是p3p2p1P13个当中最后一个。

    故 p6下填充p1 

 

  例如:p9元素

    在C3组中排在p9前的元素只有1个,是p7

    故 p9下填充p7 

 

填充后的表格

 

C1

C2

C3

C4

C5

 

p3

p2

p1

p10

p6

p5

p4

p11

p7

p8

p15

p14

p9

p12

p13

p16

L

0

0

0

0

p1

p1

p1

p1

p4

p4

p11

p11

p7

p8

p8

p13

 

  最后一步:回溯LCS字符串

        先从C5p16找起,p16对应p13,再从p13找寻,p13对应p8。依次类推

        p16p13p8p4p1

    则(9,10)→(7,7)→(5,5)→(3,3)→(1,1)

    故LCS字符串为

    a1a3a5a7a9=b1b3b5b7b10=41371

 

   此时最佳匹配为

    A:48123478_1

    B:4411327431  

   

  算法完成

 

  这个算法能够找到至少一个LCS(注意,不一定能找到全部LCS,LCS不一定是唯一的)。但是,这个算法的空间占用为P的元素的个数,但是P的元素个数是O(n2)的。故本算法对于找最佳匹配不是一个好算法。不过对于开拓思路还是有用的,原来还可以这样算LCS。



    本文转自万仓一黍博客园博客,原文链接:http://www.cnblogs.com/grenet/archive/2011/03/17/1987172.html,如需转载请自行联系原作者

相关文章
|
数据采集 算法 数据可视化
基于Python的k-means聚类分析算法的实现与应用,可以用在电商评论、招聘信息等各个领域的文本聚类及指标聚类,效果很好
本文介绍了基于Python实现的k-means聚类分析算法,并通过微博考研话题的数据清洗、聚类数量评估、聚类分析实现与结果可视化等步骤,展示了该算法在文本聚类领域的应用效果。
619 1
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
368 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
机器学习/深度学习 自然语言处理 算法
解读未知:文本识别算法的突破与实际应用
解读未知:文本识别算法的突破与实际应用
解读未知:文本识别算法的突破与实际应用
|
机器学习/深度学习 数据采集 算法
Python基于KMeans算法进行文本聚类项目实战
Python基于KMeans算法进行文本聚类项目实战
|
数据采集 自然语言处理 数据可视化
基于Python的社交媒体评论数据挖掘,使用LDA主题分析、文本聚类算法、情感分析实现
本文介绍了基于Python的社交媒体评论数据挖掘方法,使用LDA主题分析、文本聚类算法和情感分析技术,对数据进行深入分析和可视化,以揭示文本数据中的潜在主题、模式和情感倾向。
1858 0
|
文字识别 算法 Java
文本,保存图片09,一个可以用id作为图片名字的pom插件,利用雪花算法生成唯一的id
文本,保存图片09,一个可以用id作为图片名字的pom插件,利用雪花算法生成唯一的id
|
算法 数据可视化 搜索推荐
基于python的k-means聚类分析算法,对文本、数据等进行聚类,有轮廓系数和手肘法检验
本文详细介绍了基于Python实现的k-means聚类分析算法,包括数据准备、预处理、标准化、聚类数目确定、聚类分析、降维可视化以及结果输出的完整流程,并应用该算法对文本数据进行聚类分析,展示了轮廓系数法和手肘法检验确定最佳聚类数目的方法。
597 0
|
算法 JavaScript
「AIGC算法」将word文档转换为纯文本
使用Node.js模块`mammoth`和`html-to-text`,该代码示例演示了如何将Word文档(.docx格式)转换为纯文本以适应AIGC的文本识别。流程包括将Word文档转化为HTML,然后进一步转换为纯文本,进行格式调整,并输出到控制台。转换过程中考虑了错误处理。提供的代码片段展示了具体的实现细节,包括关键库的导入和转换函数的调用。
337 0
|
文字识别 算法 Shell
突破边界:文本检测算法的革新与应用前景
突破边界:文本检测算法的革新与应用前景
突破边界:文本检测算法的革新与应用前景
|
人工智能 自然语言处理 算法
Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本、图像等领域,支持文搜、图搜文、图搜图匹配搜索
Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本、图像等领域,支持文搜、图搜文、图搜图匹配搜索
Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本、图像等领域,支持文搜、图搜文、图搜图匹配搜索

热门文章

最新文章