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

taocp 2.3.3

650
-1

Published on

TAOCP

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
650
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

taocp 2.3.3

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

×