SlideShare a Scribd company logo
1 of 8
Download to read offline
project #6




       오탈자 검사



                 자료구조 D0
                      조장
             20093468 김 현호
                      조원
             20113293 서 상현
             20093463 김 창헌
             20093530 최 고봉
             20113281 김 정무
순서

•조원별 업무분담


•일정 계획


•자료조사 및 문제 파악


•알고리즘 계획


•소스구현


•잘된 점 / 잘 못된 점
-업무 분담


조장: 김 현호


자료 조사: 김 창헌, 김 정무, 서 상현


프로그래밍: 최 고봉




-일정
6/12 업무분담 및 알고리즘 조사


6/14 사용할 알고리즘 채택 및 알고리즘 공부


6/19 소스 비교 후 제일 나은 것 선택
자료 조사 및 문제 파악
-자료조사




*Heap
자료구조 Heap과 유형 max/min-Heap의 차이점


1. Priority를 갖는 자료구조, Heap의 개요


가. Heap의 정의
- 여러 개의 노드들 가운데서 가장 큰 키 값을 가지는 노드나 가장 작은 키 값을 가지는 노드
를 빠른 시간 내에 찾아내도록 맊들어진 자료 구조


나. Heap의 특징
- 완전 이진 트리의 하나로서 각각의 노드는 유일한 키 값을 가짐
- Priority Queue로서, 이는 말 그대로 Queue는 Queue이되 우선순위를 가진 Queue임
 - 노드의 값이 중복가능


2. Heap의 유형 max-Heap, min-Heap의 차이점


   1) max-Heap
        : 부모노드의 키 값이 자식노드의 키 값보다 작지 않은 완전이진 트리(complete binary
tree)
   2) min-Heap
    :   부모노드의 키 값이 자식노드의 키 값보다 크지 않은 완전이진 트리(complete binary
tree)
3. Heap 연산


- REMOVE-MAX 연산: 트리에 포함된 값들 중 가장 큰 값을 반환 및 삭제.
- INSERT 연산: 트리에 새로운 값을 포함




*Hash
Hashing은 하나의 문자열을 원래의 것을 상징하는 더 짧은 길이의 값이나 키로 변환하는 것이
다. 짧은 해시키를 사용하여 항목을 찾으면 원래의 값을 이용하여 찾는 것보다 더 빠르기 때문
에. 해싱은 데이터베이스내의 항목들을 색인하고 검색하는데 사용된다.
해시 테이블-레코드의 저장을 위한 자료구조로써 해상함수로부터 계산된 함수값에 해당하는
위치에 각 레코드를 한 개 이상 보관할 수 있는 버켓들로 구성된 기억 공간이며, 주어진 key값
을 가지고 해당 레코드를 빠르게 검색하기 위한 수단을 제공하며 레코드의 삽입과 삭제를 용이
하게 한다.
버켓-해싱 함수에 의해 계산된 주소인 홈 주소 혹은 버켓 주소에 레코드 키를 저장하기 위해
마련된 기억장소를 말하며, 대개 한 개 또는 여러 개의 레코드를 저장할 수 있는 슬롯으로 구
성된다.
제산법-나머지 연산자를 사용하여 테이블 주소를 걔산하는 방법으로, 레코드 키 값을 수치 자
료로 간주하여 어 양의 정수로 나눈 나머지를 홈 주소로 결정하는 가장 간단한 해싱 함수이
다. 버켓주소 = 키 값% 해쉬테이블 크기
제곱법-제곱법은 레코드 키 값을 제곱한 후에 결과 값의 중간 부분에 몇 비트를 선택하여 해
시 테이블의 홈 주소로 사용하여, 심볼 테이블 응용에서 자주 사용된다.
    제곱된 결과의 중간 비트는 대개 레코드의 모든 문자에 의존하므로, 레코드를 구성하는
몇 개의 문자가 같을지라도 서로 다른 레코드 키는 다른 홈 주소를 갖게 될 확률이 높다.
   홈 주소를 얻기 위해 사용되는 비트 수는 테이블의 크기에 따라 달라지는데, 중간 부분의
자릿수를 n이라 하면 각 레코드 값들이 가지는 범위인 해시 테이블의 크기는 2^n이 된다.
*Deap 클래스
DEAP(double-ended heap)은 힙(heap) 구조로서 이중 우선 순위 큐(double-ended priority
queue)의 일종입니다. 즉, STL에 있는 prority_queue와 비슷한 기능을 합니다. 이 자료구조의
목적은 크기가 서로 다른 여러 자료가 있을 때, 이중 가장 큰 것이나 가장 작은 것을 순서대로
빠르게 가져오는 것입니다. 이를 구현한 자료 구조로 min heap과 max heap이 각 층별로 번갈
아가며 있는 Min-max heap도 있으나, 두 heap을 서로 따로 둔다는 아이디어를 가지고 구현
한 DEAP이 더 직관적이며 구현하기도 더 재미있습니다.
링크드 리스트, 트리, 해쉬 정도는 MFC에도 구현돼 있을 정도로 친근한 자료 구조이지만, 자
료 구조 책의 뒷부분 무렵에 나오는 힙 같은 것은 대개 낯설어 보입니다. 하지만 이것들은 의
외로 매우 유용합니다. 자료 삽입, 최대값 얻기, 최소값 얻기 작업을 모두 log n만에 할 수 있
습니다. 더구나 값을 얻으면서 이 자료를 삭제하는 데 걸리는 시간이 log n이지 값 자체를 얻
는 시간은 상수입니다. 이 n은 자료의 크기가 아니라 힙의 크기이기 때문에, 수십만 개의 자료
가 실시간으로 들어오고 있고, 이중에서 가장 중요한 100개의 자료만을 추려낸다고 할 때, 자
료를 모두 메모리로 읽어 정렬하지 않고도 100칸의 배열 안에서 이 일을 할 수 있지요.
이 프로그램의 CDeap은 DEAP을 템플릿 클래스로 구현한 것으로, 랭킹 기능에 맞게 만들어져
있습니다. 이미 힙이 꽉 차 있으면 원소를 삽입할 때 어떡할 것인지 policy를 지정할 수 있습
니다. 큰 구조체를 대상으로 이 클래스를 쓸 경우, TYPE에는 A를, ARG_TYPE에는 const A
&와 같은 자료형을 주면 됩니다.


     Deap이 일반 heap과 다른 점은?

deap은 한 배열로 min heap과 max heap을 동시에 표현합니다. 흔히 힙 정렬을 할 때나 일반
힙을 표현할 때, 맨 꼭대기의 인덱스를 0이 아닌 1로 삼는 경우가 있습니다. (배열의 포인터에
다 1을 뺌으로써) deap은 꼭대기에 원소가 두 개가 있기 때문에 인덱스를 2부터 시작하게 하
는 게 유리합니다. 이렇게 하면 어느 인덱스에서나 그 인덱스 번호에 2를 곱함으로써 아래층
왼쪽의 원소를 가리키게 할 수 있습니다.
즉, 2 [3], 4 5, [6 7], 8 9 10 11 [12 13 14 15], ... 의 순서대로 [] 안의 수치는 max
heap의 인덱스이고 그렇지 않은 2, 4, 5, 8, ...은 min heap의 인덱스가 되는 것입니다. max
heap의 인덱스는 그 수에서 가장 큰 2진법 비트와 그 다음 비트가 언제나 1임을 알 수 있습니
다. 3=11, 6=110, 13=1101, 15=1111
deap에 원소가 추가되면 처음에는 새 원소가 일반 heap과 마찬가지로 배열의 가장 마지막 인
덱스에 있게 됩니다. 그 인덱스는 min heap 인덱스일 수도 있고 max heap 인덱스일 수도 있
습니다.
이제 이 원소와, min이든 max이든 맞은편 heap에서 같은 위치에 있는 원소와 비교를 해야 합
니다. 8 ↔ 12, 7 ↔ 5와 같은 식입니다. 만약 정확하게 같은 위치에 있는 인덱스가 존재하지
않는다면 그 인덱스의 부모 인덱스에 있는 원소와 비교하면 됩니다. 가령, 원소가 min heap에
속하는 10번 인덱스와 짝인 max heap의 인덱스는 14인데 원소가 그만치 없어서 이 인덱스가
존재하지 않는다면 부모인 7번 인덱스가 짝이 되는 것입니다.
그래서 새 원소가 min heap에 추가됐는데 max heap의 짝이 새 원소보다 값이 작은 경우, 또
는 반대로 새 원소가 max heap에 추가됐는데 min heap의 짝이 새 원소보다 큰 경우 원소의
위치를 뒤바꿉니다. 그러고 나서 새 위치를 기준으로 새로운 원소가 min heap에 속한다면 min
heap대로, 혹은 max heap에 속한다면 max heap대로 해당 힙의 정의에 맞게 새 원소와 부모
원소를 재배치하면 삽입 작업이 끝납니다.
한편 삭제는 min 또는 max 원소를 대상으로 할 수 있는데, 해당 힙의 맨 꼭대기 원소를 제거
한 후 아래의 원소들 중 그 힙의 조건에 맞는 원소를 하나씩 끌어올려 줍니다. 그러면 맨 마지
막 빈 자리가 남게 되죠. 거기에다가 배열상으로 제일 마지막 인덱스에 해당하는 원소를 삽입
해서 위에서 열거한 삽입 작업(자기 짝과 위치 교환 등)을 다시 시행해 주면 됩니다.
http://moogi.new21.org/src15.htm




-문제 파악
1. 영어 텍스트 파일을 읽어서 사전을 검색하여 철자를 검색하는 프로그램을 작성한다.
2. 철자를 검색하여 틀린 글자가 나오면 표시하고 가장 적절한 단어를 추천한다.
3. 가장 적절한 단어를 찾기 위해서는 Edit distance를 사용하면 된다. 물론 다른 방법도 있다.
4. 사용 가능한 사전




-알고리즘 계획
주어진 사전을 읽어드려 그 사전을 트리로 만들고 모든 노드에 널값을 넣고 입력받는 문자에
해당하는 노드에 카운트를 한다. 출력은 카운트된 값과

-소스 구현

-잘된 점
각자가 한번씩 소스에 대한 연구를 해 보았기 때문에 좀더 심도 깊은 회의가 될 수 있었다.




-잘 못된 점
모두가 각자의 프로그램을 짜다가 가장 좋은 것을 선택 하기로 했다보니 완성된 소스가 나오지
않고 모두 다 부족한 소스가 나왔기에 최종적으로 완성을 하지 못 하였다.

More Related Content

What's hot

자료구조 06 최종 보고서
자료구조 06 최종 보고서자료구조 06 최종 보고서
자료구조 06 최종 보고서pkok15
 
[Swift] Data Structure - Heap
[Swift] Data Structure - Heap[Swift] Data Structure - Heap
[Swift] Data Structure - HeapBill Kim
 
Hash table
Hash tableHash table
Hash tableSeoYeong
 
[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리Jaeho Seok
 
[Swift] Tuple
[Swift] Tuple[Swift] Tuple
[Swift] TupleBill Kim
 
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업Jiho Lee
 
TAOCP1 - 2.2.2 - 순차할당
TAOCP1 - 2.2.2 - 순차할당TAOCP1 - 2.2.2 - 순차할당
TAOCP1 - 2.2.2 - 순차할당JangHyuk You
 
[Swift] Data Structure - Array
[Swift] Data Structure - Array[Swift] Data Structure - Array
[Swift] Data Structure - ArrayBill Kim
 
My sql특징 정리
My sql특징 정리My sql특징 정리
My sql특징 정리parktaesoon
 
Hive 입문 발표 자료
Hive 입문 발표 자료Hive 입문 발표 자료
Hive 입문 발표 자료beom kyun choi
 
Hadoop설명
Hadoop설명Hadoop설명
Hadoop설명Ji Hoon Lee
 
Elasticsearch development case
Elasticsearch development caseElasticsearch development case
Elasticsearch development case일규 최
 
Solr development case
Solr development caseSolr development case
Solr development case일규 최
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search TreeBill Kim
 
[Swift] Data Structure - Queue
[Swift] Data Structure - Queue[Swift] Data Structure - Queue
[Swift] Data Structure - QueueBill Kim
 
An introduction to hadoop
An introduction to hadoopAn introduction to hadoop
An introduction to hadoopMinJae Kang
 
[알고리즘] Heapsort
[알고리즘] Heapsort[알고리즘] Heapsort
[알고리즘] Heapsorthyeyoungpark15
 

What's hot (20)

자료구조 06 최종 보고서
자료구조 06 최종 보고서자료구조 06 최종 보고서
자료구조 06 최종 보고서
 
[Swift] Data Structure - Heap
[Swift] Data Structure - Heap[Swift] Data Structure - Heap
[Swift] Data Structure - Heap
 
Hash table
Hash tableHash table
Hash table
 
[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리
 
[Swift] Tuple
[Swift] Tuple[Swift] Tuple
[Swift] Tuple
 
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
 
TAOCP1 - 2.2.2 - 순차할당
TAOCP1 - 2.2.2 - 순차할당TAOCP1 - 2.2.2 - 순차할당
TAOCP1 - 2.2.2 - 순차할당
 
[Swift] Data Structure - Array
[Swift] Data Structure - Array[Swift] Data Structure - Array
[Swift] Data Structure - Array
 
2012 Ds 06
2012 Ds 062012 Ds 06
2012 Ds 06
 
My sql특징 정리
My sql특징 정리My sql특징 정리
My sql특징 정리
 
Hive 입문 발표 자료
Hive 입문 발표 자료Hive 입문 발표 자료
Hive 입문 발표 자료
 
컴퓨터개론08
컴퓨터개론08컴퓨터개론08
컴퓨터개론08
 
Hadoop설명
Hadoop설명Hadoop설명
Hadoop설명
 
Elasticsearch development case
Elasticsearch development caseElasticsearch development case
Elasticsearch development case
 
Solr development case
Solr development caseSolr development case
Solr development case
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree
 
[Swift] Data Structure - Queue
[Swift] Data Structure - Queue[Swift] Data Structure - Queue
[Swift] Data Structure - Queue
 
hadoop ch1
hadoop ch1hadoop ch1
hadoop ch1
 
An introduction to hadoop
An introduction to hadoopAn introduction to hadoop
An introduction to hadoop
 
[알고리즘] Heapsort
[알고리즘] Heapsort[알고리즘] Heapsort
[알고리즘] Heapsort
 

Viewers also liked

Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터jinho park
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기nexusz99
 
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계Imseong Kang
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.Kris Jeong
 
오픈소스 공헌을 위한 필수 지식
오픈소스 공헌을 위한 필수 지식오픈소스 공헌을 위한 필수 지식
오픈소스 공헌을 위한 필수 지식Matthew (정재화)
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기Taegon Kim
 
신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]Yurim Jin
 

Viewers also liked (8)

Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기
 
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.
 
오픈소스 공헌을 위한 필수 지식
오픈소스 공헌을 위한 필수 지식오픈소스 공헌을 위한 필수 지식
오픈소스 공헌을 위한 필수 지식
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기
 
jQuery Essentials
jQuery EssentialsjQuery Essentials
jQuery Essentials
 
신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]
 

Similar to 자료구조6보고서

2012 Ds A1 06
2012 Ds A1 062012 Ds A1 06
2012 Ds A1 06seonhyung
 
2012 Ds A1 06
2012 Ds A1 062012 Ds A1 06
2012 Ds A1 06seonhyung
 
알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdolsseungdols
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7KoChungWook
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 HwpKimjeongmoo
 
Python+numpy pandas 1편
Python+numpy pandas 1편Python+numpy pandas 1편
Python+numpy pandas 1편Yong Joon Moon
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl승혁 조
 
Binary search tree
Binary search treeBinary search tree
Binary search treeMelon Lemon
 
데이터분석의 길 3 “r 워크플로우 (스토리텔링)”
데이터분석의 길 3   “r 워크플로우 (스토리텔링)”데이터분석의 길 3   “r 워크플로우 (스토리텔링)”
데이터분석의 길 3 “r 워크플로우 (스토리텔링)”Jaimie Kwon (권재명)
 
[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study경 송
 
개경프 1주차 Stl study
개경프 1주차 Stl study개경프 1주차 Stl study
개경프 1주차 Stl study경 송
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection SortBill Kim
 
자료구조 트리 보고서
자료구조 트리 보고서자료구조 트리 보고서
자료구조 트리 보고서mil23
 
자료구조 Project4
자료구조 Project4자료구조 Project4
자료구조 Project4KoChungWook
 
[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디대영 노
 
Active learning literature survey
Active learning  literature surveyActive learning  literature survey
Active learning literature surveyhyunsikkim30
 
[추천] 색인기법 김성현
[추천] 색인기법 김성현[추천] 색인기법 김성현
[추천] 색인기법 김성현Young-jun Jeong
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈Yong Joon Moon
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조중선 곽
 

Similar to 자료구조6보고서 (20)

2012 Ds A1 06
2012 Ds A1 062012 Ds A1 06
2012 Ds A1 06
 
2012 Ds A1 06
2012 Ds A1 062012 Ds A1 06
2012 Ds A1 06
 
알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 Hwp
 
DS_04
DS_04DS_04
DS_04
 
Python+numpy pandas 1편
Python+numpy pandas 1편Python+numpy pandas 1편
Python+numpy pandas 1편
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl
 
Binary search tree
Binary search treeBinary search tree
Binary search tree
 
데이터분석의 길 3 “r 워크플로우 (스토리텔링)”
데이터분석의 길 3   “r 워크플로우 (스토리텔링)”데이터분석의 길 3   “r 워크플로우 (스토리텔링)”
데이터분석의 길 3 “r 워크플로우 (스토리텔링)”
 
[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study
 
개경프 1주차 Stl study
개경프 1주차 Stl study개경프 1주차 Stl study
개경프 1주차 Stl study
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection Sort
 
자료구조 트리 보고서
자료구조 트리 보고서자료구조 트리 보고서
자료구조 트리 보고서
 
자료구조 Project4
자료구조 Project4자료구조 Project4
자료구조 Project4
 
[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디
 
Active learning literature survey
Active learning  literature surveyActive learning  literature survey
Active learning literature survey
 
[추천] 색인기법 김성현
[추천] 색인기법 김성현[추천] 색인기법 김성현
[추천] 색인기법 김성현
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 

More from KimChangHoen

자료구조3보고서
자료구조3보고서자료구조3보고서
자료구조3보고서KimChangHoen
 
자료구조1보고서
자료구조1보고서자료구조1보고서
자료구조1보고서KimChangHoen
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서KimChangHoen
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서KimChangHoen
 
자료구조4보고서
자료구조4보고서자료구조4보고서
자료구조4보고서KimChangHoen
 
이산치7보고서
이산치7보고서이산치7보고서
이산치7보고서KimChangHoen
 
이산치6보고서
이산치6보고서이산치6보고서
이산치6보고서KimChangHoen
 
이산치5보고서
이산치5보고서이산치5보고서
이산치5보고서KimChangHoen
 
이산치4보고서
이산치4보고서이산치4보고서
이산치4보고서KimChangHoen
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서KimChangHoen
 
이산치1보고서
이산치1보고서이산치1보고서
이산치1보고서KimChangHoen
 

More from KimChangHoen (11)

자료구조3보고서
자료구조3보고서자료구조3보고서
자료구조3보고서
 
자료구조1보고서
자료구조1보고서자료구조1보고서
자료구조1보고서
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서
 
자료구조4보고서
자료구조4보고서자료구조4보고서
자료구조4보고서
 
이산치7보고서
이산치7보고서이산치7보고서
이산치7보고서
 
이산치6보고서
이산치6보고서이산치6보고서
이산치6보고서
 
이산치5보고서
이산치5보고서이산치5보고서
이산치5보고서
 
이산치4보고서
이산치4보고서이산치4보고서
이산치4보고서
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서
 
이산치1보고서
이산치1보고서이산치1보고서
이산치1보고서
 

자료구조6보고서

  • 1. project #6 오탈자 검사 자료구조 D0 조장 20093468 김 현호 조원 20113293 서 상현 20093463 김 창헌 20093530 최 고봉 20113281 김 정무
  • 2. 순서 •조원별 업무분담 •일정 계획 •자료조사 및 문제 파악 •알고리즘 계획 •소스구현 •잘된 점 / 잘 못된 점
  • 3. -업무 분담 조장: 김 현호 자료 조사: 김 창헌, 김 정무, 서 상현 프로그래밍: 최 고봉 -일정 6/12 업무분담 및 알고리즘 조사 6/14 사용할 알고리즘 채택 및 알고리즘 공부 6/19 소스 비교 후 제일 나은 것 선택
  • 4. 자료 조사 및 문제 파악 -자료조사 *Heap 자료구조 Heap과 유형 max/min-Heap의 차이점 1. Priority를 갖는 자료구조, Heap의 개요 가. Heap의 정의 - 여러 개의 노드들 가운데서 가장 큰 키 값을 가지는 노드나 가장 작은 키 값을 가지는 노드 를 빠른 시간 내에 찾아내도록 맊들어진 자료 구조 나. Heap의 특징 - 완전 이진 트리의 하나로서 각각의 노드는 유일한 키 값을 가짐 - Priority Queue로서, 이는 말 그대로 Queue는 Queue이되 우선순위를 가진 Queue임 - 노드의 값이 중복가능 2. Heap의 유형 max-Heap, min-Heap의 차이점 1) max-Heap : 부모노드의 키 값이 자식노드의 키 값보다 작지 않은 완전이진 트리(complete binary tree) 2) min-Heap : 부모노드의 키 값이 자식노드의 키 값보다 크지 않은 완전이진 트리(complete binary tree)
  • 5. 3. Heap 연산 - REMOVE-MAX 연산: 트리에 포함된 값들 중 가장 큰 값을 반환 및 삭제. - INSERT 연산: 트리에 새로운 값을 포함 *Hash Hashing은 하나의 문자열을 원래의 것을 상징하는 더 짧은 길이의 값이나 키로 변환하는 것이 다. 짧은 해시키를 사용하여 항목을 찾으면 원래의 값을 이용하여 찾는 것보다 더 빠르기 때문 에. 해싱은 데이터베이스내의 항목들을 색인하고 검색하는데 사용된다.
  • 6. 해시 테이블-레코드의 저장을 위한 자료구조로써 해상함수로부터 계산된 함수값에 해당하는 위치에 각 레코드를 한 개 이상 보관할 수 있는 버켓들로 구성된 기억 공간이며, 주어진 key값 을 가지고 해당 레코드를 빠르게 검색하기 위한 수단을 제공하며 레코드의 삽입과 삭제를 용이 하게 한다. 버켓-해싱 함수에 의해 계산된 주소인 홈 주소 혹은 버켓 주소에 레코드 키를 저장하기 위해 마련된 기억장소를 말하며, 대개 한 개 또는 여러 개의 레코드를 저장할 수 있는 슬롯으로 구 성된다. 제산법-나머지 연산자를 사용하여 테이블 주소를 걔산하는 방법으로, 레코드 키 값을 수치 자 료로 간주하여 어 양의 정수로 나눈 나머지를 홈 주소로 결정하는 가장 간단한 해싱 함수이 다. 버켓주소 = 키 값% 해쉬테이블 크기 제곱법-제곱법은 레코드 키 값을 제곱한 후에 결과 값의 중간 부분에 몇 비트를 선택하여 해 시 테이블의 홈 주소로 사용하여, 심볼 테이블 응용에서 자주 사용된다. 제곱된 결과의 중간 비트는 대개 레코드의 모든 문자에 의존하므로, 레코드를 구성하는 몇 개의 문자가 같을지라도 서로 다른 레코드 키는 다른 홈 주소를 갖게 될 확률이 높다. 홈 주소를 얻기 위해 사용되는 비트 수는 테이블의 크기에 따라 달라지는데, 중간 부분의 자릿수를 n이라 하면 각 레코드 값들이 가지는 범위인 해시 테이블의 크기는 2^n이 된다. *Deap 클래스 DEAP(double-ended heap)은 힙(heap) 구조로서 이중 우선 순위 큐(double-ended priority queue)의 일종입니다. 즉, STL에 있는 prority_queue와 비슷한 기능을 합니다. 이 자료구조의 목적은 크기가 서로 다른 여러 자료가 있을 때, 이중 가장 큰 것이나 가장 작은 것을 순서대로 빠르게 가져오는 것입니다. 이를 구현한 자료 구조로 min heap과 max heap이 각 층별로 번갈 아가며 있는 Min-max heap도 있으나, 두 heap을 서로 따로 둔다는 아이디어를 가지고 구현 한 DEAP이 더 직관적이며 구현하기도 더 재미있습니다. 링크드 리스트, 트리, 해쉬 정도는 MFC에도 구현돼 있을 정도로 친근한 자료 구조이지만, 자 료 구조 책의 뒷부분 무렵에 나오는 힙 같은 것은 대개 낯설어 보입니다. 하지만 이것들은 의 외로 매우 유용합니다. 자료 삽입, 최대값 얻기, 최소값 얻기 작업을 모두 log n만에 할 수 있 습니다. 더구나 값을 얻으면서 이 자료를 삭제하는 데 걸리는 시간이 log n이지 값 자체를 얻 는 시간은 상수입니다. 이 n은 자료의 크기가 아니라 힙의 크기이기 때문에, 수십만 개의 자료 가 실시간으로 들어오고 있고, 이중에서 가장 중요한 100개의 자료만을 추려낸다고 할 때, 자 료를 모두 메모리로 읽어 정렬하지 않고도 100칸의 배열 안에서 이 일을 할 수 있지요. 이 프로그램의 CDeap은 DEAP을 템플릿 클래스로 구현한 것으로, 랭킹 기능에 맞게 만들어져
  • 7. 있습니다. 이미 힙이 꽉 차 있으면 원소를 삽입할 때 어떡할 것인지 policy를 지정할 수 있습 니다. 큰 구조체를 대상으로 이 클래스를 쓸 경우, TYPE에는 A를, ARG_TYPE에는 const A &와 같은 자료형을 주면 됩니다. Deap이 일반 heap과 다른 점은? deap은 한 배열로 min heap과 max heap을 동시에 표현합니다. 흔히 힙 정렬을 할 때나 일반 힙을 표현할 때, 맨 꼭대기의 인덱스를 0이 아닌 1로 삼는 경우가 있습니다. (배열의 포인터에 다 1을 뺌으로써) deap은 꼭대기에 원소가 두 개가 있기 때문에 인덱스를 2부터 시작하게 하 는 게 유리합니다. 이렇게 하면 어느 인덱스에서나 그 인덱스 번호에 2를 곱함으로써 아래층 왼쪽의 원소를 가리키게 할 수 있습니다. 즉, 2 [3], 4 5, [6 7], 8 9 10 11 [12 13 14 15], ... 의 순서대로 [] 안의 수치는 max heap의 인덱스이고 그렇지 않은 2, 4, 5, 8, ...은 min heap의 인덱스가 되는 것입니다. max heap의 인덱스는 그 수에서 가장 큰 2진법 비트와 그 다음 비트가 언제나 1임을 알 수 있습니 다. 3=11, 6=110, 13=1101, 15=1111 deap에 원소가 추가되면 처음에는 새 원소가 일반 heap과 마찬가지로 배열의 가장 마지막 인 덱스에 있게 됩니다. 그 인덱스는 min heap 인덱스일 수도 있고 max heap 인덱스일 수도 있 습니다. 이제 이 원소와, min이든 max이든 맞은편 heap에서 같은 위치에 있는 원소와 비교를 해야 합 니다. 8 ↔ 12, 7 ↔ 5와 같은 식입니다. 만약 정확하게 같은 위치에 있는 인덱스가 존재하지 않는다면 그 인덱스의 부모 인덱스에 있는 원소와 비교하면 됩니다. 가령, 원소가 min heap에 속하는 10번 인덱스와 짝인 max heap의 인덱스는 14인데 원소가 그만치 없어서 이 인덱스가 존재하지 않는다면 부모인 7번 인덱스가 짝이 되는 것입니다. 그래서 새 원소가 min heap에 추가됐는데 max heap의 짝이 새 원소보다 값이 작은 경우, 또 는 반대로 새 원소가 max heap에 추가됐는데 min heap의 짝이 새 원소보다 큰 경우 원소의 위치를 뒤바꿉니다. 그러고 나서 새 위치를 기준으로 새로운 원소가 min heap에 속한다면 min heap대로, 혹은 max heap에 속한다면 max heap대로 해당 힙의 정의에 맞게 새 원소와 부모 원소를 재배치하면 삽입 작업이 끝납니다. 한편 삭제는 min 또는 max 원소를 대상으로 할 수 있는데, 해당 힙의 맨 꼭대기 원소를 제거 한 후 아래의 원소들 중 그 힙의 조건에 맞는 원소를 하나씩 끌어올려 줍니다. 그러면 맨 마지 막 빈 자리가 남게 되죠. 거기에다가 배열상으로 제일 마지막 인덱스에 해당하는 원소를 삽입 해서 위에서 열거한 삽입 작업(자기 짝과 위치 교환 등)을 다시 시행해 주면 됩니다. http://moogi.new21.org/src15.htm -문제 파악 1. 영어 텍스트 파일을 읽어서 사전을 검색하여 철자를 검색하는 프로그램을 작성한다. 2. 철자를 검색하여 틀린 글자가 나오면 표시하고 가장 적절한 단어를 추천한다. 3. 가장 적절한 단어를 찾기 위해서는 Edit distance를 사용하면 된다. 물론 다른 방법도 있다.
  • 8. 4. 사용 가능한 사전 -알고리즘 계획 주어진 사전을 읽어드려 그 사전을 트리로 만들고 모든 노드에 널값을 넣고 입력받는 문자에 해당하는 노드에 카운트를 한다. 출력은 카운트된 값과 -소스 구현 -잘된 점 각자가 한번씩 소스에 대한 연구를 해 보았기 때문에 좀더 심도 깊은 회의가 될 수 있었다. -잘 못된 점 모두가 각자의 프로그램을 짜다가 가장 좋은 것을 선택 하기로 했다보니 완성된 소스가 나오지 않고 모두 다 부족한 소스가 나왔기에 최종적으로 완성을 하지 못 하였다.