Upload
wakeup01
View
584
Download
1
Embed Size (px)
Citation preview
트리의 다른 표현들
순차 할당 기법
• 전위 순차 표현
• 가족 순차 표현
• 수준 순서 순차 표현
• 차수가 부연된 후위 순서
순차 표현
연결된형태의 표현
• 연결 트리
• 삼중 연결 트리
• 고리 구조
순차 할당 기법
• 트리 구조를 간결하게 표현하고자 할 때 적
합하다.
• 트리 노드의 LLINK필드를 제거하고, 연속
적인 주소 접근 방식을 사용하는 형태이다.
순차 할당 기법
• 다음 트리를 생각해 봅시다.
• 이를 트리 형태와 이진트리 형태로 표현하
면
전위 순차 표현1
• 노드를 전위 순서로 배치한다.
• 각노드에 INFO, RLINK, LTAG 필드를 둔
다.
• 화살표는 공링크가 아닌 RLINK이다.
• 말단 노드는 LTAG=1이다.
• LLINK는 공링크이거나 바로 다음 항목이기
때문에 필요가 없다.
전위 순차 표현1
• 한 노드의 모든 하위 트리는 그 노드 바로다음에 나타난다.
• RLINK 화살표가 서로 교차하지 않는다.
– X와 RLINK(X)사이의 노드는 X의 왼쪽 하위 트리에 놓인다.
– 전위 순서로 배치했기 때문이다.
• LTAG필드는 중복이다.
– LTAG는 숲의 끝에서만, 모든 아래쪽 화살표에앞서서 나타난다.
전위 순차 표현1
• RLINK 절반 이상이 공링크이다.
• 순차적으로 탐색하지 않는 이상 추가적인
계산이 필요하다.
전위 순차 표현2
• RLINK도 중복이다.
• RTAG 필드를 둔다.
• 트리를 재구축하려면 LTAG=1인 경우 가장
최근에 발견된 불완전한 RLINK를 완성해
야한다.
• 즉, 스택이 필요하다.
전위 순차 표현2
• RLINK도 중복이다.
• RTAG 필드를 둔다.
• 트리를 재구축하려면 LTAG=1인 경우 가장
최근에 발견된 불완전한 RLINK를 완성해
야한다.
• 즉, 스택이 필요하다.
전위 순차 표현3
• 각 노드의 RLINK에 그 노드 아래의 하위 트
리 다음의 주소를 넣는다.
• RLINK는 범위를 뜻하는 SCOPE라고 부르
기도 한다.
• LTAG(X)=1는 SCOPE(X) = X + c를 따른다.
– C는 노드당 워드 개수
전위 순차 표현4
• RLINK필드를 제거하고, 공링크가 아닌
RLINK를 가진 노드 앞에 특별한 “링크” 노
드를 둔다.
• INFO필드와 RLINK가 대략 같은 공간을 사
용한다면 메모리를 절약할 수 있다.
가족 순차 표현
• LLINK대신 RLINK를 생략하는 표현이다.
• 역 후위 순위 순서와 동일하다.
가족 순차 표현
• RTAG는 가족을 구분하는 역할이다.
• 모든 트리의 루트를 나열하고 가장 최근에
나타난 노드가 속한 가족을 택하는 방식으
로 진행한다.
• LLINK 화살표는 교차하지 않는다.
• 전위 표현의 다른 성질도 물려 받는다.
수준 순서 순차 표현
• 각 수준마다 노드들을 그냥 왼쪽에서 오른
쪽으로 나열하다.
– 너비 우선 탐색
– 선입선출
• cf. 전위/가족 순서 표현
– 깊이 우선 탐색
– 후입선출
차수가 부연된 후위 순서 순차 표현
• 노드를 후위 순서로 나열하고 각 노드에 링
크대신 차수를 부여한다.
• 트리 노드들에 대해 정의된 “상향식”으로
평가할 때 유용하다.
– 알고리즘 F
알고리즘 F
• 트리 안에서 국소 정의된 함수를 평가한다.
– F1.[초기화]스택을 비우고, P가 숲의 후위 순서로
첫째 노드를 가리키게 한다.
– F2.[평가]d<-DEGREE(P)로 설정한다. f(NODE(P))
를 스택에 있는 f(x)의 값들을 이용해서 평가한다.
– F3.[스택갱신]최상위항목 d개를 제거한다. 그리고
f(NODE(P))를스택 최상위에 넣는다.
– F4.[전진]만일 P가 후위 순서로 마지막 노드이면
알고리즘을 끝낸다. 그런 다음 단계 F2로 돌아간
다.
연결된 형태의 표현
• (3)을 (6)으로 바꾸는 변환과 관련이 있다.
• 모든 비말단 노드에서 INFO필드를 제거한
다.
• 해당 정보를 담은 새 말단 노드를 그전 노드
아래에 추가한다.
연결된 형태의 표현
• LLINK와 INFO는 서로 배타적이다.
• 각 노드에서 같은 필드 공간을 공유할 수 있다.
• LLINK인지 INFO인지는 LTAG로 지정하면 된다.
• INFO를 조절하면 하나의 노드를 하나의 워드에 담을 수 있다.
• NODE 수는 15로 늘어났다.– 메모리 절약 효과가 없다.
– LLINK가 제거되었지만, 그만큼 RLINK가 추가된노드가 생기기 때문이다.
삼중 연결 트리
• 좀 더 빠른 상향 참조를 위해 각 노드에
PARENT링크를 추가한다.
PARENT링크
• PARENT링크 그 자체로도 임의의 유향 트
리를 규정하는데 충분히 명백하다.
• 루트를 제외한 모든 노드는 자식이 여러 개
일 수 있지만 부모는 오직 하나이다.
• 하향 링크를 두는 것보다 상향 링크를 두는
것이 더 간단하다.
PARENT링크
• 그러나, PARENT링크만으로 된 트리는 큰
쓸모가 없다.
– 노드가 말단인지 아닌지 빠르게 판단하기 힘들
다.
– 주어진 노드의 자식을 빠르게 찾기도 힘들다.
• 그러나!, 상향 링크들로만 충분한 한 가지
매우 중요한 응용이 존재한다.
– 동치 관계를 다루는 알고리즘
동치 관계
• “≡”로 표기하는 동치관계는 객체들의 집합
S의 원소들 사이의 한 관계로, S의 임의의
객체 x, y, z에 대해 다음의 세 성질들을 만
족한다.
• 1)만일 x≡y이고 y≡z이면 x≡z. (추이)
• 2)만일 x≡y이고 y≡x. (대칭)
• 3)x≡x. (반영)
동치 관계
⇒
• 유향 트리 구조로 동치류들을 합치거나 주
어진 두 원소가 같은 부류인지 판정이 가능
하다.
– 알고리즘E
알고리즘E
• 동치 관계를 처리한다.
– E1.[초기화]1≤k≤n에대해 PARENT[k]←0으로 설정한다.
– E2.[입력]입력에서 다음 동치 관계쌍 “j≡k”를 가져온다. 입력을 다 소비했다면 알고리즘을 끝낸다.
– E3.[루트찾기]만일 PARENT[j]>0이면j←PARENT[j]로설정하고 이 단계를 반복한다. 만일 PARENT[k]>0이면 k←PARENT[k]를설정하고이 단계를 반복한다.
– E4.[트리병합]만일 j≠k이면 PARENT[j]←k로설정하고, 단계 E2로 돌아간다.
알고리즘E
⇒
고리구조
• 두 방향 링크 LLINK와 RLINK 모두에 순환
링크를 사용하는 방법이다.
고리구조
• 다항식 산술에 적용
– 알고리즘A
알고리즘A
연습문제
• 이...이건...
끝