SlideShare a Scribd company logo
1 of 20
Data Structures
amugona study 2회
전정완
2015-07-29
amugona2015
Programs = Data Structures + Algorithms
program이 올바르고 효율적으로 작성되기 위해서는
data structures와 algorithms이 정확하고 효율적이어야 한다.
Programming
2
amugona2015
목차
linked list 구현
m-way search tree
○ B tree
■ 2-3 tree
■ 2-3-4 tree
■ red black tree
○ B* tree
○ B+ tree
recursion
search
3
amugona2015
linked list
○ 구조체의 집합으로 표현되며, 그 member로 자기 자신과 똑같은 형의 pointer
를 가짐
○ pointer가 다음 element를 가리킴
○ memory의 물리적인 이동 없이 data의 추가, 삭제, 정렬이 가능하므로 많은
data를 취급 시 적합한 자료구조
○ 원하는 data 참조 시 처음부터 찾아야 함
○ 배열보다 data 호출에 시간이 더 많이 걸림
linked list 구현
4
e1 e2 e3 e4
amugona2015
linked list 구현
구현 내용
○ linked list로 데이터A를 저장하기
○ 리스트의 모든 데이터를 표시하기
○ 새로운 데이터를 제일 끝에 추가하기
○ 원하는 위치에 데이터를 삽입하기
○ 원하는 위치의 데이터를 삭제하기
구현 환경
○ C, Win32 console app, VS 2012
5
num word
1 accord
2 grant
3 bestow
4 concede
데이터A
1: 표시
2: 추가
3: 삽입
4: 삭제
0: 프로그램종료
command 입력
amugona2015
linked list 구현
연결리스트 작성
data 추가
6
• 연결리스트는
구조체의 집합
으로 표현된다
amugona2015
data 추가
7
// malloc()으로 새 구조체에 대한 메모리 확보
// 마지막 요소의 주소를 얻음
// 마지막 요소의 주소를 얻음
amugona2015
data 표시
8
// 다음 가리키는 요소가 없을 때 까지 요소들 출력
amugona2015
m-way search tree
정의
○ 모든 node가 m보다 같거나 작은 진출 차수를 가지는 tree
○ 각 node가 적어도 m-1개의 정렬된 data 항목을 가진 root tree
활용
○ tree로 구축된 index를 사용하여 file을 직접 접근함으로써 탐색을 매우 빠르게
함
특징
○ 가장 왼쪽의 subtree의 값은 가장 첫 번째 node 항목 보다 작음
○ 두 번째 subtree는 첫 번째 subtree 세 번째 subtree의 사이값을 포함
○ 가장 오른쪽의 subtree는 마지막 data 항목 보다 큼
? 성능을 결정 짓는 것
9
amugona2015
m-way search tree
분류
○ B tree
■ 2-3 tree
■ 2-3-4 tree
■ red black tree
○ B* tree
■ 각 node의 최소 2/3을 채워야 하는 B tree
○ B+ tree
■ 각 node의 최소 ½이 채워져야 함
10
amugona2015
B tree
정의
○ root와 terminal node를 제외한 tree의 각 노드는 최소한 m/2의 subtree를 가
짐
○ tree의 root는 최소 2개의 subtree를 가짐
○ tree의 모든 terminal node는 같은 level에 있음
특징
○ 효율성이 높으나 구현이 복잡함
구현
○ 2-3 tree
■ 차수가 2 또는 3인 internal node를 갖는 트리
○ 2-3-4 tree
■ 2-3 tree에서 4개의 자식을 가진 node를 허용하는 tree
○ red black tree
■ 2-3-4 tree의 binary tree 표현
11
amugona2015
trie
key 값의 표현 구조를 통해 탐색이 이뤄지도록 key 값을 문자나 숫자
의 연속으로 나타냄
정의
○ node는 모두 pointer로 구성
○ trie의 높이는 key field의 길이에 의해 결정
12
amugona2015
recursion
divide-and-conquer
○ 하나의 문제를 유사한 형태의 작은 문제들로 나누고, 이들 각각에 동일
한 해결법을 계속적으로 적용한 다음, 그 결과들을 연합하여 원래의 문
제를 해결하는 기법
direct recursion
○ 함수가 자기자신을 직접 호출하는 기법
indirect recursion
○ 함수A가 함수B를 호출하고, 호출된 함수B가 함수A를 호출하는 기법
표현능력이 iteration과 같음
○ 모든 iteration은 recursion으로 바꾸어 쓸 수 있음
13
amugona2015
recursive algorithms
예시
? Fibonacci numbers
? factorial
특징
○ 알고리즘이 명확하며 간결하게 나타낼 수 있음
○ iteration에 비해 수행 속도 감소
■ 수행 중인 함수 호출은 현재 수행 중인 함수의 중단을 일으키고, 수행 종료 후
중단 되었던 함수를 재개하기 위한 정보가 어딘가에 저장되어야 하기 때문
14
버스기다리기(x)
{
버스를 기다린다
버스가 오면 번호를 확인한다
번호가 x이면 버스를 타고 ‘버스기다리기’를 종료한다
번호가 x가 아니면 ‘버스기다리기’를 수행한다
}
recursion
amugona2015
recursive algorithms
사용
○ 호출은 끝날 수 있어야 함
○ program의 특성이 순환 구조에 적합해야 함
○ 기억 공간 비용 충분히 검토
recursion 3 steps
1. divide
2. conquer
3. combine
15
• divide-and-
conquer
amugona2015
recurrence equation
해법
○ substitution method
1. 가상의 해 결정
2. mathematical induction을 이용하여 필요한 상수를 구한 후 해 판정
○ iteration method
1. 순환적으로 전개하되 반드시 n만 들어있는 항으로 전개
2. 각 항들을 더함
16
amugona2015
search
search
○ data 집단 내의 특정 data를 찾아내는 작업
종류
○ file의 크기에 따라
■ external search
□ 탐색할 record들이 많고 크기가 커 file형태로 저장된 경우
■ internal search
□ 탐색할 record들이 모두 main memory안에 저장된 경우
○ search 방법에 따라
■ sequential search
□ 특정 data를 처음부터 하나씩 비교하며 해당 key값을 가진 record를 찾아감
■ binary search
□ divide and conquer search 의 방법 중 하나
□ record의 집합을 두 부분으로 나누어 해당 key값을 가진 record가 속한 부분
에서 순환적으로 찾아감
17
amugona2015
sequential search
move-to-front
○ 탐색할 record가 찾아지면 그 record를 list의 맨 앞으로 이동
○ record들이 재탐색 될 가능성이 높은 record들을 효율적인 위치로 옮겨야 함
transpose
○ 탐색할 record가 찾아지면 그 record를 바로 앞 record와 바꿈
○ locality가 거의 없는 균등한 탐색 확률을 가짐
18
amugona2015
binary search
record의 구조
○ array/linked list인 경우
■ record 접근 비효율적이므로 부적절
○ binary search tree
■ record 접근 용이
binary search tree
○ 정의
■ 루트가 가진 key값은 root의 왼 subtree에 있는 모든 key값 보다 크다
■ root가 가진 key값은 root의 오른 subtree에 있는 모든 key값 보다 작다
■ root의 왼쪽, 오른쪽 subtree들은 다시 binary search tree가 된다
19
끝
20

More Related Content

More from 정완 전 (7)

MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제
 
Amugona 알고리즘 스터디4회
Amugona 알고리즘 스터디4회Amugona 알고리즘 스터디4회
Amugona 알고리즘 스터디4회
 
amugona 스터디4회 세미나결과
amugona 스터디4회 세미나결과amugona 스터디4회 세미나결과
amugona 스터디4회 세미나결과
 
스터디3회 연결리스트, 삽입정렬 구현하기
스터디3회 연결리스트, 삽입정렬 구현하기스터디3회 연결리스트, 삽입정렬 구현하기
스터디3회 연결리스트, 삽입정렬 구현하기
 
Amugona study 1회 jjw
Amugona study 1회 jjwAmugona study 1회 jjw
Amugona study 1회 jjw
 
Amugona study 1회 - 결과
Amugona study 1회 - 결과Amugona study 1회 - 결과
Amugona study 1회 - 결과
 
Amugona study 1회 jjw
Amugona study 1회 jjwAmugona study 1회 jjw
Amugona study 1회 jjw
 

Amugona stdudy 2nd JJW

  • 1. Data Structures amugona study 2회 전정완 2015-07-29
  • 2. amugona2015 Programs = Data Structures + Algorithms program이 올바르고 효율적으로 작성되기 위해서는 data structures와 algorithms이 정확하고 효율적이어야 한다. Programming 2
  • 3. amugona2015 목차 linked list 구현 m-way search tree ○ B tree ■ 2-3 tree ■ 2-3-4 tree ■ red black tree ○ B* tree ○ B+ tree recursion search 3
  • 4. amugona2015 linked list ○ 구조체의 집합으로 표현되며, 그 member로 자기 자신과 똑같은 형의 pointer 를 가짐 ○ pointer가 다음 element를 가리킴 ○ memory의 물리적인 이동 없이 data의 추가, 삭제, 정렬이 가능하므로 많은 data를 취급 시 적합한 자료구조 ○ 원하는 data 참조 시 처음부터 찾아야 함 ○ 배열보다 data 호출에 시간이 더 많이 걸림 linked list 구현 4 e1 e2 e3 e4
  • 5. amugona2015 linked list 구현 구현 내용 ○ linked list로 데이터A를 저장하기 ○ 리스트의 모든 데이터를 표시하기 ○ 새로운 데이터를 제일 끝에 추가하기 ○ 원하는 위치에 데이터를 삽입하기 ○ 원하는 위치의 데이터를 삭제하기 구현 환경 ○ C, Win32 console app, VS 2012 5 num word 1 accord 2 grant 3 bestow 4 concede 데이터A 1: 표시 2: 추가 3: 삽입 4: 삭제 0: 프로그램종료 command 입력
  • 6. amugona2015 linked list 구현 연결리스트 작성 data 추가 6 • 연결리스트는 구조체의 집합 으로 표현된다
  • 7. amugona2015 data 추가 7 // malloc()으로 새 구조체에 대한 메모리 확보 // 마지막 요소의 주소를 얻음 // 마지막 요소의 주소를 얻음
  • 8. amugona2015 data 표시 8 // 다음 가리키는 요소가 없을 때 까지 요소들 출력
  • 9. amugona2015 m-way search tree 정의 ○ 모든 node가 m보다 같거나 작은 진출 차수를 가지는 tree ○ 각 node가 적어도 m-1개의 정렬된 data 항목을 가진 root tree 활용 ○ tree로 구축된 index를 사용하여 file을 직접 접근함으로써 탐색을 매우 빠르게 함 특징 ○ 가장 왼쪽의 subtree의 값은 가장 첫 번째 node 항목 보다 작음 ○ 두 번째 subtree는 첫 번째 subtree 세 번째 subtree의 사이값을 포함 ○ 가장 오른쪽의 subtree는 마지막 data 항목 보다 큼 ? 성능을 결정 짓는 것 9
  • 10. amugona2015 m-way search tree 분류 ○ B tree ■ 2-3 tree ■ 2-3-4 tree ■ red black tree ○ B* tree ■ 각 node의 최소 2/3을 채워야 하는 B tree ○ B+ tree ■ 각 node의 최소 ½이 채워져야 함 10
  • 11. amugona2015 B tree 정의 ○ root와 terminal node를 제외한 tree의 각 노드는 최소한 m/2의 subtree를 가 짐 ○ tree의 root는 최소 2개의 subtree를 가짐 ○ tree의 모든 terminal node는 같은 level에 있음 특징 ○ 효율성이 높으나 구현이 복잡함 구현 ○ 2-3 tree ■ 차수가 2 또는 3인 internal node를 갖는 트리 ○ 2-3-4 tree ■ 2-3 tree에서 4개의 자식을 가진 node를 허용하는 tree ○ red black tree ■ 2-3-4 tree의 binary tree 표현 11
  • 12. amugona2015 trie key 값의 표현 구조를 통해 탐색이 이뤄지도록 key 값을 문자나 숫자 의 연속으로 나타냄 정의 ○ node는 모두 pointer로 구성 ○ trie의 높이는 key field의 길이에 의해 결정 12
  • 13. amugona2015 recursion divide-and-conquer ○ 하나의 문제를 유사한 형태의 작은 문제들로 나누고, 이들 각각에 동일 한 해결법을 계속적으로 적용한 다음, 그 결과들을 연합하여 원래의 문 제를 해결하는 기법 direct recursion ○ 함수가 자기자신을 직접 호출하는 기법 indirect recursion ○ 함수A가 함수B를 호출하고, 호출된 함수B가 함수A를 호출하는 기법 표현능력이 iteration과 같음 ○ 모든 iteration은 recursion으로 바꾸어 쓸 수 있음 13
  • 14. amugona2015 recursive algorithms 예시 ? Fibonacci numbers ? factorial 특징 ○ 알고리즘이 명확하며 간결하게 나타낼 수 있음 ○ iteration에 비해 수행 속도 감소 ■ 수행 중인 함수 호출은 현재 수행 중인 함수의 중단을 일으키고, 수행 종료 후 중단 되었던 함수를 재개하기 위한 정보가 어딘가에 저장되어야 하기 때문 14 버스기다리기(x) { 버스를 기다린다 버스가 오면 번호를 확인한다 번호가 x이면 버스를 타고 ‘버스기다리기’를 종료한다 번호가 x가 아니면 ‘버스기다리기’를 수행한다 } recursion
  • 15. amugona2015 recursive algorithms 사용 ○ 호출은 끝날 수 있어야 함 ○ program의 특성이 순환 구조에 적합해야 함 ○ 기억 공간 비용 충분히 검토 recursion 3 steps 1. divide 2. conquer 3. combine 15 • divide-and- conquer
  • 16. amugona2015 recurrence equation 해법 ○ substitution method 1. 가상의 해 결정 2. mathematical induction을 이용하여 필요한 상수를 구한 후 해 판정 ○ iteration method 1. 순환적으로 전개하되 반드시 n만 들어있는 항으로 전개 2. 각 항들을 더함 16
  • 17. amugona2015 search search ○ data 집단 내의 특정 data를 찾아내는 작업 종류 ○ file의 크기에 따라 ■ external search □ 탐색할 record들이 많고 크기가 커 file형태로 저장된 경우 ■ internal search □ 탐색할 record들이 모두 main memory안에 저장된 경우 ○ search 방법에 따라 ■ sequential search □ 특정 data를 처음부터 하나씩 비교하며 해당 key값을 가진 record를 찾아감 ■ binary search □ divide and conquer search 의 방법 중 하나 □ record의 집합을 두 부분으로 나누어 해당 key값을 가진 record가 속한 부분 에서 순환적으로 찾아감 17
  • 18. amugona2015 sequential search move-to-front ○ 탐색할 record가 찾아지면 그 record를 list의 맨 앞으로 이동 ○ record들이 재탐색 될 가능성이 높은 record들을 효율적인 위치로 옮겨야 함 transpose ○ 탐색할 record가 찾아지면 그 record를 바로 앞 record와 바꿈 ○ locality가 거의 없는 균등한 탐색 확률을 가짐 18
  • 19. amugona2015 binary search record의 구조 ○ array/linked list인 경우 ■ record 접근 비효율적이므로 부적절 ○ binary search tree ■ record 접근 용이 binary search tree ○ 정의 ■ 루트가 가진 key값은 root의 왼 subtree에 있는 모든 key값 보다 크다 ■ root가 가진 key값은 root의 오른 subtree에 있는 모든 key값 보다 작다 ■ root의 왼쪽, 오른쪽 subtree들은 다시 binary search tree가 된다 19

Editor's Notes

  1. 사람이 쉽게 이해하고 이용할 수 있는 data structure와, 이를 대상으로 구현될 프로그램의 논리인 algorithm이 정확하고 효율적이어야 한다. algorithm과 data structure는 밀접한 관계를 가지며, 서로 어느 한쪽이 없이는 이해할 수 없다.
  2. 데이터 삽삭갱하기 -> 좀 더 구체적으로 할일을 정의함
  3. 인덱스는 검색을 빠르게 하는것이 목적이다. 일반적으로 인덱스의 성능은 트리의 가지수를 증가시켜 향상될수 있다. 하지만 가지수를 증가시키는 것만이 m way search tree의 성능을 향상시키는 것은 아니다. binary tree에서 논의한 것과 같이 성능은 tree의 균형을 유지함으로써 증가시킬 수 있다. 가급적 각 node가 pointe를 많이 갖도록 함으로써 tree의 height를 줄이고, 전체적으로 균형을 유지하도록 해야할 것이다. 하지만 완전한 균형을 유지하는 것은 많은 노력이 필요하며, 거의 균형된 tree를 사용한다. 성능 비교) 완전 균형 binary search tree < AVL tree, 완전 균형 m way search tree < 거의 균형된 m way search tree인 B tree
  4. internal node 일반 tree에서 node 그 자체 external node 일반 tree의 모든 node의 subtree가 공집합인 node
  5. 접근이 비효율적인 이유? linked list의 특징 때문! 특정 record에 직접 접근X 항상 linked list의 처음부터 차례로 접근해야