即使如何1

在实际工作中,我们常常要对输出的文本和数据进行比对:以取证大师为例,取证大师导出的取证结果数据量很容易达到上万条。这类数据特点除了数量级大外,其实数据结构很相近。即使我们以无以伦比的细致和专心去比对,也难以发现文本间的所有差异。为了提高比对效率和重复利用性,我们发现了一种解决方案,下面一起来了解一下吧。

1

应用场景

对于该比对工具而言,是以LCS方法为核心,针对不同类型的文档比对进行拓展。除无法解析的加密文档外,其余的文件都能通过该方法实现比对操作,例如:部分含有特殊标准的数据文件、代码文件、普通文本文件及表格等。1、 数据比对:在信息化飞速发展的现状下,大量数据作为信息化的输出,与我们有着密不可分的关系,数据比对也就自然而然的成为我们工作过程中的一个重要环节,一个高效的数据比对工具就显得尤为重要;2、 代码文件比对:产品的快速更新迭代造就了时代的快速发展,对于研发人员而言,代码的更新迭代最为频繁;在开发过程中,借助比对工具下,前后文件差异点一目了然,为研发人员节约宝贵的时间,为产品迭代奠定基础。

1

方法介绍

最长公共子序列(Longest Common Subsequence,以下简称LCS),该方法的定义为一个序列Subsequence,如果它属于两个或两个以上已知序列的子序列,并且是所有符合条件的子序列中最长的一个,则我们称这个序列为已知序列的最长公共子序列,在文本比对中,可通过该方法在多个比对文本中筛选出所有公共特征块。传统的文本比较方法中除了每两两特征块进行比较外,还需要对筛选出来的特征块进行一次遍历,得到最长的序列,时间复杂度为n^3,该方法效率低下;因此需要通过LCS方法进行优化,在特征块两两比较的过程中,借助特定的算法,就能够输出公共特征块,在遍历结束时,输出的所有特征块序列便是最长公共子序列,时间复杂度降为n^2;LCS优点在于当要进行比对的文本越大,节省的时间越高;其基本原理为通过多种规则得到文本每一行的特征值,将两个文本得到的特征值串通过以下方式比对:1、比较特征值矩阵2、根据数据填充规则进行数据的填充3、比对结果的输出

1

方法实现

以下,将具体介绍LCS的填充规则和输出规则:

1.填充规则:从右往左,从下往上

(1)当行特征值与列特征值不相等,则比较右边方格与下边方格值的大小,哪个值大就取哪个值;实现逻辑:c[i][j] = Math.max(c[i+1][j], c[i][j+1]);(2)当行特征值与列特征值相等,右下方格的数值加一;实现逻辑:c[i][j] = c[i+1][j+1] + 1;

2.输出规则:从左往右,从上往下

(1)当行特征值与列特征值不相等,将相邻的右边与下边两个数值进行大小比较,若右边数值大于等于下边数值,则数值输出路径转到右边;若右边数值小于下边数值,则数值输出路径转到下面(右边与下边谁大,路径就转到哪边);(2)当行特征值与列特征值相等,输出该特征值,并且路径跳转到右下角方格;

if(s1.charAt(i) == s2.charAt(j)){

System.out.print(s1.charAt(i)); i++;j++;

}

填充与输出序列如图1所示,输出结果为CBZK:

图1 填充与输出

代码实现如图2所示:

图2 代码实现

1

实际效果

图3 文本比对

图4 效果显示

该方法有效的提升了比对效率,从n^3降到n^2,极大的提高了时间的利用率。

1

功能性说明

此方法是一种典型的通过空间换时间的算法实现,通过提高一维的空间消耗降低一维的时间消耗,对于大文本文档(超过万行的文本),一次性开辟出一万乘一万的矩阵会有内存不足的风险,要解决该类问题,只需要在处理比对过程中新增对文档进行分割比对的处理:每千行文本为单位构建文本,即相当于拆分成多个小文件。

 

标星+置顶美亚柏科

一秒找到美美

java最长公共子序列_技术分享 | 最长公共子序列在比对工具的应用相关推荐

  1. java生成sm4算法的对称密钥_技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)...

    原标题:技术分享丨这是一篇简单的小科普--什么是对称加密算法?(下) 大家好~我是贾正经,又到了干货满满的技术分享趴啦~ 上期我们讲解了对称加密算法的小知识,并介绍了国密算法中SM4算法的原理. 本期 ...

  2. 对称加密算法_技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)...

    大家好~我是贾正经,又到了干货满满的技术分享趴啦~ 上期我们讲解了对称加密算法的小知识,并介绍了国密算法中SM4算法的原理.(上集回顾) 本期带大家了解一下分组密码的五个模式. 分组密码的模式 首先了 ...

  3. 大表与大表join数据倾斜_技术分享|大数据技术初探之Spark数据倾斜调优

    侯亚南 数据技术处 支宸啸 数据技术处 在大数据计算中,我们可能会遇到一个很棘手的问题--数据倾斜,此时spark任务的性能会比预期要差很多:绝大多数task都很快执行完成,但个别task执行极慢或者 ...

  4. python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...

    原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...

  5. mysql优化说出九条_技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢?

    原标题:技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢? 背景 2019-01-11 9:00-10:00 一个 MySQL 数据库把 CPU 打满了. 硬件配置:256G 内存,48 ...

  6. 干涉测量技术的应用_技术分享 | 石化行业测量仪表应用在线答疑

    众所周知,在化工和石化这类流程行业当中,稳定性和持续性是至关重要的生产"命脉",对于生产过程中使用的测量仪表有着极其严格的要求. 不仅所有测量仪表都必须满足严苛的国际标准,如PED ...

  7. hive中字段长度函数_技术分享:hive常用内部函数

    原标题:技术分享:hive常用内部函数 hive常用内部函数 hive是一种典型的数据仓库分析工具,常用语编写hql语句进行指标分析.在编写hql的过程中无疑会用到很多的函数,哪本章来编写一些常见的函 ...

  8. 精彩!安全圈的技术分享,竟成了他人割韭菜的工具?

    师傅们,大家好!在网络安全这个行业中,技术分享是一种重要的学习和交流方式.然而,在中国的网络安全圈里,许多人对技术分享持保守态度,喜欢藏着掖着.这一现象在一定程度上阻碍了网络安全行业的发展,限制了我们 ...

  9. java 可视化系统操作日志_技术文 | 日志框架使用技巧分享

    原标题:技术文 | 日志框架使用技巧分享 日志的意义 对于一个应用程序来说日志记录是具有重要意义的. 日志通常用于线上问题追踪,协助定位业务问题或程序问题,以及基于日志的业务逻辑统计分析等. java ...

最新文章

  1. Windows 10 安装 Docker for Windows
  2. 【架构】互联网架构三马车:微服务+消息队列+定时任务
  3. cve-2020-0796_SMBGhost 漏洞 CVE20200796 的PoC 已发布,攻击现身
  4. UVA 413|LA 5388|POJ 1492|ZOJ 1338 Up and Down Sequences
  5. mysql 概念和逻辑架构
  6. 使用jOOQ和JavaFX将SQL数据转换为图表
  7. Python动态创建变量的方法
  8. 使用CSDN的MarkDown编辑公式
  9. Windows每月更新补丁离线安装包下载
  10. dell r730服务器开启虚拟化,r730服务器不能开启虚拟化(dell开启cpu虚拟化)
  11. Android 邮箱自动补全-MultiAutoCompleteTextView实现
  12. easy-excel导出excel中日期列需要双击才能进行筛选
  13. 关于 Redis 的 懒惰删除 (十三)
  14. 完善C#汉字转拼音首字母代码
  15. JavaScript脚本实现单条微博自动重复转发
  16. cocos2dx lua
  17. 使用Telerik控件库制作WPF项目中的折线图、柱状图、饼图和甜甜圈图
  18. 3度带6度带区别、中央经线及带号的计算
  19. android 按键映射文件,《android 的按键映射表》.doc
  20. PADS VX2.8 方框、圈圈、XX的隐藏方法

热门文章

  1. Python 关于super 的 用法和原理(挖坑)
  2. java 常量pi_JAVA的常量
  3. Couldn‘t connect to session bus: Did not receive a reply. Possible causes include: the remote applic
  4. 【AITISA 第11次标准会议新一代人工智能产业技术创新战略联盟——AI标准工作组】神经网络压缩组会议
  5. python 优雅的 列表推导式(for in if)生成器表达式 集合推导式和字典推导式 列表动态构建器(不用先创建空容器【空列表】,再一个一个append()进去那样麻烦了)
  6. 除 Intel Realsense Dxxx 外 各市面深度摄像头对比(小觅智能 D1000-IR-120/Color、INDEMIND、领晰(LEADSENSE))(212)
  7. CSDN markdown中实现首行缩进(空格)的两种方法(“  ”)
  8. Python 科学计算库 Numpy (二) —— 索引及切片
  9. 浅谈Java虚拟机JVM的垃圾回收机制
  10. java 获取md5值报错_java获取文件的MD5值