SlideShare une entreprise Scribd logo
1  sur  50
The Art of Computer Programming2.3.2 트리의 이진트리 표현 아키텍트를 꿈꾸는 사람들cafe.naver.com/architect1 현수명  soomong.net #soomong
트리의이진트리 표현 	Forest 를이진트리로 변환 운행비교 대수공식의 조작 	Algorithm D 	MIXAL 구현
Forest A D B C E G F K H J 임의의 일반 forest 를 이진트리로 표현!
이걸 왜 하는것인가요? ? 자네. 일단 해보게나 네!
임의의 일반 forest 를 이진트리로 표현하기 Text 방법 각 가족의 자식들을 연결하고 2.부모에서 첫째 자식으로의 링크를 제외한 모든 수직 링크를 제거 3. 시계방향으로 45 돌리기
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 돌리기
Definition 자연대응Natural correspondence 트리와 이진트리의 특별한 관계 루트는 있지만 오른쪽 하위트리는 없는 이진트리 어떤 트리들의 숲 : 그에 대응하는 이진트리 : 이면     의 루트 : 이면     : 빈 이진트리      의 왼쪽 하위트리 :      의 오른쪽 하위트리 :
Example 자연대응Natural correspondence 그에 대응하는 이진트리 A D B C E G F 트리들의 숲 A K H J B D C K E H F J G
45도 회전하지 않는게 편한 경우도 있음 오른쪽 스레드 링크들이  한가족의 제일 오른쪽 자식에서 부모로 간다!
이걸 도대체 왜 하는것인가요? ㅜㅜ 어허… 트리가 나왔는데  운행이라도 해봐야 하지 않겠나 네!
운행Traversing Forest Tree 를 운행하는 것 Forest 를 운행하는 것
Text 운행Traversing 비교
Picture 운행Traversing 비교 ?
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))
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))
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))
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))
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)
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)
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)
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)
운행결과 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)
운행결과 P$ 일반 Tree,Forest에서는 후위를 의미 이진트리 에서는 중위를 의미
운행을 마쳤습니다. 자 그럼 이제 실질적인 문제에 적용해보지. 대수 공식의 조작에서 tree 를 써보게나. 오 실질적인 예제! +_+ 네!
실질적인 예 대수공식을 tree 로 표현해보자 - X / = ↑ a 3 + 2 1 왼쪽을 일반적인 트리라고 치고 오른쪽 스레드식이진트리로 변환
Polish notation 폴란드식 표기법 전위운행 Prefix notation 후위운행 postfix notation
Tree 참고) 이산수학 ,[object Object]
트리의 응용
이진트리의 표현
트리 순회 알고리즘
트리에 대한 결과,[object Object]
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
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
미분이지! 주어진 공식의 변수 x 에 대한 도함수를 구하게나 이제 주어진 공식을  어떻게 조작할까요? 헉 미분 네…
도함수?미분? 함수를 미분한다 = 함수의 변화율을 구한다 = 함수의 기울기를 구한다 = 기울기 측정을 위한 도함수를 구한다
미분 규칙 규칙들에 나열된 연산자들로 구성된 임의의 공식 에 대한 도함수를 구할 수 있다 (11) (12) 미분이 낯설다면 이런 규칙들로 정의되는  하나의 추상적인 연습으로 받아들이자 (13) (14) (15) (16) (17) (18) (19)
Example
트리를 후위 순서로 운행하면서 각 노드의도함수를 형상하는 작업을 전체 도함수가 나올 때까지 계속 후위 운행을 사용한다는 것은 알고리즘이 연산자 노드를 그 피연산자들을 미분한 이후에 처리한다는 뜻 후위운행 postfix notation
서…설마… 자 그럼 이 과정을 MIX 로 해보게나 아악 ㅜ_ㅜ
MIXAL 대수 공식에 대한  오른쪽 스레드 이진 트리의노드 구조 RLINK : 오른쪽 하위 노드 RATG: 스레드인경우1 LLINK : 왼쪽 하위 노드 TYPE : 노드의 종류 TYPE 0 : 하나의 상수 TYPE 1 : 하나의 변수 TYPE 2 : + TYPE 3 : - TYPE 4 : X TYPE 5 : / INFO : 상수일경우 그 값
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
Algorithm D (미분) Picture 노드로 표현된 트리가 주어지면 y 부터 후위운행 하면서 각 노드의TYPE 기준으로 미분규칙을 수행하고 결과를 tree 로 재구성
Algorithm D (미분) NODE(P) : 오른쪽 스레드식이진트리의루트 트리 구축 함수 TREE(x,U,V)  x 를 루트노트, U 와 V 를 하위트리로 하는  새 트리를 만든다 TREE(x,U)  하위트리가하나인 새 트리를 만든다 TREE(x) x 를 말단 루트 노드로 하는 새 트리를 만든다 미분함수 DIFF(0), DIFF(1) ~ DIFF(8)
트리 구축 함수 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
트리 구축 함수 Picture TREE(x,U)  하위트리가하나인 새 트리를 만든다  W ← AVAIL , INFO(W) ← x, LLINK(W) ← U RLINK(U) ← W, RTAG(U) ← 1  W U
트리 구축 함수 Picture TREE(x)  	x 를 말단 루트 노드로 하는 새 트리를 만든다 W ← AVAIL , INFO(W) ← x, LLINK(W) ← null W
미분 함수 무항연산자 DIFF(0) 상수 	Q ← TREE(0) (11) DIFF(1) 변수 if(INFO(P) = ‘X’) then Q ← TREE(1)  	else	 Q ← TREE(0)  (12)
미분 함수 단항연산자 (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)
미분 함수 이항연산자 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 코드는 생략
Algorithm D (미분) Picture 노드로 표현된 트리가 주어지면 y 부터 후위운행 하면서 각 노드의TYPE 기준으로 미분규칙을 수행하고 결과를 tree 로 재구성

Contenu connexe

Tendances

High Performance WordPress
High Performance WordPressHigh Performance WordPress
High Performance WordPressvnsavage
 
Use Node.js to create a REST API
Use Node.js to create a REST APIUse Node.js to create a REST API
Use Node.js to create a REST APIFabien Vauchelles
 
Presentation JEE et son écossystéme
Presentation JEE et son écossystémePresentation JEE et son écossystéme
Presentation JEE et son écossystémeAlgeria JUG
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objetAmir Souissi
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1vangogue
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et streamFranck SIMON
 
New methods for exploiting ORM injections in Java applications
New methods for exploiting ORM injections in Java applicationsNew methods for exploiting ORM injections in Java applications
New methods for exploiting ORM injections in Java applicationsMikhail Egorov
 
An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...Claudio Capobianco
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniShellmates
 
A Deeper look into Javascript Basics
A Deeper look into Javascript BasicsA Deeper look into Javascript Basics
A Deeper look into Javascript BasicsMindfire Solutions
 
Rust Tutorial | Rust Programming Language Tutorial For Beginners | Rust Train...
Rust Tutorial | Rust Programming Language Tutorial For Beginners | Rust Train...Rust Tutorial | Rust Programming Language Tutorial For Beginners | Rust Train...
Rust Tutorial | Rust Programming Language Tutorial For Beginners | Rust Train...Edureka!
 
Lab #2: Introduction to Javascript
Lab #2: Introduction to JavascriptLab #2: Introduction to Javascript
Lab #2: Introduction to JavascriptWalid Ashraf
 
Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaAziz Darouichi
 
Python/Flask Presentation
Python/Flask PresentationPython/Flask Presentation
Python/Flask PresentationParag Mujumdar
 
Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaCh'ti JUG
 

Tendances (20)

High Performance WordPress
High Performance WordPressHigh Performance WordPress
High Performance WordPress
 
Use Node.js to create a REST API
Use Node.js to create a REST APIUse Node.js to create a REST API
Use Node.js to create a REST API
 
Hibernate
HibernateHibernate
Hibernate
 
Presentation JEE et son écossystéme
Presentation JEE et son écossystémePresentation JEE et son écossystéme
Presentation JEE et son écossystéme
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et stream
 
New methods for exploiting ORM injections in Java applications
New methods for exploiting ORM injections in Java applicationsNew methods for exploiting ORM injections in Java applications
New methods for exploiting ORM injections in Java applications
 
An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...
 
Clean coding-practices
Clean coding-practicesClean coding-practices
Clean coding-practices
 
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
 
Class introduction in java
Class introduction in javaClass introduction in java
Class introduction in java
 
A Deeper look into Javascript Basics
A Deeper look into Javascript BasicsA Deeper look into Javascript Basics
A Deeper look into Javascript Basics
 
Rust Tutorial | Rust Programming Language Tutorial For Beginners | Rust Train...
Rust Tutorial | Rust Programming Language Tutorial For Beginners | Rust Train...Rust Tutorial | Rust Programming Language Tutorial For Beginners | Rust Train...
Rust Tutorial | Rust Programming Language Tutorial For Beginners | Rust Train...
 
Lab #2: Introduction to Javascript
Lab #2: Introduction to JavascriptLab #2: Introduction to Javascript
Lab #2: Introduction to Javascript
 
Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En Java
 
Python/Flask Presentation
Python/Flask PresentationPython/Flask Presentation
Python/Flask Presentation
 
Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambda
 

Similaire à The Art of Computer Programming 2.3.2 Tree

파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409Yong Joon Moon
 
How to Study Mathematics for ML
How to Study Mathematics for MLHow to Study Mathematics for ML
How to Study Mathematics for MLDataya Nolja
 
Eigendecomposition and pca
Eigendecomposition and pcaEigendecomposition and pca
Eigendecomposition and pcaJinhwan Suk
 
[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기
[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기
[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기종빈 오
 
Tensorflow
TensorflowTensorflow
Tensorflowchs71
 
마칭 큐브 알고리즘 - ZP 2019 데캠
마칭 큐브 알고리즘 - ZP 2019 데캠마칭 큐브 알고리즘 - ZP 2019 데캠
마칭 큐브 알고리즘 - ZP 2019 데캠동환 김
 
파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기Yong Joon Moon
 
Chapter 6 Deep feedforward networks - 1
Chapter 6 Deep feedforward networks - 1Chapter 6 Deep feedforward networks - 1
Chapter 6 Deep feedforward networks - 1KyeongUkJang
 
자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라Jong Gook Bae
 
이산치수학 Project2
이산치수학 Project2이산치수학 Project2
이산치수학 Project2KoChungWook
 
Data Structure 2
Data Structure 2Data Structure 2
Data Structure 2yonsei
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfHo Jeong Im
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조영기 김
 
8. Logistic Regression
8. Logistic Regression8. Logistic Regression
8. Logistic RegressionJungkyu Lee
 
[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리Jaeho Seok
 
[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리Jaeho Seok
 
제4강 명제와 논리-정보
제4강 명제와 논리-정보제4강 명제와 논리-정보
제4강 명제와 논리-정보csungwoo
 

Similaire à The Art of Computer Programming 2.3.2 Tree (20)

Ch05
Ch05Ch05
Ch05
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409
 
How to Study Mathematics for ML
How to Study Mathematics for MLHow to Study Mathematics for ML
How to Study Mathematics for ML
 
Eigendecomposition and pca
Eigendecomposition and pcaEigendecomposition and pca
Eigendecomposition and pca
 
[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기
[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기
[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기
 
Tensorflow
TensorflowTensorflow
Tensorflow
 
마칭 큐브 알고리즘 - ZP 2019 데캠
마칭 큐브 알고리즘 - ZP 2019 데캠마칭 큐브 알고리즘 - ZP 2019 데캠
마칭 큐브 알고리즘 - ZP 2019 데캠
 
파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기
 
Chapter 6 Deep feedforward networks - 1
Chapter 6 Deep feedforward networks - 1Chapter 6 Deep feedforward networks - 1
Chapter 6 Deep feedforward networks - 1
 
자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라
 
이산치수학 Project2
이산치수학 Project2이산치수학 Project2
이산치수학 Project2
 
Data Structure 2
Data Structure 2Data Structure 2
Data Structure 2
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdf
 
R 시작해보기
R 시작해보기R 시작해보기
R 시작해보기
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조
 
8. Logistic Regression
8. Logistic Regression8. Logistic Regression
8. Logistic Regression
 
[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리
 
[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리
 
제4강 명제와 논리-정보
제4강 명제와 논리-정보제4강 명제와 논리-정보
제4강 명제와 논리-정보
 
Linear algebra
Linear algebraLinear algebra
Linear algebra
 

Plus de hyun soomyung

Scalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed SystemsScalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed Systemshyun soomyung
 
Dependency Breaking Techniques
Dependency Breaking TechniquesDependency Breaking Techniques
Dependency Breaking Techniqueshyun soomyung
 
아꿈사 매니저소개
아꿈사 매니저소개아꿈사 매니저소개
아꿈사 매니저소개hyun soomyung
 
HTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,AudioHTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,Audiohyun soomyung
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Designhyun soomyung
 
The Art of Computer Programming 2.4 다중연결구조
The Art of Computer Programming 2.4 다중연결구조The Art of Computer Programming 2.4 다중연결구조
The Art of Computer Programming 2.4 다중연결구조hyun soomyung
 
Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10hyun soomyung
 
The Art of Computer Programming 1.3.2 MIXAL
The Art of Computer Programming 1.3.2 MIXALThe Art of Computer Programming 1.3.2 MIXAL
The Art of Computer Programming 1.3.2 MIXALhyun soomyung
 
The Art of Computer Programming 1.2.5
The Art of Computer Programming 1.2.5The Art of Computer Programming 1.2.5
The Art of Computer Programming 1.2.5hyun soomyung
 
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)hyun soomyung
 
프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장hyun soomyung
 
[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술hyun soomyung
 
실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부hyun soomyung
 
xUnitTestPattern/chapter8
xUnitTestPattern/chapter8xUnitTestPattern/chapter8
xUnitTestPattern/chapter8hyun soomyung
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법hyun soomyung
 
프로그램은 왜 실패하는가?
프로그램은 왜 실패하는가?프로그램은 왜 실패하는가?
프로그램은 왜 실패하는가?hyun soomyung
 

Plus de hyun soomyung (20)

Scalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed SystemsScalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed Systems
 
Dependency Breaking Techniques
Dependency Breaking TechniquesDependency Breaking Techniques
Dependency Breaking Techniques
 
아꿈사 매니저소개
아꿈사 매니저소개아꿈사 매니저소개
아꿈사 매니저소개
 
HTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,AudioHTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,Audio
 
Hybrid app
Hybrid appHybrid app
Hybrid app
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
MapReduce
MapReduceMapReduce
MapReduce
 
MongoDB
MongoDBMongoDB
MongoDB
 
The Art of Computer Programming 2.4 다중연결구조
The Art of Computer Programming 2.4 다중연결구조The Art of Computer Programming 2.4 다중연결구조
The Art of Computer Programming 2.4 다중연결구조
 
Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10
 
The Art of Computer Programming 1.3.2 MIXAL
The Art of Computer Programming 1.3.2 MIXALThe Art of Computer Programming 1.3.2 MIXAL
The Art of Computer Programming 1.3.2 MIXAL
 
The Art of Computer Programming 1.2.5
The Art of Computer Programming 1.2.5The Art of Computer Programming 1.2.5
The Art of Computer Programming 1.2.5
 
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
 
Clojure Chapter.6
Clojure Chapter.6Clojure Chapter.6
Clojure Chapter.6
 
프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장
 
[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술
 
실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부
 
xUnitTestPattern/chapter8
xUnitTestPattern/chapter8xUnitTestPattern/chapter8
xUnitTestPattern/chapter8
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법
 
프로그램은 왜 실패하는가?
프로그램은 왜 실패하는가?프로그램은 왜 실패하는가?
프로그램은 왜 실패하는가?
 

The Art of Computer Programming 2.3.2 Tree

  • 1. The Art of Computer Programming2.3.2 트리의 이진트리 표현 아키텍트를 꿈꾸는 사람들cafe.naver.com/architect1 현수명 soomong.net #soomong
  • 2. 트리의이진트리 표현 Forest 를이진트리로 변환 운행비교 대수공식의 조작 Algorithm D MIXAL 구현
  • 3. Forest A D B C E G F K H J 임의의 일반 forest 를 이진트리로 표현!
  • 4. 이걸 왜 하는것인가요? ? 자네. 일단 해보게나 네!
  • 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 트리와 이진트리의 특별한 관계 루트는 있지만 오른쪽 하위트리는 없는 이진트리 어떤 트리들의 숲 : 그에 대응하는 이진트리 : 이면 의 루트 : 이면 : 빈 이진트리 의 왼쪽 하위트리 : 의 오른쪽 하위트리 :
  • 8. Example 자연대응Natural correspondence 그에 대응하는 이진트리 A D B C E G F 트리들의 숲 A K H J B D C K E H F J G
  • 9. 45도 회전하지 않는게 편한 경우도 있음 오른쪽 스레드 링크들이 한가족의 제일 오른쪽 자식에서 부모로 간다!
  • 10. 이걸 도대체 왜 하는것인가요? ㅜㅜ 어허… 트리가 나왔는데 운행이라도 해봐야 하지 않겠나 네!
  • 11. 운행Traversing Forest Tree 를 운행하는 것 Forest 를 운행하는 것
  • 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 왼쪽을 일반적인 트리라고 치고 오른쪽 스레드식이진트리로 변환
  • 26. Polish notation 폴란드식 표기법 전위운행 Prefix notation 후위운행 postfix notation
  • 27.
  • 31.
  • 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)
  • 38. 트리를 후위 순서로 운행하면서 각 노드의도함수를 형상하는 작업을 전체 도함수가 나올 때까지 계속 후위 운행을 사용한다는 것은 알고리즘이 연산자 노드를 그 피연산자들을 미분한 이후에 처리한다는 뜻 후위운행 postfix notation
  • 39. 서…설마… 자 그럼 이 과정을 MIX 로 해보게나 아악 ㅜ_ㅜ
  • 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))