Algorithm 如何正确区分树(即嵌套的字符串列表)?
我在一个由嵌套字符串列表组成的数据类型的在线编辑器中工作。请注意,如果每次更改单个值时都要传输整个结构,那么通信量可能会变得难以忍受。所以,为了减少流量,我考虑使用一个diff工具。问题是:如何查找和报告两棵树的差异?例如:Algorithm 如何正确区分树(即嵌套的字符串列表)?,algorithm,data-structures,language-agnostic,diff,Algorithm,Data Structures,Language Agnostic,Diff,我在一个由嵌套字符串列表组成的数据类型的在线编辑器中工作。请注意,如果每次更改单个值时都要传输整个结构,那么通信量可能会变得难以忍受。所以,为了减少流量,我考虑使用一个diff工具。问题是:如何查找和报告两棵树的差异?例如: ["ah","bh",["ha","he",["li","no","pz"],"ka",["kat","xe"]],"po","xi"] -> ["ah","bh",["ha","he",["li","no","pz"],"ka",["rag","xe"]],"po"
["ah","bh",["ha","he",["li","no","pz"],"ka",["kat","xe"]],"po","xi"] ->
["ah","bh",["ha","he",["li","no","pz"],"ka",["rag","xe"]],"po","xi"]
在那里,唯一的变化是树的深处的“kat”->“rag”。周围的大多数diff工具都适用于平面列表、文件等,但不适用于树。我找不到任何关于那个具体问题的文献。什么是报告此类更改的最小方式,什么是查找此类更改的有效算法?XML是一种常用的树状数据结构,通常用于描述结构化文档或其他需要监控其随时间变化的层次对象。因此,毫不奇怪,最近在树区分方面的大部分工作都是在XML上下文中进行的 以下是2006年的一项调查,其中包含许多可能有用的链接: 上面的一个更有趣的链接,伴随着一个名为TreePatch的开源实现,但现在似乎已经不存在了: 另一篇调查文章,作者,还有一大堆参考文献。(那一个来自一个on)
祝你好运。找到两棵树之间的差异看起来有点像在树上搜索。你所知道的唯一区别是你必须弄清这两个问题的根源。 您可以同时搜索这两棵树,当您发现差异时,将一棵树更改为另一棵树(如果这是您的目标-最终得到相同的树,而不是每次都发送一棵树) 我在diff'ing 2树上找到了一些链接: 希望这些链接对您有用。:)
ZLib的使用有点不寻常和棘手,但在本例中,Bc不仅仅是压缩块B,它实际上是压缩块a和B之间的差异。如果ZLib字典的大小与块a的大小相当,它将非常有效。对于巨大的数据块,它将不那么有效。您在寻找XSLT吗?嗯,请再说一遍?我不知道XSLT是什么意思,但如果它是关于XML的,那么没有。。。编辑:阅读描述看起来很有趣,可能是JSON的XSLT?我现在要研究。考虑问这些类型的问题。