2016-10-30 86 views
1

让我们假设我有两个或多个数组/列表包含相同的元素,但顺序不同。量化数组之间的差异order

MyClass[] array1 = new MyClass[] {obj1, obj2, obj3, obj4}; 
MyClass[] array2 = new MyClass[] {obj1, obj4, obj2, obj3}; 

我需要比较的算法和计算元素的顺序差异在阵列中,是这样的:

double likeness = ArraysOrderComparator.compare(array1, array2); 

我认为有不同的方法来做到这一点。 基本上,我想定义一个度量来比较不同数组的顺序。 我敢打赌一些算法已经存在,有人可以给我一个提示吗? 我需要在java代码中实现它。

+0

定义'订单差异'。例如,你会期望“相似”等于什么? –

+0

比较订单肯定有多种方式,但正确的解决方案可能需要更好地了解比较的用途。一个基本的想法可能是简化这样的事实,即你的数组实际上只是字符串,你可以使用任何字符串差分算法(如汉明距离)。我假设你的情况('1234','1423')会比说('1234','1243') – RudolphEst

+0

更不相似。其实我需要探索不同的方式来计算'相似性',所以我想有关键字谷歌有关它的一些理论! 为了我的目的,我应该更重视相对顺序差异而不是绝对顺序('1234'应该更接近'1423'而不是'1432') – blian

回答

0

List of algorithms you are searching for

你可以使用任何的这些算法的比较你的阵列来获得您所选择的定义“likelyness”。要在更一般的数据应用这些算法,定义:

  • 所有的数组作为“信”
  • 每个阵列称为“串”

的每一个不同的对象,是所有你需要挑你需要并实施它。

+0

谢谢!由于我处理的元素少于257个,因此我只是将项目ID(int从0到200)转换为char,并根据它们在数组中排序的方式构建字符串。此外,搜索已完成的实现,我发现这个:https://github.com/tdebatty/java-string-similarity – blian