SlideShare a Scribd company logo
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

Data Structures
Data StructuresData Structures
Data Structures
skku_npc
 
Hash table
Hash tableHash table
Hash table
SeoYeong
 
[Swift] Tuple
[Swift] Tuple[Swift] Tuple
[Swift] Tuple
Bill Kim
 
[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리Jaeho Seok
 
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
Jiho Lee
 
My sql특징 정리
My sql특징 정리My sql특징 정리
My sql특징 정리parktaesoon
 
Hive 입문 발표 자료
Hive 입문 발표 자료Hive 입문 발표 자료
Hive 입문 발표 자료
beom kyun choi
 
TAOCP1 - 2.2.2 - 순차할당
TAOCP1 - 2.2.2 - 순차할당TAOCP1 - 2.2.2 - 순차할당
TAOCP1 - 2.2.2 - 순차할당
JangHyuk You
 
Hadoop설명
Hadoop설명Hadoop설명
Hadoop설명Ji Hoon Lee
 
Elasticsearch development case
Elasticsearch development caseElasticsearch development case
Elasticsearch development case
일규 최
 
컴퓨터개론08
컴퓨터개론08컴퓨터개론08
컴퓨터개론08
Edward Hwang
 
Solr development case
Solr development caseSolr development case
Solr development case
일규 최
 
hadoop ch1
hadoop ch1hadoop ch1
hadoop ch1
Mungyu Choi
 
이도형 실적 내역서
이도형 실적 내역서이도형 실적 내역서
이도형 실적 내역서
Lee Do hyoung
 
An introduction to hadoop
An introduction to hadoopAn introduction to hadoop
An introduction to hadoop
MinJae Kang
 
[알고리즘] Heapsort
[알고리즘] Heapsort[알고리즘] Heapsort
[알고리즘] Heapsort
hyeyoungpark15
 
[Swift] Data Structure - Tree
[Swift] Data Structure - Tree[Swift] Data Structure - Tree
[Swift] Data Structure - Tree
Bill Kim
 
하둡 타입과 포맷
하둡 타입과 포맷하둡 타입과 포맷
하둡 타입과 포맷진호 박
 
HBase 훑어보기
HBase 훑어보기HBase 훑어보기
HBase 훑어보기
beom kyun choi
 

What's hot (20)

Data Structures
Data StructuresData Structures
Data Structures
 
Hash table
Hash tableHash table
Hash table
 
[Swift] Tuple
[Swift] Tuple[Swift] Tuple
[Swift] Tuple
 
[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리
 
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
 
My sql특징 정리
My sql특징 정리My sql특징 정리
My sql특징 정리
 
Hive 입문 발표 자료
Hive 입문 발표 자료Hive 입문 발표 자료
Hive 입문 발표 자료
 
TAOCP1 - 2.2.2 - 순차할당
TAOCP1 - 2.2.2 - 순차할당TAOCP1 - 2.2.2 - 순차할당
TAOCP1 - 2.2.2 - 순차할당
 
Hadoop설명
Hadoop설명Hadoop설명
Hadoop설명
 
2012 Ds 06
2012 Ds 062012 Ds 06
2012 Ds 06
 
Elasticsearch development case
Elasticsearch development caseElasticsearch development case
Elasticsearch development case
 
컴퓨터개론08
컴퓨터개론08컴퓨터개론08
컴퓨터개론08
 
Solr development case
Solr development caseSolr development case
Solr development case
 
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
 
[Swift] Data Structure - Tree
[Swift] Data Structure - Tree[Swift] Data Structure - Tree
[Swift] Data Structure - Tree
 
하둡 타입과 포맷
하둡 타입과 포맷하둡 타입과 포맷
하둡 타입과 포맷
 
HBase 훑어보기
HBase 훑어보기HBase 훑어보기
HBase 훑어보기
 

Similar to Project#6 오탈자 검사 D0 Hwp

[Swift] Data Structure - Heap
[Swift] Data Structure - Heap[Swift] Data Structure - Heap
[Swift] Data Structure - Heap
Bill Kim
 
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
알고리즘 스터디(정렬) Seungdols
seungdols
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7KoChungWook
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 HwpKimjeongmoo
 
데이터분석의 길 3 “r 워크플로우 (스토리텔링)”
데이터분석의 길 3   “r 워크플로우 (스토리텔링)”데이터분석의 길 3   “r 워크플로우 (스토리텔링)”
데이터분석의 길 3 “r 워크플로우 (스토리텔링)”
Jaimie Kwon (권재명)
 
Python+numpy pandas 1편
Python+numpy pandas 1편Python+numpy pandas 1편
Python+numpy pandas 1편
Yong Joon Moon
 
Howto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear RegressionHowto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear Regression
Hyo jeong Lee
 
[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
경 송
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl
승혁 조
 
자료구조 Project4
자료구조 Project4자료구조 Project4
자료구조 Project4KoChungWook
 
[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디
대영 노
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection Sort
Bill Kim
 
Binary search tree
Binary search treeBinary search tree
Binary search tree
Melon Lemon
 
[추천] 색인기법 김성현
[추천] 색인기법 김성현[추천] 색인기법 김성현
[추천] 색인기법 김성현Young-jun Jeong
 
자료구조 트리 보고서
자료구조 트리 보고서자료구조 트리 보고서
자료구조 트리 보고서mil23
 
업무 자동화
업무 자동화업무 자동화
업무 자동화
Kyunghoon Kim
 

Similar to Project#6 오탈자 검사 D0 Hwp (20)

[Swift] Data Structure - Heap
[Swift] Data Structure - Heap[Swift] Data Structure - Heap
[Swift] Data Structure - Heap
 
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
 
데이터분석의 길 3 “r 워크플로우 (스토리텔링)”
데이터분석의 길 3   “r 워크플로우 (스토리텔링)”데이터분석의 길 3   “r 워크플로우 (스토리텔링)”
데이터분석의 길 3 “r 워크플로우 (스토리텔링)”
 
DS_04
DS_04DS_04
DS_04
 
Python+numpy pandas 1편
Python+numpy pandas 1편Python+numpy pandas 1편
Python+numpy pandas 1편
 
Howto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear RegressionHowto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear Regression
 
[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
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl
 
자료구조 Project4
자료구조 Project4자료구조 Project4
자료구조 Project4
 
[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection Sort
 
Binary search tree
Binary search treeBinary search tree
Binary search tree
 
[추천] 색인기법 김성현
[추천] 색인기법 김성현[추천] 색인기법 김성현
[추천] 색인기법 김성현
 
자료구조 트리 보고서
자료구조 트리 보고서자료구조 트리 보고서
자료구조 트리 보고서
 
업무 자동화
업무 자동화업무 자동화
업무 자동화
 

More from Kimjeongmoo

Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpKimjeongmoo
 
Project#4상호참조 생성기 Hwp
Project#4상호참조 생성기 HwpProject#4상호참조 생성기 Hwp
Project#4상호참조 생성기 HwpKimjeongmoo
 
Project#3다항식의연산 Hwp
Project#3다항식의연산 HwpProject#3다항식의연산 Hwp
Project#3다항식의연산 HwpKimjeongmoo
 
Project#1파스칼 삼각형
Project#1파스칼 삼각형Project#1파스칼 삼각형
Project#1파스칼 삼각형Kimjeongmoo
 
Project#7 Group Codes Hwp
Project#7 Group Codes HwpProject#7 Group Codes Hwp
Project#7 Group Codes HwpKimjeongmoo
 
Project#6 2 비트 덧셈기 Hwp
Project#6 2 비트 덧셈기 HwpProject#6 2 비트 덧셈기 Hwp
Project#6 2 비트 덧셈기 HwpKimjeongmoo
 
Project#5 통신망에서 길 찾기 Hwp
Project#5 통신망에서 길 찾기 HwpProject#5 통신망에서 길 찾기 Hwp
Project#5 통신망에서 길 찾기 HwpKimjeongmoo
 
Project#4 Syntax Of Languages Hwp
Project#4 Syntax Of Languages HwpProject#4 Syntax Of Languages Hwp
Project#4 Syntax Of Languages HwpKimjeongmoo
 
Project#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort HwpProject#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort HwpKimjeongmoo
 
Project#2 데이터베이스 시스템 Hwp
Project#2 데이터베이스 시스템 HwpProject#2 데이터베이스 시스템 Hwp
Project#2 데이터베이스 시스템 HwpKimjeongmoo
 
Project#1 지식 기반 시스템 Hwp
Project#1 지식 기반 시스템 HwpProject#1 지식 기반 시스템 Hwp
Project#1 지식 기반 시스템 HwpKimjeongmoo
 

More from Kimjeongmoo (11)

Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 Hwp
 
Project#4상호참조 생성기 Hwp
Project#4상호참조 생성기 HwpProject#4상호참조 생성기 Hwp
Project#4상호참조 생성기 Hwp
 
Project#3다항식의연산 Hwp
Project#3다항식의연산 HwpProject#3다항식의연산 Hwp
Project#3다항식의연산 Hwp
 
Project#1파스칼 삼각형
Project#1파스칼 삼각형Project#1파스칼 삼각형
Project#1파스칼 삼각형
 
Project#7 Group Codes Hwp
Project#7 Group Codes HwpProject#7 Group Codes Hwp
Project#7 Group Codes Hwp
 
Project#6 2 비트 덧셈기 Hwp
Project#6 2 비트 덧셈기 HwpProject#6 2 비트 덧셈기 Hwp
Project#6 2 비트 덧셈기 Hwp
 
Project#5 통신망에서 길 찾기 Hwp
Project#5 통신망에서 길 찾기 HwpProject#5 통신망에서 길 찾기 Hwp
Project#5 통신망에서 길 찾기 Hwp
 
Project#4 Syntax Of Languages Hwp
Project#4 Syntax Of Languages HwpProject#4 Syntax Of Languages Hwp
Project#4 Syntax Of Languages Hwp
 
Project#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort HwpProject#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort Hwp
 
Project#2 데이터베이스 시스템 Hwp
Project#2 데이터베이스 시스템 HwpProject#2 데이터베이스 시스템 Hwp
Project#2 데이터베이스 시스템 Hwp
 
Project#1 지식 기반 시스템 Hwp
Project#1 지식 기반 시스템 HwpProject#1 지식 기반 시스템 Hwp
Project#1 지식 기반 시스템 Hwp
 

Project#6 오탈자 검사 D0 Hwp

  • 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. 사용 가능한 사전 -알고리즘 계획 주어진 사전을 읽어드려 그 사전을 트리로 만들고 모든 노드에 널값을 넣고 입력받는 문자에 해당하는 노드에 카운트를 한다. 출력은 카운트된 값과 -소스 구현 -잘된 점 각자가 한번씩 소스에 대한 연구를 해 보았기 때문에 좀더 심도 깊은 회의가 될 수 있었다. -잘 못된 점 모두가 각자의 프로그램을 짜다가 가장 좋은 것을 선택 하기로 했다보니 완성된 소스가 나오지 않고 모두 다 부족한 소스가 나왔기에 최종적으로 완성을 하지 못 하였다.