데이터 구조 트리와 그래프의 차이점은 무엇입니까?


139

학문적으로, 데이터 구조 트리와 그래프의 근본적인 차이점은 무엇입니까? 트리 기반 검색과 그래프 기반 검색은 어떻습니까?

답변:


150

트리는 단지 제한된 형태의 그래프입니다.

나무는 방향 (부모 / 자식 관계)을 가지며주기를 포함하지 않습니다. 방향성 비순환 그래프 (또는 DAG) 범주에 적합합니다. 따라서 트리는 하위가 하나의 부모 만 가질 수있는 제한이있는 DAG입니다.

중요한 것은 Trees는 재귀 데이터 구조가 아닙니다. 위의 제한 때문에 재귀 데이터 구조로 구현할 수 없습니다. 그러나 일반적으로 재귀 적이 지 않은 DAG 구현도 사용할 수 있습니다. 내가 선호하는 트리 구현은 중앙 집중식 맵 표현이며 비재 귀적입니다.

그래프는 일반적으로 가장 먼저 넓게 또는 깊이로 먼저 검색됩니다. Tree도 마찬가지입니다.


8
그래프는 매우 유용하며 막대한 양을 모델링하는 데 사용할 수 있습니다. 다른 많은 데이터 구조는 제한이있는 그래프로 볼 수 있습니다. 예를 들어, 단일 연결 목록은 DAG의 특수한 경우입니다.
JR 가르시아

7
중앙 집중식 맵 표현의 의미 무엇입니까?
Geek

36
"나무는 재귀적인 데이터 구조가 아닙니다"는 오해의 소지가 있습니다. 트리는 비 재귀 데이터 구조로 표현 될 있습니다 (예 : 에지 배열, 이진 힙과 같은 전체 트리는 배열에서 매우 콤팩트하게 표현 될 수 있으며 다른 간결한 표현 등이 있습니다). 그러나 그것들을 나타내는 가장 대중적이고 유용한 방법은 재귀 포인터 기반 구조를 사용하는 것입니다. 표현은 뿌리없는 나무에 대해 고유하지 않지만 중요하지 않습니다.
j_random_hacker

2
좀 빠지는. 나무가 반드시 방향을 가질 필요는 없습니다. en.wikipedia.org/wiki/Tree_(graph_theory) 는 방향이없는 나무의 예를 보여줍니다. 이들은 생물학적 맥락에서 자주 사용됩니다.
Michal Palczewski

2
@ harshpatel991 나무는 "X와 Y는 부모-자식 관계에있다"는 방향이 없다는 의미에서 지시되지 않습니다. 그러나 개별 관계는 "X는 Y의 자식"이고 "Y는 X의 자식"입니다. 방향은 단지 그것을 나타냅니다. '운동'의 방향. 나무에서 방향에 대한 아이디어는 의미가없는 한 실제로 필요하지 않습니다 (나무가 가장 흔한 경우). 그것이 내가 그것을 보는 방법입니다.
Kostas Mouratidis 2016 년

105

설명하는 대신 그림으로 표시하는 것을 선호합니다.

실시간으로 나무

실시간으로 나무

실제 사용 그래프

실시간 그래프

예,지도는 그래프 데이터 구조로 시각화 될 수 있습니다.

이런 모습을 보면 인생이 더 쉬워집니다. 트리는 각 노드에 부모가 하나만 있다는 것을 알고있는 장소에서 사용됩니다. 그러나 그래프에는 여러 개의 선행 작업이있을 수 있습니다 (일반적으로 부모라는 용어는 그래프에 사용되지 않음).

실제로는 그래프를 사용하여 거의 모든 것을 나타낼 수 있습니다. 예를 들어지도를 사용했습니다. 각 도시를 노드로 간주하면 여러 지점에서 도달 할 수 있습니다. 이 노드로 이어지는 포인트를 선행 작업이라고하며이 노드로 이어지는 포인트를 후속 작업이라고합니다.

전기 회로도, 주택 계획, 컴퓨터 네트워크 또는 하천 시스템은 그래프의 몇 가지 예입니다. 많은 실제 사례가 그래프로 간주 될 수 있습니다.

기술 다이어그램은 다음과 같습니다

나무 :

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

그래프 :

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

아래 링크를 참조하십시오. 그것들은 나무와 그래프에 관한 거의 모든 질문에 대답 할 것입니다.

참고 문헌 :

  1. http://www.introprogramming.info/english-intro-csharp-book/read-online/chapter-17-trees-and-graphs/#_Toc362296541

  2. http://www.community-of-knowledge.de/beitrag/data-trees-as-a-means-of-presenting-complex-data-analysis/

  3. 위키 백과


7

다른 답변은 유용하지만 각 속성이 누락되었습니다.

그래프

무향 그래프, 이미지 출처 : Wikipedia

직접 그래프, 이미지 소스 : Wikipedia

  • 정점 세트 (또는 노드)와 그 일부 또는 전부를 연결하는 모서리 세트로 구성
  • 모든 모서리는 동일한 모서리에 의해 아직 연결되지 않은 두 개의 정점을 연결할 수 있습니다 (유향 그래프의 경우 동일한 방향으로)
  • 연결될 필요가 없습니다 (가장자리가 모든 정점을 서로 연결할 필요는 없음) : 단일 그래프는 연결이 끊긴 정점 세트로 구성 될 수 있습니다
  • 감독 또는 (그래프의 모든 모서리에 적용 할 것이다) 방향성이 될 수 있습니다
    당으로 위키 백과 :

    예를 들어, 정점이 파티에서 사람을 나타내고 두 사람이 악수하면 경계가있는 경우 B가 A와 악수하는 경우에만 A가 사람 B와 악수 할 수 있기 때문에이 그래프는 방향이 지정되지 않습니다. 대조적으로, 사람 A로부터 사람 B 로의 에지가 감탄 B에 대응하면, 감탄이 반드시 왕복 운동 할 필요는 없기 때문에이 그래프가 지시된다.

나무

이미지 출처 : Wikipedia

  • 그래프의 종류
  • 정점은보다 일반적으로 "노드"라고합니다.
  • 가장자리는 "의 자녀"(또는 "의 부모") 관계를 나타내며
  • 각 노드 (루트 노드 제외)에는 정확히 하나의 부모 (및 0 개 이상의 자식)가 있습니다.
  • 부모가없는 노드 인 정확히 하나의 "루트"노드 (트리에 하나 이상의 노드가있는 경우)가 있습니다.
  • 연결해야합니다
  • 순환 이 없음을 의미하는 비순환입니다 . "사이클은 정점 자체에서 도달 할 수있는 모서리와 정점의 경로 [AKA 시퀀스]입니다."

위의 속성에 약간의 겹침이 있습니다. 특히 마지막 두 속성은 나머지 속성에 의해 암시됩니다. 그럼에도 불구하고 그들 모두는 주목할 가치가 있습니다.


3

트리에서 각 노드 (루트 노드 제외)에는 정확히 하나의 선행 노드와 하나 또는 두 개의 후속 노드가 있습니다. 주문, 사전 주문, 주문 후 및 너비 우선 순회를 사용하여 순회 할 수 있습니다. 트리는주기가없는 DAG (Directed Acyclic Graph)라고하는 특수한 종류의 그래프입니다. 트리는 계층 적 모델입니다.

그래프에서 각 노드에는 하나 이상의 선행 노드 및 후속 노드가 있습니다. 그래프는 DFS (Depth First Search) 및 BFS (Breadth First Search) 알고리즘을 사용하여 순회합니다. 그래프는주기를 가지므로 트리보다 복잡합니다. 그래프는 네트워크 모델입니다. 유향 그래프와 무향 그래프의 두 종류의 그래프가 있습니다.


2

나무는 분명합니다. 자식이있는 노드로 구성된 재귀 데이터 구조입니다.

맵 (일명 사전)은 키 / 값 쌍입니다. 지도에 키를 제공하면 연관된 값이 반환됩니다.

트리를 사용하여지도를 구현할 수 있습니다. 혼란스럽지 않기를 바랍니다.

업데이트 : "지도"에 대한 "그래프"를 혼동하는 것은 매우 혼란 스럽습니다.

그래프는 나무보다 복잡합니다. 나무는 재귀적인 부모 / 자식 관계를 암시합니다. 나무를 가로 지르는 자연적인 방법이 있습니다 : 깊이 우선, 너비 우선, 레벨 순서 등

그래프는 노드 사이에 단방향 또는 양방향 경로를 가질 수 있고 주기적 또는 비 주기적 일 수 있습니다. 그래프가 더 복잡하다고 생각합니다.

적절한 데이터 구조 텍스트 (예 : "알고리즘 디자인 매뉴얼")에서 커서 검색을 수행하면 여러 SO 답변보다 더 많은 정보를 얻을 수 있다고 생각합니다. 수동적 인 경로를 취하지 말고 스스로 조사해 보는 것이 좋습니다.


1
죄송합니다. 그래프를 의미합니다.지도를 입력했습니다.
user918304

"지도"에 대해 "그래프"를 혼동하는 것은 매우 혼란 스럽다. " :)
cpz

1
"그래프는 나무보다 더 복잡하다"는 것은 "까마귀는 새보다 더 전문적이다"라고 말하는 것과 같습니다. 대신 "모든 나무는 그래프이지만 모든 그래프는 나무가 아닙니다"라고 말해서는 안됩니까?
dudewad

6 년 후에는 상관하지 않습니다. 확실히 당신은 여기에서 시간을 더 잘 사용할 수 있습니다.
duffymo 2016 년


0

수학에서 그래프는 객체 쌍이 링크로 연결된 일련의 객체를 나타냅니다. 상호 연결된 객체는 꼭짓점이라고하는 수학적인 추상화로 표현되며, 한 쌍의 꼭짓점을 연결하는 링크를 가장자리라고합니다. [1] 일반적으로 그래프는 정점에 대한 점 세트로 다이어그램 형식으로 표시되며 모서리에 대한 선 또는 곡선으로 연결됩니다. 그래프는 이산 수학 연구의 대상 중 하나입니다.


0

트리에서 하나의 루트 노드와 하나의 자식에 대해 하나의 부모. 그러나 루트 노드의 개념은 없습니다. 또 다른 차이점은 트리는 계층 적 모델이지만 그래프는 네트워크 모델입니다.


0

나무는 다음과 같은 Digraph입니다.

a) 가장자리 방향이 제거되면 연결되고 비 주기적입니다.

  1. 당신은 그것이 비 주기적이라는 가정을 제거 할 수 있습니다
  2. 유한 한 경우 연결되어 있다는 가정을 제거 할 수도 있습니다.

b) 하나의 뿌리를 제외한 모든 정점이 1

c) 뿌리는 0도이다

  1. 노드가 극소수 인 경우 루트가 0이라고 가정하거나 루트 이외의 노드가 1 도라는 가정을 제거 할 수 있습니다.

참조 : http://www.cs.cornell.edu/courses/cs2800/2016sp/lectures/lec27-29-graphtheory.pdf


0

트리는 기본적으로 사이클을 포함하지 않는 무 방향 그래프이므로 트리가 더 제한된 형태의 그래프라고 말할 수 있습니다. 그러나 트리와 그래프는 프로그래밍에서 다양한 알고리즘을 구현하는 응용 프로그램이 다릅니다. 예를 들어 그래프는 모델 로드맵에 사용될 수 있고 트리는 모든 계층 적 데이터 구조를 구현하는 데 사용될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.