Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有用于重新定位的差异算法?_Java_Algorithm_Diff - Fatal编程技术网

Java 是否有用于重新定位的差异算法?

Java 是否有用于重新定位的差异算法?,java,algorithm,diff,Java,Algorithm,Diff,我在检查迈尔斯算法,但在以下情况下: "A", "B", "C", "D", "0", "E", "F", "I" - original ^ "A", "B", "Z", "X", "E&quo

我在检查迈尔斯算法,但在以下情况下:

"A", "B", "C", "D", "0", "E", "F", "I"        - original
                     ^
"A", "B", "Z", "X", "E", "F", "G", "H", "0"   - revised
                                         ^
当0从第4个索引移动到第8个索引时,该算法只给出从长度到长度的“变化”

我确实有一个由我创建的算法,它可以检查重新定位,但是因为它使用了2个哈希映射,并且不能一次检查长度(只能逐个索引,即使只执行一次检查,仍然太多),所以速度太慢

该组件为我所称的“显式”删除及其相应的索引提供回调,它还为“通过repostion删除”及其int oldIndex提供回调。。。它提供了重新定位(int fromIndex,int toIndex)和插入(INTAT)

我只是想知道什么算法能给我提供这种详细的信息

我知道我可以建立在Myers算法的基础上,为它提供一个额外的层以获得更详细的信息,但我认为我可以使它尽可能地慢,特别是因为我需要检查任何增量类型“更改”的相等性,并且子列表()将在每个假设事务上创建新列表。。。还有.contains()是什么??嗯


我看到android库有一个diffUtil回调(使用相同的Myers算法)中的方法,名为
onMoved(int-fromPosition,int-toPosition)
,但我看到它实际上并没有告诉我什么东西移动了。。。所以我不知道为什么会这样…

这听起来与感谢您的回答有关@xdhmoore。这段话说“这些包括缓慢但形式上正确的方法”——并没有给我太多希望lol,如果是这样的话,我认为我的算法中唯一缺少的就是集成一种优化的并发形式……我所熟悉的这两种方法使用动态编程,在比较整个序列还是子序列(vs)方面有所不同。但是你可能需要修改它们来提供你需要的信息。还有idk,也许有更新更快的方法。这还取决于序列的长度,尽管它们被用来比较DNA的字符串,而DNA的字符串可能相当长……从修辞角度来说,你怎么知道“修订”中的零与“原始”中的零相同,而不是添加的全新零(以及“原始”中删除的零)?在我看来,您需要某种类型的同步阈值,以便只有比该值长的序列才会被视为同一序列,重新定位(与先删除后插入相反,反之亦然)。