5. 임의의 일반 forest 를 이진트리로 표현하기 Text 방법 각 가족의 자식들을 연결하고 2.부모에서 첫째 자식으로의 링크를 제외한 모든 수직 링크를 제거 3. 시계방향으로 45 돌리기
6. Picture 각 가족의 자식들을 연결하고 Before A D A D B C E G F B C E G F K H J After A A D A D K H J B B C E G F B C E G F D C K H J K K H J E H F 2. 부모에서 첫째 자식으로의 링크를 제외한 모든 수직 링크를 제거 J G 3. 시계방향으로 45 돌리기
7. Definition 자연대응Natural correspondence 트리와 이진트리의 특별한 관계 루트는 있지만 오른쪽 하위트리는 없는 이진트리 어떤 트리들의 숲 : 그에 대응하는 이진트리 : 이면 의 루트 : 이면 : 빈 이진트리 의 왼쪽 하위트리 : 의 오른쪽 하위트리 :
14. Example Forest전위운행 A D A D A D A D A D A D B C E G F B C E G F B C E G F B C E G F B C E G F B C E G F K H J K H J K H J K H J K H J K H J (A(B,C(K)),D(E(H),F(J),G))
15. Example Forest전위운행 A D A D A D A D A D B C E G F B C E G F B C E G F B C E G F B C E G F K H J K H J K H J K H J K H J (A(B,C(K)),D(E(H),F(J),G))
16. Example Tree전위운행 A A A A A A B B B B B B D C D D D D D C C C C C K E K K K K K E E E E E H F H H H H H F F F F F J G J G J G J G J G J G (A(B,C(K)),D(E(H),F(J),G))
17. Example Tree전위운행 A A A A A B B B B B D D D D D C C C C C K K K K K E E E E E H H H H H F F F F F J G J G J G J G J G (A(B,C(K)),D(E(H),F(J),G))
18. Example Forest후위운행 A D A D A D A D A D A D B C E G F B C E G F B C E G F B C E G F B C E G F B C E G F K H J K H J K H J K H J K H J K H J ((B,(K)C)A,((H)E,(J)F,G)D)
19. Example Forest후위운행 A D A D A D A D A D B C E G F B C E G F B C E G F B C E G F B C E G F K H J K H J K H J K H J K H J ((B,(K)C)A,((H)E,(J)F,G)D)
20. Example Tree중위운행 A A A A A A B B B B B B D C D C D D D D C C C C K E K E K K K K E E E E H F H F H H H H F F F F J G J G J G J G J G J G ((B,(K)C)A,((H)E,(J)F,G)D)
21. Example Tree중위운행 A A A A A B B B B B D D D D D C C C C C K K K K K E E E E E H H H H H F F F F F J G J G J G J G J G ((B,(K)C)A,((H)E,(J)F,G)D)
22. 운행결과 Forest 의 전위 운행결과 (A(B,C(K)),D(E(H),F(J),G)) = 이진트리 의 전위 운행결과 (A(B,C(K)),D(E(H),F(J),G)) Forest 의 후위 운행결과 ((B,(K)C)A,((H)E,(J)F,G)D) = 이진트리 의 중위 운행결과 ((B,(K)C)A,((H)E,(J)F,G)D)
23. 운행결과 P$ 일반 Tree,Forest에서는 후위를 의미 이진트리 에서는 중위를 의미
24. 운행을 마쳤습니다. 자 그럼 이제 실질적인 문제에 적용해보지. 대수 공식의 조작에서 tree 를 써보게나. 오 실질적인 예제! +_+ 네!
25. 실질적인 예 대수공식을 tree 로 표현해보자 - X / = ↑ a 3 + 2 1 왼쪽을 일반적인 트리라고 치고 오른쪽 스레드식이진트리로 변환
32. Example 5.24,25 a 전위preorder 루트 – 왼쪽 - 오른쪽 a b d e c f h i g c b 중위inorder 왼쪽 - 루트 - 오른쪽 d b e a h f I c g d g f e 후위postorder 왼쪽 – 오른쪽 - 루트 d e b h I f g c a i h
33. Example 5.27 * 전위prefix notation * + 2 x 4 -> *(2+x)4 -> (2+x)*4 4 + 중위infix notation (2+x)*4 2 x 후위postfix notation 2x+4* -> (2+x)4* -> (2+x)*4
34. 미분이지! 주어진 공식의 변수 x 에 대한 도함수를 구하게나 이제 주어진 공식을 어떻게 조작할까요? 헉 미분 네…
35. 도함수?미분? 함수를 미분한다 = 함수의 변화율을 구한다 = 함수의 기울기를 구한다 = 기울기 측정을 위한 도함수를 구한다
36. 미분 규칙 규칙들에 나열된 연산자들로 구성된 임의의 공식 에 대한 도함수를 구할 수 있다 (11) (12) 미분이 낯설다면 이런 규칙들로 정의되는 하나의 추상적인 연습으로 받아들이자 (13) (14) (15) (16) (17) (18) (19)
40. MIXAL 대수 공식에 대한 오른쪽 스레드 이진 트리의노드 구조 RLINK : 오른쪽 하위 노드 RATG: 스레드인경우1 LLINK : 왼쪽 하위 노드 TYPE : 노드의 종류 TYPE 0 : 하나의 상수 TYPE 1 : 하나의 변수 TYPE 2 : + TYPE 3 : - TYPE 4 : X TYPE 5 : / INFO : 상수일경우 그 값
41. Algorithm D (미분) Text 변수 X에 대한 공식 Y의 해석적미분을 뜻하는 트리를 만들고 NODE(DY) 가 그것을 가리키게 만든다. D1. [초기화] P ← Y$ (트리의 후위순서로 첫째노드) D2. [미분] P1 ← LLINK(P) if( P1 ≠ null ) then Q1 ← RLINK(P1) DIFF[TYPE(P)] 수행 D3. [링크 복원] if(TYPE(P) 가 이항연산자) then RLINK(P1) ← P2 D4. [P$로 나아간다] P2 ← P, P ← P$ if(RTAG(P2) == 0 ) then RLINK(P2) ← Q D5. [끝인가?] if(P ≠ Y) then GOTO D2. else LLINK(DY) ← Q, RLINK(Q) ← DY, RTAG(Q) ← 1
42. Algorithm D (미분) Picture 노드로 표현된 트리가 주어지면 y 부터 후위운행 하면서 각 노드의TYPE 기준으로 미분규칙을 수행하고 결과를 tree 로 재구성
43. Algorithm D (미분) NODE(P) : 오른쪽 스레드식이진트리의루트 트리 구축 함수 TREE(x,U,V) x 를 루트노트, U 와 V 를 하위트리로 하는 새 트리를 만든다 TREE(x,U) 하위트리가하나인 새 트리를 만든다 TREE(x) x 를 말단 루트 노드로 하는 새 트리를 만든다 미분함수 DIFF(0), DIFF(1) ~ DIFF(8)
44. 트리 구축 함수 Picture TREE(x,U,V) x 를 루트노트, U와V를 하위트리로 하는 새 트리를 만든다 W ← AVAIL , INFO(W) ← x, LLINK(W) ← U RLINK(U) ← W, RTAG(U) ← 0, RLINK(V) ← W, RTAG(V) ← 1 W U V
45. 트리 구축 함수 Picture TREE(x,U) 하위트리가하나인 새 트리를 만든다 W ← AVAIL , INFO(W) ← x, LLINK(W) ← U RLINK(U) ← W, RTAG(U) ← 1 W U
46. 트리 구축 함수 Picture TREE(x) x 를 말단 루트 노드로 하는 새 트리를 만든다 W ← AVAIL , INFO(W) ← x, LLINK(W) ← null W
47. 미분 함수 무항연산자 DIFF(0) 상수 Q ← TREE(0) (11) DIFF(1) 변수 if(INFO(P) = ‘X’) then Q ← TREE(1) else Q ← TREE(0) (12)
48. 미분 함수 단항연산자 (13) DIFF(2) 로그 if(INFO(Q)≠ 0) then Q ← TREE(“/”,Q,COPY(P1)) (14) DIFF(3) 부정 if(INFO(Q) ≠ 0) then Q ← TREE(“neg”,Q)
49. 미분 함수 이항연산자 P1 은 U , P2 는 V Q1 은 D(U), Q 는 D(V) (15) DIFF(4) + 연산 if(INFO(Q1)==0) then AVAIL ← Q1 else if(INFO(Q)==0) AVAIL ← Q, Q ← Q1 else Q ← TREE(“+”,Q1,Q) … 나머지 부분과 MIX 코드는 생략
50. Algorithm D (미분) Picture 노드로 표현된 트리가 주어지면 y 부터 후위운행 하면서 각 노드의TYPE 기준으로 미분규칙을 수행하고 결과를 tree 로 재구성
51. 연습문제 1. 본문에서는 숲 F 에 대응되는 이진트리 B(F) 의 공식적인 정의를 제시했다. 그 반대에 대한, 다시말해서이진트리B 에 해당하는 숲 F(B) 에 대한 공식적인 정의를 제시하라. 어떤 이진트리: B 그에 대응하는 숲: F(B) 만일 B가 비었으면 :빈 숲 그렇지 않으면 : F(B)는 하나의 트리 T + 숲F(right(B)) root(T) = root(B) subtree(T) = F(left(B))