REPORT      Project #4: 상호참조 생성기C1김무경박태원김정훈김슬기김종진
목 차  1. 프 로 젝 트 개 요      2. 전 체 일 정         3. 회 의 록       4. 조 사 자 료       5. 알 고 리 즘      6. 결 과 소 스
1. 프로젝트 개요1) 목표자료구조에서 트리의 사용법을 알 수 있다.2) 과제① 파일을 읽어서 그 안에 있는 모든 문자를 다음과 같은 형식으로 알파벳 순으로 출력합니다.                            ...
2. 전체 일정           일 정                        내 용     2012. 05. 01 화     조원별 업무 분담 및 계획작성     ~ 2012. 05. 08 화   자료조사 내용 발...
Project #4: 2nd일   시 2012. 05. 08 화       장     소 창원대 55516       프로젝트에 필요한 문자열함수에 대해 조사해온 내용 발표       -Strcmp : 두 개의 문자열의...
Project #4: 4th 일   시 2012. 05. 10 목                  장      소 창원대 55516           배열트리를 이용한 힙정렬에 대해 논의           - 배열트리를 ...
트리(Complete완전 이진 트리(Complete Binary Tree)- 단말 노드들이 트리의 왼쪽부터 차곡차곡 채워진 형태.- 무조건 왼쪽부터 채워져 있어야 한다.(왼쪽 하위 트리 중 하나라도 비워져있다면 해당 안...
1. 왼쪽 하위 트리부터 시작해서2. 루트를 거쳐3. 오른쪽 하위 트리를 방문하는 방법- 응용 사례 : 수식 트리(Expression Tree), 중위 표기식 - (1 * 2) + (7 - 8)을 수식 트리로 표현하면 ...
2) AVL 트 리AVL 트리란 균형이 갖춰진 이진트리를 의미한다. 균형이 갖춰져 있다는 말은 거의 완전한 이진트리를 갖춘다는뜻이다.완전이진트리는 검색시 O(log2 n)에 해당하는 검색속도를 유지할 수 있게 된다.이에...
AVL 트리에서 가장 중요한 개념은 높이 차이를 나타내는 균형인수(Balance factor)이다.균형 변수란 무엇인가?간단하게 말하면 특정 노드에서 자식 노드들의 높이 차이를 말한다.즉, 왼쪽 서브트리의 높이와 오른쪽...
<LL 형식 >A의 왼쪽 자식, 그 자식의 왼쪽으로 넣는 경우<LR 형식>A의 왼쪽 자식, 그 자식의 오른쪽으로 넣는 경우<RR 형식>A의 오른쪽 자식, 그 자식의 오른쪽으로 넣는 경우
<RL 형식>A의 오른쪽 자식, 그 자식의 왼쪽으로 넣는 경우여기까지 본 삽입시 AVL 트리의 조건이 깨지는 4가지 경우를 다시 한 번 정리해보겠다.LL 형식 : A의 왼쪽(L)   자식의    왼쪽(L)에 넣는 경우L...
LL 형식은 오른쪽 회전(rotation)이라는 작업을 통해 재구축한다. 각각의 노드들에 대한 위치 변경이라고 보면 된다.이에 대한 알고리즘은 다음과 같다.                          이를 코드로 표현...
DS_04
Upcoming SlideShare
Loading in...5
×

DS_04

182

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

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

No notes for slide

DS_04

  1. 1. REPORT Project #4: 상호참조 생성기C1김무경박태원김정훈김슬기김종진
  2. 2. 목 차 1. 프 로 젝 트 개 요 2. 전 체 일 정 3. 회 의 록 4. 조 사 자 료 5. 알 고 리 즘 6. 결 과 소 스
  3. 3. 1. 프로젝트 개요1) 목표자료구조에서 트리의 사용법을 알 수 있다.2) 과제① 파일을 읽어서 그 안에 있는 모든 문자를 다음과 같은 형식으로 알파벳 순으로 출력합니다. 단어가 나타난 단어 단어의 빈도수 줄 번호② 우리가 만드는 상호참조 생성기는 대소문자를 구별하지 않습니다. 따라서 Did, did는 같은 문자로 취급합니다.③ 예를들어 다음과 같은 문장 두 줄이 들어있는 파일을 상호참조 생성기로 돌린 결과는 다음과 같습니다.ex)입력:1. Twas brilling and the slithy toves2. Did gyre and gimble in the qabe출력: Word Count Lines and 2 1 2 brilling 1 1 did 1 2 gimble 1 2 gyre 1 2 in 1 2 slithy 1 1 the 2 1 2 toves 1 1 twas 1 2 wabe 1 2 Total 11④ 프로그램을 만들기 위해서 어떠한 트리를 사용해도 됨⑤ 파일을 파싱할 동안에 파일의 상호참조를 작성하기 위해서 트리를 사용하라.
  4. 4. 2. 전체 일정 일 정 내 용 2012. 05. 01 화 조원별 업무 분담 및 계획작성 ~ 2012. 05. 08 화 자료조사 내용 발표 및 개념정리 ~ 2012. 05. 10 목 AVL트리에 관해 토의 및 필요한 알고리즘 내용 토의 ~ 2012. 05. 15 화 알고리즘 정리 및 소스 검토 ~ 2012. 05. 18 금 최종 보고서 검토, 보충 및 제출3. 회 의 록 Project #4: 1st일   시 2012. 05. 01 화 장 소 창원대 55110 프로젝트에 대한 문제파악 -트리를 사용하여 파일을 읽어 단어를 알파벳순으로 정렬하고 단어의 빈도수를 출력하고 단어가 나타난 줄의 번호를 출력한다. 어떠한 종류의 트리를 사용할건지에 대하여 토의 각자가 공부해 올 내용에 대하여 회의(업무분담)회의내용 - 파일을 읽어오는 방법 - 트리에 대한 기본개념 & 프로젝트 수행에 적절한 트리 형태 선별 - 트리의 구현, 문자열 입력 방법 조사 - 입력받은 문자열의 우선순위를 비교할 수 있는 함수 조사 - 입력받은 문자열의 위치(라인넘버)를 표현할 수 있는 수단 조사 - 밸런스드 트리와 관련된 프로그램 소스&정보 조사참 석 자 김무경, 박태원, 김정훈, 김슬기, 김종진
  5. 5. Project #4: 2nd일   시 2012. 05. 08 화 장 소 창원대 55516 프로젝트에 필요한 문자열함수에 대해 조사해온 내용 발표 -Strcmp : 두 개의 문자열의 사전식 순서를 비교한다. -strcpy : 문자열을 NULL문자가 나올 때까지 복사하는 함수입니다. -strcat : 문자열끼리 연결하는 함수 -cgets : 문자열을 입력받아 문자 배열 str에 저장하는 함수 트리에 관련된 용어와 개념정리 노드 : 트리를 구성하는 요소 근 노드 : 최상위 노드회의내용 디그리 : 노드가 가지고 있는 가지의 수 레벨 : 최상위 노드에서 최하위 노드까지 가는데 거쳐가는 노드의 수 부모노드 : 임의의 노드의 상위노드 자식노드 : 임의의 노도의 하위노드 형제노드 : 동일한 부모를 가지는 노드들 전이진트리 : 단말노드를 제외한 모든 노드의 자식노드가 두 개 포화이진트리 : 전 이진 트리 중에서도 단말 노드의 레벨이 모두 같다. 완전 이진트리 : 포화이진트리에서 왼쪽에서 오른쪽으로 번호를 붙이고 지워지고 남은번호가 연속한다면 남은 노드로 이루어진 트리는 완전이진트리입니다. 변질트리 : 변질 트리는 단말 노드를 제외한 모든 노드의 자식이 하나 밖에 없는 노드참 석 자 김무경, 박태원, 김정훈, 김슬기, 김종진 Project #4: 3rd일   시 2012. 05. 10 목 장 소 창원대 55516 배열트리를 이용한 힙정렬에 대해 논의 - 배열트리를 이용한 힙정렬을 이용해 문자를 배열할 수 있으나 문자열의 정렬에 걸리는 시간이 오래 걸리기 때문에 기각. 각각의 문자열에 라인넘버를 매기기 위해 텍스트 파일을 한줄씩 읽어오는 함수 뒤 로 라인 카운터를 올리기로 함.( -> 배포된 소스에 들어가 있는 내용)회의내용 밸런스드 트리를 만들기 위한 토의 - 교수님이 언급하신 AVL트리에 대해 공부하고 각각의 정렬 알고리즘(LL, RR, RL ,LR)을 구현하는 방법에 대해 논의 그 외에 필요하다고 언급된 내용들의 알고리즘에 대해 논의참 석 자 김무경, 박태원, 김정훈, 김슬기, 김종진
  6. 6. Project #4: 4th 일   시 2012. 05. 10 목 장 소 창원대 55516 배열트리를 이용한 힙정렬에 대해 논의 - 배열트리를 이용한 힙정렬을 이용해 문자를 배열할 수 있으나 문자열의 정렬에 걸리는 시간이 오래 걸리기 때문에 기각. 각각의 문자열에 라인넘버를 매기기 위해 텍스트 파일을 한줄씩 읽어오는 함수 뒤 로 라인 카운터를 올리기로 함.( -> 배포된 소스에 들어가 있는 내용) 회의내용 밸런스드 트리를 만들기 위한 토의 - 교수님이 언급하신 AVL트리에 대해 공부하고 각각의 정렬 알고리즘(LL, RR, RL ,LR)을 구현하는 방법에 대해 논의 그 외에 필요하다고 언급된 내용들의 알고리즘에 대해 논의 참 석 자 김무경, 박태원, 김정훈, 김슬기, 김종진 Project #4: 5th 일   시 2012. 05. 15 화 장 소 창원대 55516 알고리즘 정리 회의내용 배포된 소스에 대해 공부해온 내용 정리 참 석 자 김무경, 박태원, 김정훈, 김슬기, 김종진4. 조 사 자 료1) 이 진 트 리이진트리(BinaryTree)이진트리(BinaryTree) - 일반적인 트리는 한 노드가 N개의 자식을 가질 수 있지만 이진트리의 경우 한 노드가 최대 2개의 자식만 가질 수 있다. - 다양한 분야에 활용되는 자료구조이다. 수식을 트리 형태로 표현하여 계산하게 하는 수식 이진 트리(ExpressionBinary Tree), 아주 빠른 데이터 검색을 가능케 하는 이진 탐색 트리(Binary Search Tree) 등등. - 이진트리의 종류 : 포화 이진 트리(Full Binary Tree), 완전 이진 트리(Complete Binary Tree), 높이 균형 트리(Height Balanced Tree), 완전 높이 균형 트리(Completely Height Balanced Tree) 트리(Full포화 이진 트리(Full Binary Tree)- 모든 레벨의 노드가 꽉 차있는 이진 트리.- 단말 노드를 제외한 모든 노드의 차수가 2인 형태를 말한다.
  7. 7. 트리(Complete완전 이진 트리(Complete Binary Tree)- 단말 노드들이 트리의 왼쪽부터 차곡차곡 채워진 형태.- 무조건 왼쪽부터 채워져 있어야 한다.(왼쪽 하위 트리 중 하나라도 비워져있다면 해당 안됨)트리 순회법- 트리 순회 방법에는 3가지가 있다.- 전위 순회(Preorder Traversal), 중위 순회(Inorder Traversal), 후위 순회(Postorder Traversal) 순회법(Preorder전위 순회법(Preorder Traversal)1. 루트 노드부터 시작해서 아래로 내려 오면서2. 왼쪽 하위 트리를 방문하고 왼쪽 하위 트리의 방문이 끝나면3. 오른쪽 하위 트리를 방문하는 방식 순회법(Inorder중위 순회법(Inorder Traversal)- 트리는 하위 트리의 집합이라고 할 수 있고 하위 트리 역시 또 다른 하위 트리의 집합이라고 할 수 있다.- 따라서 아래와 같은 방법으로 탐색할 수 있다.
  8. 8. 1. 왼쪽 하위 트리부터 시작해서2. 루트를 거쳐3. 오른쪽 하위 트리를 방문하는 방법- 응용 사례 : 수식 트리(Expression Tree), 중위 표기식 - (1 * 2) + (7 - 8)을 수식 트리로 표현하면 다음 그림과 같이 나타낼 수 있다. 순회법(Postorder후위 순회법(Postorder Traversal)- 전위 순회의 반대1. 왼쪽 하위 트리부터 시작해서2. 오른쪽 형제 노드를 방문 후3. 루트 노드를 방문하는 방법.- 응용 사례 : 후위 표기식. 후위 순회법을 통해 출력되는 노드를 살펴보면 후위 표기식으로 나타난다. - 1 2 * 7 8 - +<C로 구현한 이진트리/트리 순회법>
  9. 9. 2) AVL 트 리AVL 트리란 균형이 갖춰진 이진트리를 의미한다. 균형이 갖춰져 있다는 말은 거의 완전한 이진트리를 갖춘다는뜻이다.완전이진트리는 검색시 O(log2 n)에 해당하는 검색속도를 유지할 수 있게 된다.이에 따라 AVL 트리는 최적의 검색 속도를 보장하기 때문에 삽입과 삭제가 적은 경우에 아주 효율적이라고 볼 수있다.
  10. 10. AVL 트리에서 가장 중요한 개념은 높이 차이를 나타내는 균형인수(Balance factor)이다.균형 변수란 무엇인가?간단하게 말하면 특정 노드에서 자식 노드들의 높이 차이를 말한다.즉, 왼쪽 서브트리의 높이와 오른쪽 서브트리의 높이의 차이를 현재 노드의 균형인수라고 한다.균형인수 = |왼쪽자식높이 - 오른쪽자식높이|위 트리를 보면 맨 밑단의 단말노드의 균형인수는 0인 것을 알 수 있다. 왜냐하면 자식들이 없으니까 높이 차이는0 이다.이로써 제일 왼쪽의 단말노드의 부모의 균형인수는 1이 되는 이유가 설명이 된다. 이렇게 전체적으로 ±1을 이하를이루는트리를 AVL 트리라고 한다.만약 제일 왼쪽에 또 하나의 단말노드를 붙여보자.그렇다면 이처럼 균형인수가 2인 트리가 나타나게 된다. 이는 AVL 트리 조건이 깨져버린 것이다.이 때 AVL 트리 구성을 위해 균형을 맞추기 위해 재구축 해야한다.일반적으로 AVL 트리에서는 4가지 형태의 삽입으로 AVL 트리가 조건이 깨져버린다.LL 형식, LR 형식, RR 형식, RL 형식
  11. 11. <LL 형식 >A의 왼쪽 자식, 그 자식의 왼쪽으로 넣는 경우<LR 형식>A의 왼쪽 자식, 그 자식의 오른쪽으로 넣는 경우<RR 형식>A의 오른쪽 자식, 그 자식의 오른쪽으로 넣는 경우
  12. 12. <RL 형식>A의 오른쪽 자식, 그 자식의 왼쪽으로 넣는 경우여기까지 본 삽입시 AVL 트리의 조건이 깨지는 4가지 경우를 다시 한 번 정리해보겠다.LL 형식 : A의 왼쪽(L) 자식의 왼쪽(L)에 넣는 경우LR 형식 : A의 왼쪽(L) 자식의 오른쪽(R)에 넣는 경우RR 형식 : A의 오른쪽(R) 자식의 오른쪽(R)에 넣는 경우RL 형식 : A의 오른쪽(R) 자식의 왼쪽(L)에 넣는 경우여기서 보아야할 것은 LL의 대칭은 RR 이고 LR의 대칭은 RL이라는 점이다.이제 이러한 4가지 경우에 따라 트리를 재구축하는 방법을 알아보자.일단 AVL 트리는 균형인수가 ±1 이하인 트리라고 했다.삽입시 균형인수가 틀어지기 시작한 노드를 중심으로 재구축을 진행한다.우선 LL 형식을 먼저 보자.일단 아래를 보며 신규노드를 삽입했을 경우 빨간색 자식노드에 삽입되어 불균형이 발생하게 된다.
  13. 13. LL 형식은 오른쪽 회전(rotation)이라는 작업을 통해 재구축한다. 각각의 노드들에 대한 위치 변경이라고 보면 된다.이에 대한 알고리즘은 다음과 같다.             이를 코드로 표현하면 다음과 같다.                                    왜 B를 리턴하는가? 원래의 A 자리에 B가 결국에는 올라왔기 때문에이에 포인터를 리턴하여 이 위치를 저장하기 위한 것이다.신규 A = 기존의 A를 대신하는 B 포인터이처럼 포인터의 위치 변경만을 통해 LL 형식은 재구축 할 수 있다.

×