Выведение diff между объектами, начиная с патча, примененного к одному из них - PullRequest
0 голосов
/ 07 октября 2011

Я хотел бы знать, есть ли какие-либо известные подходы, кроме наивного алгоритма, к такой проблеме, которую мне нужно решить.

У меня есть два объекта одного типа, 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, чтобы выяснить различия, но мне интересно, есть ли другой алгоритм или оптимизированный способ его реализации.

...