자료구조6보고서

580 views

Published on

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

  • Be the first to like this

No Downloads
Views
Total views
580
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

자료구조6보고서

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

×