2016-10-30 124 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