【问题标题】:Term for diff/delta on multiple files or data structures多个文件或数据结构上的 diff/delta 术语
【发布时间】:2019-08-06 16:17:02
【问题描述】:

我想知道是否有一个合适的术语来描述/获取多个文件或数据结构之间的差异的“差异”,以便生成的“差异”首先包含对 共有部分的描述所有文件/结构,然后描述必须如何修改这个“基础”文件/结构以获得单独的文件/结构,如果某些文件/结构彼此之间比其他文件/结构更相似,则最好采用分层方式。 p>

有一些关于如何使用某些工具(例如DIFF utility works for 2 files. How to compare more than 2 files at a time?)执行此操作的问题和答案,但由于我想针对特定类型的数据结构(即 JSON)执行此操作,我不知道我什至应该搜索什么。

在我看来,这种类型的问题应该很常见,可以有一个名称,例如“分层差异”(但它似乎是为分层数据结构上的 2 路差异保留的)、“共性发现”或类似的东西。

我猜想关于共性和差异的分层排序的相关概念是formal concept analysis,但这适用于属性集而不是分层数据结构,对我没有多大帮助。

【问题讨论】:

  • 到目前为止我发现了什么:根据this,其中心的子问题称为最大公共嵌入式子树,通常定义为任意数量的树,但大多数出版物随后将树的数量限制为 2。根据this,“如果输入树的数量超过两个,问题就是 NP-hard”,这也许可以解释我完全缺乏库的原因到目前为止发现。 This 描述了一种近似多项式时间算法。

标签: diff terminology conceptual


【解决方案1】:

有多种有效面额:

  • 数据比较(或序列比较)
  • 增量编码
  • Delta 压缩(或差分压缩)

算法:

好的维基百科链接

一些实现

【讨论】:

  • 谢谢,但这些都不适用于两个以上的输入比较 JSON 而不是文件。有些可以使用两个以上的输入(例如 Diff3,尽管顾名思义,它最多只能使用 3 个输入),有些可以比较 JSON(例如 jsondifflib 和 jsondiffpatch),但没有一个可以两者兼得。我认为最长公共子序列问题是我已经提到的最大公共嵌入子树问题的一个特例。我想我正在寻找的只是没有一个方便的名称,也没有我想象的那么普遍。
  • 这些算法适用于 2 个文件,但也适用于 N 个文件,我只是查看了Diffuse 源代码,Derrick Moser(该工具背后的程序员)使用@987654331 使用的算法的变体@(最长公共子序列)。顺便说一下,Diffuse 使用 JSON 文件
猜你喜欢
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多