두 트리 구조 비교


13

나는 이것을 올바른 용어로 묘사하려고 애쓰는 데 어려움을 겪고 있으므로 가능한 한 자세히 설명하고 누군가가 내가하려는 일을 알고 있기를 희망합니다 =-)

두 노드 트리를 비교하여 구조적 측면에서 얼마나 유사하거나 다른지 결정하려고합니다. 아래 다이어그램에서 두 예제는 모두 같은 수의 자식, 손자 등을 갖습니다. 예제 1에서 Root에는 두 명의 자식이있는 자식이 있지만 예제에서는 루트가 없습니다.

나는 재귀 적으로 반복하고 각 레벨의 수를 계산하고 비교하는 방법을 알아낼 수 있습니다. 나무가 얼마나 비슷한 지에 대한 아이디어를 제공하지만 그런 식으로 만 수행하면 동일하게 보일 것입니다. 사실 그들은 그렇지 않습니다.

아무도 이것에 대해 알고 있습니까? 또는 이것이 무엇인지에 대한 기술적 용어는 무엇입니까?

편집 : 또한 이것은 C #에 있으며 List를 사용하여 이러한 객체와 해당 자식을 저장합니다.

실시 예 1

여기에 이미지 설명을 입력하십시오

실시 예 2

여기에 이미지 설명을 입력하십시오


1
실제로 무엇을 달성하려고합니까? 이것은 XY 문제 처럼 들립니다 .
msell

내가 설명 할 수있는 가장 좋은 방법은 사용자가 한 번에 하나의 분자를 만드는 '분자'구조를 비교하는 것입니다. 예 1은 사용자가 작성한 구조이고 예 2는 사용자가 올바른 구조를 작성했는지 판별하는 데 도움이되는 사전 정의 된 구조 목록의 일부일 수 있습니다. 루트 트리 isomorphism은 분명히 내가 찾던 것입니다 =-)
Mungoid

답변:


11

당신이 찾고있는 것은 Root Tree Tree Isomorphism입니다. 이것은 Tree and Root Node를 제외하고 Graph Isomorphism 의 특수 버전입니다 .

이 과제에 대한 설명 은 두 가지 속성을 사용합니다.

  • 동일한 수의 레벨을 갖습니다 (루트 노드와 리프 노드 사이의 거리)
  • 각 레벨에는 동일한 수의 노드가 있습니다

이 두 가지 속성을 사용하여 잎에서 뿌리까지 길을 따라 가면서 각 노드에 사전 식 순서로 자식 수를 레이블로 지정하십시오. 예를 들어, 예 1의 루트는 (0, 0, (0, 1))로 표시됩니다. 세 개의 자식이 있고 첫 번째 / 두 번째에는 0 개의 자식이 있고 세 번째에는 각각 0과 1 개의 자식이있는 두 개의 자식이 있습니다. 마지막으로 루트 레이블을 비교하여 나무가 동일한 지 확인하십시오.

나는 이런 종류의 주제를 수행하지 않았으며 몇 분 전에이 논문을 읽었으므로 정확성을 보증 할 수는 없다. 어쨌든 도움이되기를 바랍니다.


굉장히, 내가 찾는 바로 그 것입니다! 나는 그것을 가야 할 것이다. 감사!
Mungoid

루트 노드가있는 경우에만 작동한다고 생각하지만이 경우에는 그럴 수 있습니다. D +1
Roy T.

루트 노드가 제공되지 않은 경우에도이 기술을 사용할 수 있지만 모든 루트를 시도하십시오. 두 개의 나무를 비교할 때 이는 최대 n 번 반복됨을 의미 합니다.
congusbongus

그러나 그것은 매력처럼 작동했습니다. 그것을 이해하는 데 약간의 시간이
걸렸지

이것에 감사드립니다, 나도 사용할 수있는 것처럼 보입니다. 트리의 중심을 찾는 알고리즘을 좋아합니다. 매우 영리한.
oodavid

4

두 개의 그래프가 논리적으로 동일한 지 확인하는 문제를 Graph Isomorphishm 이라고 하므로 여기에서 시작하는 것이 좋습니다.

일반적인 Graph Isomorphism 문제는 NP에 있지만이 특별한 경우에는 지름길이있을 수 있습니다. 차이가 동일한 지 확인해야한다는 것이 논리적 인 것처럼 보이기 때문에 확실하지 않습니다.


그렇습니다. 그것이 무엇이라고 불리는 지 결코 알지 못했을 것입니다. 감사합니다 =-)
Mungoid
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.