1. 자 료 구 조
결과 보고서
Project#7 : 사전
과목 : 자료구조
담당교수님 : 차정원교수님
조원 : A1조 김선형, 김지욱, 정의수, 조경상
2. 프로젝트 목표
영어 텍스트 파일을 읽어서 사전을 검색하여 철자를 검색하는 프로그램을 작성한다.
철자를 검색하여 틀린 글자가 나오면 표시하고 가장 적절한 단어를 추천한다.
Heap, Deap, Hash의 개념, 상용법을 안다.
역할분담
조장 : 김선형
자료조사 : 김선형, 김지욱
프로그래밍 : 정의수, 조경상
3. Heap
heap은 기본적으로 완전이진트리의 구조를 가진다. 각각의 노드는 유일한 키 값을 가지게
되는데, 노드 중에서 키 값이 가장 큰 노드나 가장 작은 노드를 빠른 시간 내에 찾기 위해
만든 자료구조이다.
①MaxHeap
하나의 노드는 그 노드의 모든 자손노드보다 큰 키 값을 가진다. 그러므로 루트에는 항상
가장 큰 키 값을 갖는 노드가 위치한다. 즉, 루트 노드로 올라 갈수록 값이 커지는 완전이
진트리이다.
②MinHeap
하나의 노드는 그 노드의 모든 자손노드보다 작은 키 값을 가진다. 그러므로 루트에는 항상
가장 작은 키 값을 갖는 노드가 위치한다. 즉, 루트 노드로 올라 갈수록 값이 작아지는 완
전이진트리이다.
Deap
min-max heap보다 간단하게 최대 및 최소 키 값을 가지는 노드를 찾아낼 수 있도록 고안
된 자료구조이다. deap은 완전이진트리이며 루트 노드는 비어있다. 루트의 왼쪽 서브트리는
min heap이고 오른쪽 서브트리는 max heap이다.
Hash
갖고 있는 테이블 항목을 검색하기 위해 특정한 변환 함수를 이용하여 키 값을 항목의 주
소로 직접 바꿔서 검색하는 방법을 hash라고 한다. 이 때 변환 함수는 hash 함수(hash
function)라 한다.
일반 적인 탐색 방법에 반하여 해싱은 키 값에 직접 산술적인 연산을 적용하여 항목이 저
장되어 있는 테이블의 주소를 계산하여 항목에 접근한다. 이렇게 키 값 연산에 의해 직접
접근이 가능한 구조를 hash테이블이라 부르며, hash테이블을 이용한 탐색을 hashing이라
한다.
hash table은 key와 value 쌍을 저장하는 자료구조로 대략적인 구조는 아래 그림과 같다.
4. <hash table의 구조>
세로로는 버킷(bucket)이라는 공간들이 배열 형태로 존재하고, 이 bucket에는 링크드 리스
트가 주렁 주렁 달려있다. 해쉬 테이블의 가장 큰 장점은 검색이 매우 빠르다는 것이다.
① hashing의 필요성 : hash함수가 키 값을 해당 주소로 단번에 변환해 주므로 매우 빠른
검색이 가능하다.
② 정적 hashing : 고정 크기의 테이블을 이용하여 hashing 하는 방법으로 한번 저장된 명
칭의 상대적 위치가 변경되지 않는다.
③ 동적 hashing : 항목과 삽입과 삭제가 빈번히 발생하는 응용에는 정적 hashing이 적합
하지 못하다. 고정된 크기의 hash table을 사용하는 정적 hashing의 경
우 삽입이 많아 지면 table이 가득 차서 사용이 불가능하고 삭제가 많아지
면 많은 공간이 사용되지 않으므로 낭비가 발생한다. 이러한 응용에 적합
하도록 고안된 것이 동적 hashing(dynamic hashing) 또는 확장성
hashing(extendible hashing)이다.
④ trie 사용 : 하나의 키 값의 일부분만을 사용하여 분기하는 트리구조. trie는 입력키의 비
트 값에 따라 2개의 가지로 분리되도록 만들어진 것이다.
※Hash의 문제점
서로 다른 두 개 이상의 명칭이 hash함수에 의해 동일한 주소로 변환되는 경우를 충돌
(Collision)이라 하는데, 충돌이 자주 발생하면 성능 저하가 되므로 hash함수를 수정하거나
hash table의 크기를 적절히 조절해 주어야한다. 충돌이 발생한 경우 같은 bucket에 있는
다른 슬롯에 명칭을 저장하면 된다. 그러나 슬롯의 개 수 만큼 충돌이 생기면 빈 슬롯이 소
진되어 오버플로우가 생길 수 있다.