2016-10-30 3 views
1

Предположим, что у меня есть два или более массивов/списков, содержащих одни и те же элементы, но с другим порядком.Определить разницу между порядком массивов

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

На самом деле мне нужно исследовать различные способы, которыми я могу вычислить «подобие», поэтому мне бы хотелось иметь ключевые слова для google некоторые теории об этом! Для моей цели я должен уделять больше внимания относительной разнице заказов, а не абсолютного порядка («1234» должен быть больше похож на «1423», чем на «1432») – blian

ответ

0

List of algorithms you are searching for

Вы можете сравнить свои массивы с любым из этих алгоритмов, чтобы получить определенный «likelyness» вашего выбора. Для применения этих алгоритмов на более общих данных, определить:

  • Каждый отдельный объект всех ваших массивов, как «буквы»
  • Каждый массив, как «строка»

Это все, что вам нужно выбрать тот, который вам нужен, и реализуйте его.

+0

спасибо! Поскольку я обрабатываю менее 257 элементов, я просто собираюсь лить идентификаторы элементов (int от 0 до 200) на char и строить строки из того, как они упорядочиваются в массивах. Кроме того, для поиска уже выполненных реализаций я нашел это: https://github.com/tdebatty/java-string-similarity – blian

Смежные вопросы