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

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

I was reading about tree isomorphism and came across this paper. It explains an amazing algorithm developed by Aho, Hopcroft and Ullman which finds out if two rooted trees are isomorphic in linear time. I have searched for this problem on several online judges in order to test my implementation, but have had no success. If anyone has seen a problem that requires this algorithm could he/she be so kind to share the link?

Any help is appreciated :)

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

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

Something like that? Problem

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

    Thank you for sharing. However, that is not exactly what I am looking for. That problem requires checking if two binary trees are isomorphic. I have actually already tested this algorithm on that problem XD. But now I want to test if my implementation works on any type of rooted tree, not only binary.

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

      I think it could help so Any type tree Problem

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

        That is a great example too. However, in that problem, the tree is not rooted.

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

          No, it doesn’t really matter. Can you see why?

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

            Sorry for the possible necroposting, but there is a possible (but somewhat trivial) constant-optimization that can be done.

            If the numbers of centroids do not match, the trees are not isomorphic.

            If both have one centroid, it suffices to check after rooting by that centroid.

            If both have two centroids, then fix one centroid in one tree and check both centroids in the other tree.

            This gives a speed-up of about 2x in the worst-case :)

            • »
              »
              »
              »
              »
              »
              »
              4 года назад, # ^ |
                Проголосовать: нравится -11 Проголосовать: не нравится

              Hey, If there are two centroids, then aren't they adjacent and rooting them at any would result in 2 isomorphic rooted trees. So isn't it meaningless to check for each when we can choose any from the first and same for the second tree?

              • »
                »
                »
                »
                »
                »
                »
                »
                4 года назад, # ^ |
                Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

                For example take $$$P_4$$$ and attach two vertices to one of the leaves. Centroids have different degrees so they can't result in two isomorphic rooted trees. We can get another example if we use $$$P_6$$$ instead of $$$P_4$$$. In this case rooted trees have different heights.

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

                  Hey, thank you for taking the time and helping me. I am sorry if this may sound dumb but can you please explain what $$${P_4}$$$ and $$${P_6}$$$ are.

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

                  $$$P_n$$$ stands for path of size $$$n$$$. check this (3 and 4 are centroids).

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

This appeared in the Indian online regional — https://www.codechef.com/problems/TWOTREES

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

Hey,

This one isn't rooted, but by using the technique ko_osaga mentioned above, it should be reducible into it anyway. It's from a recent ICPC Regional.

Hope it helps!