Я хотел бы знать, есть ли какие-либо известные подходы, кроме наивного алгоритма, к такой проблеме, которую мне нужно решить.
У меня есть два объекта одного типа, o1 и o2, содержащие некоторыеfields, f1, f2 и f3:
o1:
f1: A
f2: B
f3: C
o2:
f1: D
f2: B
f3: null
Теперь мне нужно выяснить, какие изменения происходят в полученном мной патче o2, который делает o1 равным o2 (с точки зрения равенства значений в их полях),Пример:
- Патч: f1 = D, f3 = null
В этом случае я должен сделать вывод, что ничего не изменилось в o2, так как применение этого патча к o1 делает его идентичным текущему состояниюo2 - Патч: f1 = D, f3 = E
В этом случае я должен сделать вывод, что изменение o2 просто f3 = E - Патч: f1 = D
InВ этом случае я должен сделать вывод, что изменение o2 просто f1 = C
Я думаю, что три приведенных выше примера охватывают все случаи.Теперь наивным алгоритмом будет применение патча к o1, а затем diff o2 к исправленному o1, чтобы выяснить различия, но мне интересно, есть ли другой алгоритм или оптимизированный способ его реализации.