이진 트리는 계층 적 데이터를 저장하는 데 특정 목적을 제공합니까? 그들의 정식 사용은 무엇입니까?


12

나는 이진 트리의 구조와 그것을 횡단하는 방법을 이해합니다. 그러나 프로그램과 프로그래밍에서 실제 용도, 목적을 실현하기 위해 고심하고 있습니다. 계층 적 데이터의 '실제'예에 대해 생각할 때 거의 2 명 이상의 자녀가 있습니다. 예를 들어 가계도에서 어머니는 종종 두 명 이상의 자녀를 가질 수 있습니다.

'이진 트리'는 배열 및 목록보다 처리 시간이 더 빠르므로 선형 관련 데이터 만 저장하는 데 실제로 유용합니까? 또는 계층 적 데이터를 저장하는 특정 목적을 수행합니까? 그렇다면 이진 트리를 적용한 예는 무엇입니까? 노드 에 최대 2 명의 자식 이있는 데이터는 무엇입니까 ?


이진 트리의 주된 용도는 데이터를 주문하는 것입니다. https://ko.wikipedia.org/wiki/Binary_search_tree
Mandrill

답변:


25

아니요, 이진 트리는 생각하는 의미에서 계층 적 데이터를 저장하기위한 것이 아닙니다. n고정 번호 인 n-ary 트리의 주요 사용 사례 는 의미 체계가 아닌 빠른 검색 기능 입니다.

한 사람이 1에서 100 사이의 숫자를 생각하는 오래된 게임을 기억하고 다른 사람은 가능한 한 적은 추측으로 그것을 추측해야하며, 잘못 생각하면 숫자를 생각하는 사람도 당신이 나인지 알려야합니다 높거나 너무 낮습니까? 항상 50에서 시작하고 25 또는 75로 이동하여 그 후 새로운 추측으로 검색 범위를 절반으로 나누고 결국에는 숫자를 추측 할 수 있기 때문에 잠시 후에 지루합니다. 최대 7 개의 추측으로 보장됩니다.

재미있는 게임은 아니지만이 속성은 이진 (및 기타 n-ary) 트리를 유용하게 만드는 요소입니다.이 트리를 사용하면 아주 짧은 시간에 매우 큰 데이터 세트를 검색 할 수 있습니다.


훌륭한 답변 정말 감사합니다. 따라서 이진 트리는 실제로 배열이나 목록에 데이터를 저장하는 또 다른 구조이지만 빠른 검색 기능의 추가 이점이 있습니까?
sw123456

1
@ sw123456 : 맞습니다. 모든 엔지니어링과 마찬가지로, 동일한 수의 요소를 가진 배열보다 O (n)가 아닌 데이터 세트의 요소 #n에 액세스하는 것보다 트레이드 오프 (더 많은 조각화) 메모리가 사용됩니다. 액세스 등)) 그러나 빠른 검색은 확실히 이진 트리의 주요 이점입니다.
메이슨 휠러

@ sw123456 다행 이네요 : :)
Mason Wheeler

3
트리가 균형을 이루면 요소에 대한 액세스는 O (log (n))입니다. O (n)은 성능이 저하 될 때 최악의 경우입니다 (대괄호가 하나 뿐인 대부분의 노드).
Mandrill 2018 년

@ sw123456 네트워크 라우팅은 Trie (문제 도메인의 효율성 향상을 위해 생성)라는 이진 트리의 약간의 수정을 사용합니다. 라우터가 패킷을 전달할 위치를 찾기 위해 IP 주소를 찾을 때 비트 단위로 트리를 통과 할 때 실제로 계층 구조 정보를 저장합니다. IP 주소는 본질적으로 계층 적이므로, 가장 긴 접두사 일치를 찾기 위해 IP를 통과 할 때 라우터가 IP 계층, ​​서브넷 IP 등을 통과합니다. 의미 상 명백하지는 않지만 관계는 있습니다. Mason이 대답 한 것처럼 라우터는이 구조를 사용하여 조회 효율성을 높입니다.
Chris Cirefice 2016 년

3

노드가 무제한의 자식을 가질 수있는 모든 트리 구조는 이진 트리를 사용하여 구현할 수 있습니다.

트리의 각 노드에 대해 오른쪽 및 왼쪽 포인터가있는 노드로 교체하십시오. 왼쪽 포인터는 노드의 첫 번째 자식으로 이동합니다. 오른쪽 노드는 노드의 다음 형제로 이동합니다. 지정된 노드의 모든 자식은 오른쪽 포인터로 연결된 연결된 목록에 있으며 목록의 머리글은 부모의 왼쪽 포인터로 가리 킵니다.

복잡한 n-ary 트리는 단순한 이진 트리가되었습니다.

나는 이것이 Knuth, Vol. 1 어딘가에.


이것은 정말 흥미로운 구현입니다. 각 자식 노드가 연결된 목록의 시작 이었기 때문에 각 노드 방문이 시작된다는 사실 때문에 균형이 잡히면 트리가 더 이상 O (log) n이 아니고 그렇지 않으면 O (n)이되지 않을 것이라고 생각합니다. 선형 검색을 해제 하시겠습니까? 이 구현은 검색 시간이 훨씬 느려질까요? 그러나 거꾸로 검색 시간이 표준 선형 구조의 검색 시간보다 빠를까요? 이것을 올바르게 이해 했습니까?
sw123456

@ sw123456, 원래 트리의 균형이 잡힌 경우 결과 바이너리 트리는 거의 확실하지 않습니다. 나는 다른 모든 것이 나무의 팬, 주어진 노드에 몇 명의 자녀가 있는지에 달려 있다고 생각합니다. 선형 검색은 주어진 노드의 자식 중 어떤 것을 따라야하는지 알아낼 때만 발생합니다. 그러나 n-ary 트리의 다른 구현에서는이를 피할 수 있는지 확실하지 않습니다.
Justsalt

2

이진 나무는 왜 그것들을 사용합니까?

프로그래밍에서는 동일한 유형의 데이터 모음으로 많은 작업을 수행합니다.

이 데이터를 저장하는 두 가지 기본 방법은 연결 목록과 배열입니다.

링크 된리스트에서 어떤 위치에서든 요소를 ​​쉽게 추가하거나 제거 할 수 있습니다. 그러나 원하는 요소에 도달 할 때까지 목록을 검토해야하기 때문에 특정 요소에 대한 액세스가 더 어렵습니다.

  • 효율적으로 검색하지는 않지만 삽입 및 삭제가 쉽습니다.

특정 요소에 대한 배열 액세스는 쉽지만 삽입 방법으로 인해 요소를 삽입하거나 삭제하기가 더 어렵습니다.

  • 효율적으로 (정렬 된 경우) 검색하지만 삽입 및 삭제가 어렵습니다.

따라서 연결된 목록과 배열에는 단점이 있습니다.

이진 트리는 배열과 연결된 목록의 문제를 해결하기 위해 만들어졌습니다.

  1. 간편한 삽입 및 삭제
  2. 쉬운 검색

따라서 이진 트리는 정기적으로 변경되는 많은 데이터가있을 때 만들어집니다.

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