Я бы закодировал значение порядка и свойства в число.Числа имеют преимущество быстрых сравнений.
Это общая идея, и, возможно, все еще потребуется некоторая работа, но я надеюсь, что это поможет каким-то образом.
вычисление числа (некоторая форма хэша)для каждого свойства и умножьте число, представляющее порядок появления свойства для элемента.
скажем, у item1 есть 3 свойства A, B и C.
hash (A) = 123, hash(B) = 345, хэш (C) = 456
, затем умножьте это на порядок появления, учитывая, что мы знаем число свойств:
(hash (A) * 1000,00) + (hash (B) * 1,000) + (hash (C) * 1) = someval
величина множителя может быть изменена для отражения вашего набора данных.вам нужно будет определить хэш-функцию.может быть, soundex?
проблема теперь сводится к вопросу уникальности из-за коллизий хешей, но мы можем быть почти уверены в свойствах, которые не совпадают.
также, это имело бы преимуществоотносительной простоты проверки, если свойство появляется в другом элементе в другом порядке, используя величину множителя, чтобы извлечь значение хеша из сгенерированного числа.
HTH.
edit: пример дляпроверка совпадений
с учетом item1 (abc) и item2 (abc).вычисленный хэш элементов будет равен.это лучший вариант развития событий.дальнейшие вычисления не требуются.
с учетом item1 (abc) и item2 (dea).вычисленный хэш элементов не равен.перейти к разбивке хэшей свойств ...
скажем, хеш-таблица для свойств a = 1, b = 2, c = 3, d = 4, e = 5 с 10 ^ n для множителя.вычисленный хеш для item1 равен 123, а item2 равен 451, разбейте вычисленный хеш для каждого свойства и сравните для всех комбинаций свойств по одному для каждого item1 (который становится item1 (1 2 3)) и item2 (который становится item2 (4 5 1))).затем вычислите балл.
другой способ посмотреть на это - сравнить свойства одно за другим, за исключением того, что на этот раз вы играете с числами вместо фактических строковых значений