AVL 나무로 반복되는 가치와 듀얼 비교

0

질문

내가 필요로 데이터 구조를 만들어를 사용하여(주로 AVL 무)개체의 두 값:준(지 않은 독특한)및 id(독특한).

내가 지원하는 데 필요에 의하여 찾는 id,인쇄에 의해 수준뿐만 아니라,두 개의 병합한 나무 및 유지는 이러한 기능을 가진 새로운 트리입니다.

이미 여러 가지 솔루션을 마음에서만 요청에 대한 특정한 하나:

이 그것을 구현하기 위해 노력이 구조와 단일 AVL 트리는 두 개의 노드를 처음에 비해 자신의 수준에 따라,그리고 다음 자신의 id? 대부분 내가 투쟁을 실현하는 방법을 병합하는 두 가지 같은 나무가 일할 수 있는 경우에,특히 우리 나무는 모든 개체가 수준의 x 과 나무 B 는 모든 개체가의 수준을 y.

편집:도 검색하기위한 id 와있을 것 이외에는 나무만으로 정렬 id 입니다.

이 방법을 작동하는가?

algorithm avl-tree data-structures
2021-11-23 19:10:15
1

최고의 응답

2

단일 AVL 트리는 두 개의 노드를 처음에 비해 자신의 수준에 따라,그리고 다음 자신의 id?

불행히도 아니다. 당신이 경우에 당신이 할 수 없을 효율적으로 찾을 수 있는 노드에 해당 id-당신이해야 할 모든 가능한'수준'을 지정하지 않은 그래서 나는 가정들 수 있습니다.

나는 생각을 삽입할 수 있습니다 각 노드로 두 가지 별도의 AVL 나무를 대신 합니다. 한 AVL 트리기 위해 노드에 의해 수준에 의해 다른 자신의 id 입니다. 모든 쿼리,삽입,삭제 및 병합을 할 수 있는 각 나무에 따로 있습니다.

다른 말로 당신을 만들었는 두 개의 인덱스 데이터 관리가 가능하게 해줍니다.

에서 코드:

struct Node {
    int id;
    int level;

    // by id
    int id_bf;
    Node *id_left, *id_right;

    // by level
    int level_bf;
    Node *level_left, *level_right;
};

편집:도 검색하기위한 id 와있을 것 이외에는 나무만으로 정렬 id 입니다.

당신은 기본적으로 설명하다. 그러나 당신의 나무는 합성에 의해 정렬 (level, id) 키 낭비이다;당신이 필요로하는 모든 나무에 의해 정렬 (level) 고 나무에 의해 정렬 (id) (스칼라 열쇠). 할 필요가 없,사이에 작업을 제공하으로 정렬 (level, id)(id).

2021-11-23 19:29:44

감사에 대한 답변이 불행하게도 나는 그냥 언급하는 것을 잊었는 또한 내가 나무가 있으로 분류에 대한 id 가 이 기능이 있습니다. 나는 당신의 생각한 솔루션이었어에 대해 궁금 이 특정한 솔루션에 동급생은 나에게 말했다는 것이라고 생각하기 때문에 작동하지 않을 병합
user3917631

@user3917631:나무에 의해 정렬(수준,id)도로 정렬(준). 따라서 당신은 나무가 있으로 정렬(id)또한 하나의 사람들,당신이 할 수 있는 작업을 효율적으로 처럼 나는 설명한다. 그것은 약간의 낭비를 정렬(수준,id)는 경우에 당신이 필요로하는 것입니다(레벨).
Yakov Galka

내가 알고,나만의 관심할 수 있습니까? 그것은 두 개의 나무로 정렬(수준,id)모두 정수 및 병합에서 그들을 O(n)(n 개의 결합 노드).
user3917631

@user3917631:네,그것이 가능하며,다른 합병 두 나무에 의해 정렬 아무것도. 검색 나무는 비교 기반으로,그래서 그들은하지 않는'돌'신 사용하고 키를 만큼 그것은 완전히 주문정. 튜플의 정수를 설정합니다. 위키 문서에 AVL 나무를 수행하는 방법에 대해 설명합니 효율적인 병합; 이라고 union. 그러나 저장할 수 있습 노드를 높이는 대신 균형 요소이다.
Yakov Galka

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................