gpt4 book ai didi

java - 用于区分内存对象的 Levenshtein Distance-like 算法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:02:54 25 4
gpt4 key购买 nike

这里是 Java 8,尽管这个答案应该适用于任何语言。

我有一个问题,我需要比较对象,比如 Widgets ,并在它们之间产生一个“差异”:也就是说,一组步骤,如果遵循这些步骤,将转换一个 Widget ()转换为另一个(目标)。

class Widget {
// Properties and such.
}

class WidgetDiffer extends Differ<Widget> {
List<Transformation> diff(Widget source, Widget target) {
// The produced list will convert source to target, if executed
// by some runtime.
}
}

class WidgetTransformer extends Transformer<Widget> {
@Override
Widget transformSourceToTarget(Widget source, List<Transformation> transforms) {
// Somehow, run 'transforms' on 'source', which *should*
// produce an object with the same state/properties as
// the original target.
}
}

我知道 Levenshtein Distance字符串转换算法,但是:

  • 这只是字符串,而不是 Widgets ;和
  • 它只给你一个整数(将接收器变成目标所需的转换次数),而我需要一个 List<Transformation>当由某些引擎执行时,将源转换为目标

我想知道是否有任何已知算法可以执行此类操作。这些算法有没有可能存在于某处的图书馆中?!?

最佳答案

我将其视为搜索问题。构造一个图,其中目标节点是所需的小部件,起始节点是要转换的小部件。每个步骤(图中的边)代表对小部件的一种可能转换(添加或删除属性)。构建图形后,运行带有路径提取的 DFS,您将获得将起始小部件转换为所需小部件所需的步骤(这也是所需的最少步骤)。

关于java - 用于区分内存对象的 Levenshtein Distance-like 算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31592405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com