Я считаю, что вы можете найти хорошее решение, если сосредоточитесь на деталях вашей конкретной проблемы. Единственное «разумное» решение, которое я имею в виду для общего случая, основано на отражении : рекурсивно сканировать элементы данных и находить сходства соответствующих пар элементов.
Однако у этой идеи так много проблем, поэтому я не думаю, что она осуществима. Среди них:
1) Понятие вес поддеревьев членов должно быть четко определено, чтобы иметь возможность возвращать процент сходства.
2) Как обрабатывать элементы данных, которые принадлежат только одному из объектов? это часто происходит при сравнении экземпляра класса A с экземпляром класса-потомка B.
3) Возможно, самая большая проблема: отображение между внутренней структурой объекта и его абстрактным представлением данных не является инъективной функцией. Например, два хэш-карты, представляющие одно и то же отображение, могут иметь разную внутреннюю структуру из-за разной истории перераспределения таблиц.