Блог пользователя Least_but_not_the_last

Автор Least_but_not_the_last, история, 7 лет назад, По-английски

This is the problem. Here we can't change child order. But how you would solve this problem if we could change child order? Thanks.

  • Проголосовать: нравится
  • +10
  • Проголосовать: не нравится

»
7 лет назад, # |
  Проголосовать: нравится +20 Проголосовать: не нравится

There is still a polynomial solution. No idea whether this is close to being optimal, it probably isn't, it's just the first thing that came to my mind.

We will have a memoized recursive function match(u,v) that returns whether the subtree of tree 1 rooted at u can be changed into the subtree of tree 2 rooted at v. Clearly, match(root1,root2) is what we want.

Here is what match(u,v) does: Let u1,...,ux be the children of u, and let v1,...,vy be the children of v. Make a bipartite graph where the ui are one partition, the vj are the other, and edges correspond to match(ui,vj) being true. Then, match(u,v) returns true iff this bipartite graph has a matching of size y. (The matching also tells you which subtree of u should be pruned to produce which subtree of v.)

»
7 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

According to the faster time submission by gainullin.ildar there is a dynamic programming approach — edit distance with only Delete operation.