SlideShare ist ein Scribd-Unternehmen logo
1 von 12
Downloaden Sie, um offline zu lesen
자료구조 01



Project #6

          오탈자 검사




                   소속 : C1

               조장 : 김종진

               조원 : 김무경
김정훈

                                박태원

                                고충욱

1. 개인별 업무

이 름             업 무


김종진      보고서 작성 및 전반적인 내용 숙지




김무경         프로젝트에 필요한 자료조사




김정훈            알고리즘 조사




박태훈     알고리즘을 기반으로 소스 구현 및 코딩




고충욱         프로젝트에 필요한 자료조사
2. 일정

  6 월 12 일                                  업무분담 및 문제파악




  6 월 14 일                            조사내용 정리 및 이해, 초안 작성




  6 월 19 일                    문제점 파악 및 해결방안 모색 및 프로그램 코딩




                                   과제수행일지
소 속                                              C1 조

과제수행
                                                        14일              16       시간
 기간
                                              주 제
연구제목 오탈자 검사
       검색했을 때 단어를 찾아주는 검색 알고리즘, 오탈자 검사를 하여 비슷한 단어를
연구배경
       찾아주는 알고리즘을 만듬.


                                           참 고 자 료
 참고
       C 로 쓴 자료구조론            (저자 : 이석호 ) - 교보문고
 서적

       http://www.clear.rice.edu/comp130/12spring/editdist/ : 알고리즘 설명

       http://jzcafe.blogspot.kr/2012/05/levenshtein-
 참고
       distance.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+blogspot
 URL
       /OyMV+(Full+of+Aroma+%26+Bouquet : 작동원리설명

       http://blog.naver.com/skout123?Redirect=Log&logNo=50136214727 : 순차 검색
http://blog.naver.com/skout123?Redirect=Log&logNo=50136236029 : 이진 검색

       http://bllackperl.tistory.com/70 : 해시 테이블


                                       과제의 수행

첫째날                       2012년                6월          12일                 화요일

 회의
                                         역할분담 및 토의
 주제

       조장 : 김종진

       자료 조사 : 김무경, 고충욱
 회의
       프로그래밍 : 김정훈, 김정훈

 내용    역할분담, 일정 정함.

       사전을 자료구조화 시키는것, 오탈자 검사를 어떻게 할 것인지에 대해 토의.

       edit distance 및 사전을 자료구조화 시키는 방법에 대해 조사해오기로 함.

       사전에 미리 조사해오지 못한 탓에 edit distance 에 대한 지식이 부족했고, 문제에 대한

 반성    파악이 늦었습니다.

       사전을 자료구조화 시키는 방법과 오탈자를 검사하는 방법 등을 알아오기로 하였습니다.
둘째날                       2012년                6월          14일                 목요일

회의주제                                    사전 검색 알고리즘

       사전 검색 알고리즘으로 찾아봤고, 순차 검색과 이진 검색이 있었으나 이는 우리가

       구현하려는 트리를 사용한 사전 검색 및 오탈자 검색에는 맞지 않는다고 판단하여

회의내용 사용하지 않았습니다. 이 외에 어떤 방법이 있을지 토의하고, 찾아보았습니다.

       또한 edit distance 에 대해 찾아보았으며 어떤 것인지 파악하고, 맞는 알고리즘을

       찾아보기로 하였습니다.

       오탈자를 검사할 때 단어를 하나하나 찾아보는게 비효율적이라는건 알고 있었으나 그
       외에 틀린부분을 건너 뛰거나 하는 방법으로 찾을 경우 다른 단어를 찾았을 때보다 eidt
 반성
       distance 가 작은 더 근접한 단어가 나올 경우도 있어서 이 모든 것을 대처해서
       알고리즘을 짜기에는 힘들었습니다.
셋째날                       2012년                6월          19일                 화요일

회의주제                              프로그램 초안 확인, 개량안 제시
#include <stdio.h>

        #include <string.h>

        #include <stdlib.h>

        void initMatrix(int ***matrix, int sLen, int tLen); // 이차원 동적 메모리 할당

        void LD(int **matrix, char *s, char *t); // LD 알고리즘 계산

        int minimum(int insert, int replace, int del); // 중간값을 리턴

        void printMatrix(int **matrix, char *s, char *t); // 결과 출력

        void freeMatrix(int **matrix, int tLen); // 동적 메모리 할당 해제

        int main(void) {

        char s[20], t[20];

        int sLen, tLen, count, i;

프로그램 int **matrix = NULL;

 초안     printf("반복 횟수를 입력하세요 : "); // 계산 횟수

        scanf("%d", &count);

        getchar();

        printf("n");

        for(i = 0; i < count; i++) {

        printf("첫번째 문자열을 입력 하세요 : "); // 비교문자열 s 입력

        gets(s);

        printf("두번째 문자열을 입력 하세요 : "); // 비교문자열 t 입력

        gets(t);

        printf("n");

        sLen = strlen(s) + 1;

        tLen = strlen(t) + 1;
initMatrix(&matrix, sLen, tLen); // 배열 초기화

LD(matrix, s, t); // 배열 계산

printMatrix(matrix, s, t); // 배열 출력

freeMatrix(matrix, tLen); // 메모리 초기화

}

return 0;

}

void initMatrix(int ***matrix, int sLen, int tLen) { // 이차원 동적 메모리 할당

int i;

*matrix = (int**)malloc(sizeof(int*) * tLen);

if(*matrix == NULL) {

printf("메모리 할당 실패n 프로그램을 종료 합니다.n");

exit(-1);

}

memset(*matrix, 0, sizeof(int*) * tLen); // 초기화

for(i = 0; i < tLen; i++) {

(*matrix)[i] = (int*)malloc(sizeof(int) * sLen);

if(*matrix == NULL) {

printf("메모리 할당 실패n 프로그램을 종료 합니다.n");

exit(-1);

}

memset((*matrix)[i], 0, sizeof(int) * sLen); // 초기화

}

}
void LD(int **matrix, char *s, char *t) {

int sLen, tLen;

int i, j;

sLen = strlen(s) + 1;

tLen = strlen(t) + 1;

for(i = 0; i < tLen; i++) matrix[i][0] = i; // col 기본 초기화

for(i = 0; i < sLen; i++) matrix[0][i] = i; // row 기본 초기화

for(j = 1; j < sLen; j++) {

for(i = 1; i < tLen; i++) {

if(s[j-1] == t[i-1]) // s, t 의 문자가 같으면

matrix[i][j] = matrix[i-1][j-1]; // 대각선에 있는 값을 그대로 가져옴

else // 그렇지 않으면

matrix[i][j] = minimum(matrix[i-1][j]+1, matrix[i-1][j-1]+2, matrix[i][j-1]+1);

// 삭제, 대치, 삽입의 값중에 중간값 대입

}

}

}

int minimum(int insert, int replace, int del) { // 중간값을 리턴

int min;

min = insert;

if(replace <= min) min = replace;

if(del <= min) min = del;

return min;

}
void printMatrix(int **matrix, char *s, char *t) { // 결과물 출력

int sLen, tLen;

int i, j;

sLen = strlen(s) + 1;

tLen = strlen(t) + 1;

printf(" - ");

for(i = 0; i < sLen; i++)

printf("%c ", s[i]);

printf("n ┌");

for(i = 0; i < sLen; i++) printf("──");

printf("n");

printf("-│ ");

for(i = 0; i < tLen; i++) {

if(i > 0) printf("%c│ ", t[i-1]);

for(j = 0; j < sLen; j++)

printf("%2d ", matrix[i][j]);

printf("n");

}

printf("nn");

printf(" Distance : %d", matrix[tLen-1][sLen-1]);

printf("nn");

}

void freeMatrix(int **matrix, int tLen) { // 동적 메모리 할당 해제

int i;
for(i = 0; i < tLen; i++)

       free(matrix[i]);

       free(matrix);

       }

       eidt distance 외에도 Levenshtein Distance 라는 것을 찾아 이를 프로그램에 적용해
회의내용
       보려고 하였습니다.

       ● 사전 파일을 불러와서 자료구조화 시키지 못함

문제점
       ●    과제로 출제된                   기능을 실행하지             못함(두     단어를       입력받아   얼마만큼의   차이가
       발생하는지 출력)

                                                 결과 발표

       #include <stdio.h>

       #include <string.h>

       #include <stdlib.h>

       void initMatrix(int ***matrix, int sLen, int tLen); // 이차원 동적 메모리 할당

       void LD(int **matrix, char *s, char *t); // LD 알고리즘 계산

       int minimum(int insert, int replace, int del); // 중간값을 리턴

       void printMatrix(int **matrix, char *s, char *t); // 결과 출력

       void freeMatrix(int **matrix, int tLen); // 동적 메모리 할당 해제

       int main(void) {
프로그램
       char s[20], t[20];

 소스    int sLen, tLen, count, i;

       int **matrix = NULL;

       printf("반복 횟수를 입력하세요 : "); // 계산 횟수

       scanf("%d", &count);

       getchar();

       printf("n");

       for(i = 0; i < count; i++) {

       printf("첫번째 문자열을 입력 하세요 : "); // 비교문자열 s 입력

       gets(s);

       printf("두번째 문자열을 입력 하세요 : "); // 비교문자열 t 입력
gets(t);

printf("n");

sLen = strlen(s) + 1;

tLen = strlen(t) + 1;

initMatrix(&matrix, sLen, tLen); // 배열 초기화

LD(matrix, s, t); // 배열 계산

printMatrix(matrix, s, t); // 배열 출력

freeMatrix(matrix, tLen); // 메모리 초기화

}

return 0;

}

void initMatrix(int ***matrix, int sLen, int tLen) { // 이차원 동적 메모리 할당

int i;

*matrix = (int**)malloc(sizeof(int*) * tLen);

if(*matrix == NULL) {

printf("메모리 할당 실패n 프로그램을 종료 합니다.n");

exit(-1);

}

memset(*matrix, 0, sizeof(int*) * tLen); // 초기화

for(i = 0; i < tLen; i++) {

(*matrix)[i] = (int*)malloc(sizeof(int) * sLen);

if(*matrix == NULL) {

printf("메모리 할당 실패n 프로그램을 종료 합니다.n");

exit(-1);

}

memset((*matrix)[i], 0, sizeof(int) * sLen); // 초기화

}

}

void LD(int **matrix, char *s, char *t) {

int sLen, tLen;

int i, j;

sLen = strlen(s) + 1;

tLen = strlen(t) + 1;

for(i = 0; i < tLen; i++) matrix[i][0] = i; // col 기본 초기화

for(i = 0; i < sLen; i++) matrix[0][i] = i; // row 기본 초기화
for(j = 1; j < sLen; j++) {

for(i = 1; i < tLen; i++) {

if(s[j-1] == t[i-1]) // s, t 의 문자가 같으면

matrix[i][j] = matrix[i-1][j-1]; // 대각선에 있는 값을 그대로 가져옴

else // 그렇지 않으면

matrix[i][j] = minimum(matrix[i-1][j]+1, matrix[i-1][j-1]+2, matrix[i][j-1]+1);

// 삭제, 대치, 삽입의 값중에 중간값 대입

}

}

}

int minimum(int insert, int replace, int del) { // 중간값을 리턴

int min;

min = insert;

if(replace <= min) min = replace;

if(del <= min) min = del;

return min;

}

void printMatrix(int **matrix, char *s, char *t) { // 결과물 출력

int sLen, tLen;

int i, j;

sLen = strlen(s) + 1;

tLen = strlen(t) + 1;

printf(" - ");

for(i = 0; i < sLen; i++)

printf("%c ", s[i]);

printf("n ┌");

for(i = 0; i < sLen; i++) printf("──");

printf("n");

printf("-│ ");

for(i = 0; i < tLen; i++) {

if(i > 0) printf("%c│ ", t[i-1]);

for(j = 0; j < sLen; j++)

printf("%2d ", matrix[i][j]);

printf("n");

}
printf("nn");

       printf(" Distance : %d", matrix[tLen-1][sLen-1]);

       printf("nn");

       }

       void freeMatrix(int **matrix, int tLen) { // 동적 메모리 할당 해제

       int i;

       for(i = 0; i < tLen; i++)

       free(matrix[i]);

       free(matrix);

       }

                edit distance 를 비교할 두 단어를 입력받아 이차원 배열의 행렬에 대응시킨다.
                                                           ↓

                                          각 행렬에 위치하는 문자를 비교한다.
                                                           ↓ ↓
알고리즘
           비교한 문자가 서로 같을 경우, 해당하는                              비교한 문자가 서로 다를 경우, 해당하는
 개요
           행렬의 왼쪽, 위, 왼쪽 위 대각선에 위치한 행렬의 왼쪽, 위, 왼쪽 위 대각선에 위치한
           거리값 중 제일 작은 수에 1 을 더한 수가                              거리값 중 제일 작은 수를 해당 행렬에
                    해당 행렬에 들어가게 된다.                                     입력한다.
                                                           ↓

                                   배열이 가득 찰 때까지 위의 두 과정을 반복한다.
 최종    사전 파일을 불러와서 자료구조화 시키지 못하였으며 Edit distance 의 알고리즘만

 반성    구현하였음.

Weitere ähnliche Inhalte

Was ist angesagt?

2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)pchmago
 
Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Yong Joon Moon
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Yong Joon Moon
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summaryHoChul Shin
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
2012 Ds A1 05
2012 Ds A1 052012 Ds A1 05
2012 Ds A1 05seonhyung
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409Yong Joon Moon
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기 Yong Joon Moon
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304Yong Joon Moon
 
Python Sympy 모듈 이해하기
Python Sympy 모듈 이해하기Python Sympy 모듈 이해하기
Python Sympy 모듈 이해하기Yong Joon Moon
 
파이썬 기초
파이썬 기초 파이썬 기초
파이썬 기초 Yong Joon Moon
 
파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기Yong Joon Moon
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기Yong Joon Moon
 
자료구조 트리 보고서
자료구조 트리 보고서자료구조 트리 보고서
자료구조 트리 보고서mil23
 
python 수학이해하기
python 수학이해하기python 수학이해하기
python 수학이해하기Yong Joon Moon
 
Python+numpy pandas 1편
Python+numpy pandas 1편Python+numpy pandas 1편
Python+numpy pandas 1편Yong Joon Moon
 

Was ist angesagt? (18)

2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)
 
Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Python array.array 모듈 이해하기
Python array.array 모듈 이해하기
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summary
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
2012 Ds A1 05
2012 Ds A1 052012 Ds A1 05
2012 Ds A1 05
 
파이썬 심화
파이썬 심화파이썬 심화
파이썬 심화
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기
 
자구2번
자구2번자구2번
자구2번
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
Python Sympy 모듈 이해하기
Python Sympy 모듈 이해하기Python Sympy 모듈 이해하기
Python Sympy 모듈 이해하기
 
파이썬 기초
파이썬 기초 파이썬 기초
파이썬 기초
 
파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기
 
자료구조 트리 보고서
자료구조 트리 보고서자료구조 트리 보고서
자료구조 트리 보고서
 
python 수학이해하기
python 수학이해하기python 수학이해하기
python 수학이해하기
 
Python+numpy pandas 1편
Python+numpy pandas 1편Python+numpy pandas 1편
Python+numpy pandas 1편
 

Andere mochten auch

Story board
Story boardStory board
Story board10ggo
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7KoChungWook
 
자료구조 Project1
자료구조 Project1자료구조 Project1
자료구조 Project1KoChungWook
 
Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivasJOSEYENIBORGES
 
이산치수학 Project2
이산치수학 Project2이산치수학 Project2
이산치수학 Project2KoChungWook
 
Geometry Unit Slideshow
Geometry Unit SlideshowGeometry Unit Slideshow
Geometry Unit Slideshowmrsfrasure
 
数学之美与浪潮之巅
数学之美与浪潮之巅数学之美与浪潮之巅
数学之美与浪潮之巅wangqunbaidu
 
Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)Jane Frankland
 
이산치수학 Project3
이산치수학 Project3이산치수학 Project3
이산치수학 Project3KoChungWook
 
"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentation"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentationdogtipper
 
이산치수학 Project5
이산치수학 Project5이산치수학 Project5
이산치수학 Project5KoChungWook
 
Social Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time TalkSocial Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time TalkJane Frankland
 
Presentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuisPresentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuisrenskepat
 
Activitat 11
Activitat 11Activitat 11
Activitat 11jgalan33
 
Activitat 11
Activitat 11Activitat 11
Activitat 11jgalan33
 
Activitat 11
Activitat 11Activitat 11
Activitat 11jgalan33
 
Equations & Expressions Sub Unit B
Equations & Expressions Sub Unit BEquations & Expressions Sub Unit B
Equations & Expressions Sub Unit Bmrsfrasure
 
자료구조 Project4
자료구조 Project4자료구조 Project4
자료구조 Project4KoChungWook
 

Andere mochten auch (20)

Story board
Story boardStory board
Story board
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7
 
자료구조 Project1
자료구조 Project1자료구조 Project1
자료구조 Project1
 
Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivas
 
이산치수학 Project2
이산치수학 Project2이산치수학 Project2
이산치수학 Project2
 
Geometry Unit Slideshow
Geometry Unit SlideshowGeometry Unit Slideshow
Geometry Unit Slideshow
 
数学之美与浪潮之巅
数学之美与浪潮之巅数学之美与浪潮之巅
数学之美与浪潮之巅
 
Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)
 
이산치수학 Project3
이산치수학 Project3이산치수학 Project3
이산치수학 Project3
 
"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentation"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentation
 
이산치수학 Project5
이산치수학 Project5이산치수학 Project5
이산치수학 Project5
 
Social Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time TalkSocial Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time Talk
 
Presentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuisPresentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuis
 
Budget 2013
Budget 2013Budget 2013
Budget 2013
 
Klik today
Klik todayKlik today
Klik today
 
Activitat 11
Activitat 11Activitat 11
Activitat 11
 
Activitat 11
Activitat 11Activitat 11
Activitat 11
 
Activitat 11
Activitat 11Activitat 11
Activitat 11
 
Equations & Expressions Sub Unit B
Equations & Expressions Sub Unit BEquations & Expressions Sub Unit B
Equations & Expressions Sub Unit B
 
자료구조 Project4
자료구조 Project4자료구조 Project4
자료구조 Project4
 

Ähnlich wie 자료구조 Project6

2012 Ds B1 01
2012 Ds B1 012012 Ds B1 01
2012 Ds B1 01seonhyung
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdfkd19h
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdfjinwookhong
 
이산치 과제7
이산치 과제7이산치 과제7
이산치 과제7mil23
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1kim HYUNG JIN
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2KoChungWook
 
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
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdfkd19h
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02chl132435
 
자료구조 Project5
자료구조 Project5자료구조 Project5
자료구조 Project5KoChungWook
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서KimChangHoen
 
Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpKimjeongmoo
 

Ähnlich wie 자료구조 Project6 (20)

2012 Ds B1 01
2012 Ds B1 012012 Ds B1 01
2012 Ds B1 01
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf
 
이산치 과제7
이산치 과제7이산치 과제7
이산치 과제7
 
이산치5번
이산치5번이산치5번
이산치5번
 
2012 Dm 07
2012 Dm 072012 Dm 07
2012 Dm 07
 
자료구조02
자료구조02자료구조02
자료구조02
 
C review
C  reviewC  review
C review
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2
 
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
 
3콤비네이션
3콤비네이션3콤비네이션
3콤비네이션
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02
 
2012 Ds 01
2012 Ds 012012 Ds 01
2012 Ds 01
 
자료구조 Project5
자료구조 Project5자료구조 Project5
자료구조 Project5
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서
 
Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 Hwp
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 

자료구조 Project6

  • 1. 자료구조 01 Project #6 오탈자 검사 소속 : C1 조장 : 김종진 조원 : 김무경
  • 2. 김정훈 박태원 고충욱 1. 개인별 업무 이 름 업 무 김종진 보고서 작성 및 전반적인 내용 숙지 김무경 프로젝트에 필요한 자료조사 김정훈 알고리즘 조사 박태훈 알고리즘을 기반으로 소스 구현 및 코딩 고충욱 프로젝트에 필요한 자료조사
  • 3. 2. 일정 6 월 12 일 업무분담 및 문제파악 6 월 14 일 조사내용 정리 및 이해, 초안 작성 6 월 19 일 문제점 파악 및 해결방안 모색 및 프로그램 코딩 과제수행일지 소 속 C1 조 과제수행 14일 16 시간 기간 주 제 연구제목 오탈자 검사 검색했을 때 단어를 찾아주는 검색 알고리즘, 오탈자 검사를 하여 비슷한 단어를 연구배경 찾아주는 알고리즘을 만듬. 참 고 자 료 참고 C 로 쓴 자료구조론 (저자 : 이석호 ) - 교보문고 서적 http://www.clear.rice.edu/comp130/12spring/editdist/ : 알고리즘 설명 http://jzcafe.blogspot.kr/2012/05/levenshtein- 참고 distance.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+blogspot URL /OyMV+(Full+of+Aroma+%26+Bouquet : 작동원리설명 http://blog.naver.com/skout123?Redirect=Log&logNo=50136214727 : 순차 검색
  • 4. http://blog.naver.com/skout123?Redirect=Log&logNo=50136236029 : 이진 검색 http://bllackperl.tistory.com/70 : 해시 테이블 과제의 수행 첫째날 2012년 6월 12일 화요일 회의 역할분담 및 토의 주제 조장 : 김종진 자료 조사 : 김무경, 고충욱 회의 프로그래밍 : 김정훈, 김정훈 내용 역할분담, 일정 정함. 사전을 자료구조화 시키는것, 오탈자 검사를 어떻게 할 것인지에 대해 토의. edit distance 및 사전을 자료구조화 시키는 방법에 대해 조사해오기로 함. 사전에 미리 조사해오지 못한 탓에 edit distance 에 대한 지식이 부족했고, 문제에 대한 반성 파악이 늦었습니다. 사전을 자료구조화 시키는 방법과 오탈자를 검사하는 방법 등을 알아오기로 하였습니다. 둘째날 2012년 6월 14일 목요일 회의주제 사전 검색 알고리즘 사전 검색 알고리즘으로 찾아봤고, 순차 검색과 이진 검색이 있었으나 이는 우리가 구현하려는 트리를 사용한 사전 검색 및 오탈자 검색에는 맞지 않는다고 판단하여 회의내용 사용하지 않았습니다. 이 외에 어떤 방법이 있을지 토의하고, 찾아보았습니다. 또한 edit distance 에 대해 찾아보았으며 어떤 것인지 파악하고, 맞는 알고리즘을 찾아보기로 하였습니다. 오탈자를 검사할 때 단어를 하나하나 찾아보는게 비효율적이라는건 알고 있었으나 그 외에 틀린부분을 건너 뛰거나 하는 방법으로 찾을 경우 다른 단어를 찾았을 때보다 eidt 반성 distance 가 작은 더 근접한 단어가 나올 경우도 있어서 이 모든 것을 대처해서 알고리즘을 짜기에는 힘들었습니다. 셋째날 2012년 6월 19일 화요일 회의주제 프로그램 초안 확인, 개량안 제시
  • 5. #include <stdio.h> #include <string.h> #include <stdlib.h> void initMatrix(int ***matrix, int sLen, int tLen); // 이차원 동적 메모리 할당 void LD(int **matrix, char *s, char *t); // LD 알고리즘 계산 int minimum(int insert, int replace, int del); // 중간값을 리턴 void printMatrix(int **matrix, char *s, char *t); // 결과 출력 void freeMatrix(int **matrix, int tLen); // 동적 메모리 할당 해제 int main(void) { char s[20], t[20]; int sLen, tLen, count, i; 프로그램 int **matrix = NULL; 초안 printf("반복 횟수를 입력하세요 : "); // 계산 횟수 scanf("%d", &count); getchar(); printf("n"); for(i = 0; i < count; i++) { printf("첫번째 문자열을 입력 하세요 : "); // 비교문자열 s 입력 gets(s); printf("두번째 문자열을 입력 하세요 : "); // 비교문자열 t 입력 gets(t); printf("n"); sLen = strlen(s) + 1; tLen = strlen(t) + 1;
  • 6. initMatrix(&matrix, sLen, tLen); // 배열 초기화 LD(matrix, s, t); // 배열 계산 printMatrix(matrix, s, t); // 배열 출력 freeMatrix(matrix, tLen); // 메모리 초기화 } return 0; } void initMatrix(int ***matrix, int sLen, int tLen) { // 이차원 동적 메모리 할당 int i; *matrix = (int**)malloc(sizeof(int*) * tLen); if(*matrix == NULL) { printf("메모리 할당 실패n 프로그램을 종료 합니다.n"); exit(-1); } memset(*matrix, 0, sizeof(int*) * tLen); // 초기화 for(i = 0; i < tLen; i++) { (*matrix)[i] = (int*)malloc(sizeof(int) * sLen); if(*matrix == NULL) { printf("메모리 할당 실패n 프로그램을 종료 합니다.n"); exit(-1); } memset((*matrix)[i], 0, sizeof(int) * sLen); // 초기화 } }
  • 7. void LD(int **matrix, char *s, char *t) { int sLen, tLen; int i, j; sLen = strlen(s) + 1; tLen = strlen(t) + 1; for(i = 0; i < tLen; i++) matrix[i][0] = i; // col 기본 초기화 for(i = 0; i < sLen; i++) matrix[0][i] = i; // row 기본 초기화 for(j = 1; j < sLen; j++) { for(i = 1; i < tLen; i++) { if(s[j-1] == t[i-1]) // s, t 의 문자가 같으면 matrix[i][j] = matrix[i-1][j-1]; // 대각선에 있는 값을 그대로 가져옴 else // 그렇지 않으면 matrix[i][j] = minimum(matrix[i-1][j]+1, matrix[i-1][j-1]+2, matrix[i][j-1]+1); // 삭제, 대치, 삽입의 값중에 중간값 대입 } } } int minimum(int insert, int replace, int del) { // 중간값을 리턴 int min; min = insert; if(replace <= min) min = replace; if(del <= min) min = del; return min; }
  • 8. void printMatrix(int **matrix, char *s, char *t) { // 결과물 출력 int sLen, tLen; int i, j; sLen = strlen(s) + 1; tLen = strlen(t) + 1; printf(" - "); for(i = 0; i < sLen; i++) printf("%c ", s[i]); printf("n ┌"); for(i = 0; i < sLen; i++) printf("──"); printf("n"); printf("-│ "); for(i = 0; i < tLen; i++) { if(i > 0) printf("%c│ ", t[i-1]); for(j = 0; j < sLen; j++) printf("%2d ", matrix[i][j]); printf("n"); } printf("nn"); printf(" Distance : %d", matrix[tLen-1][sLen-1]); printf("nn"); } void freeMatrix(int **matrix, int tLen) { // 동적 메모리 할당 해제 int i;
  • 9. for(i = 0; i < tLen; i++) free(matrix[i]); free(matrix); } eidt distance 외에도 Levenshtein Distance 라는 것을 찾아 이를 프로그램에 적용해 회의내용 보려고 하였습니다. ● 사전 파일을 불러와서 자료구조화 시키지 못함 문제점 ● 과제로 출제된 기능을 실행하지 못함(두 단어를 입력받아 얼마만큼의 차이가 발생하는지 출력) 결과 발표 #include <stdio.h> #include <string.h> #include <stdlib.h> void initMatrix(int ***matrix, int sLen, int tLen); // 이차원 동적 메모리 할당 void LD(int **matrix, char *s, char *t); // LD 알고리즘 계산 int minimum(int insert, int replace, int del); // 중간값을 리턴 void printMatrix(int **matrix, char *s, char *t); // 결과 출력 void freeMatrix(int **matrix, int tLen); // 동적 메모리 할당 해제 int main(void) { 프로그램 char s[20], t[20]; 소스 int sLen, tLen, count, i; int **matrix = NULL; printf("반복 횟수를 입력하세요 : "); // 계산 횟수 scanf("%d", &count); getchar(); printf("n"); for(i = 0; i < count; i++) { printf("첫번째 문자열을 입력 하세요 : "); // 비교문자열 s 입력 gets(s); printf("두번째 문자열을 입력 하세요 : "); // 비교문자열 t 입력
  • 10. gets(t); printf("n"); sLen = strlen(s) + 1; tLen = strlen(t) + 1; initMatrix(&matrix, sLen, tLen); // 배열 초기화 LD(matrix, s, t); // 배열 계산 printMatrix(matrix, s, t); // 배열 출력 freeMatrix(matrix, tLen); // 메모리 초기화 } return 0; } void initMatrix(int ***matrix, int sLen, int tLen) { // 이차원 동적 메모리 할당 int i; *matrix = (int**)malloc(sizeof(int*) * tLen); if(*matrix == NULL) { printf("메모리 할당 실패n 프로그램을 종료 합니다.n"); exit(-1); } memset(*matrix, 0, sizeof(int*) * tLen); // 초기화 for(i = 0; i < tLen; i++) { (*matrix)[i] = (int*)malloc(sizeof(int) * sLen); if(*matrix == NULL) { printf("메모리 할당 실패n 프로그램을 종료 합니다.n"); exit(-1); } memset((*matrix)[i], 0, sizeof(int) * sLen); // 초기화 } } void LD(int **matrix, char *s, char *t) { int sLen, tLen; int i, j; sLen = strlen(s) + 1; tLen = strlen(t) + 1; for(i = 0; i < tLen; i++) matrix[i][0] = i; // col 기본 초기화 for(i = 0; i < sLen; i++) matrix[0][i] = i; // row 기본 초기화
  • 11. for(j = 1; j < sLen; j++) { for(i = 1; i < tLen; i++) { if(s[j-1] == t[i-1]) // s, t 의 문자가 같으면 matrix[i][j] = matrix[i-1][j-1]; // 대각선에 있는 값을 그대로 가져옴 else // 그렇지 않으면 matrix[i][j] = minimum(matrix[i-1][j]+1, matrix[i-1][j-1]+2, matrix[i][j-1]+1); // 삭제, 대치, 삽입의 값중에 중간값 대입 } } } int minimum(int insert, int replace, int del) { // 중간값을 리턴 int min; min = insert; if(replace <= min) min = replace; if(del <= min) min = del; return min; } void printMatrix(int **matrix, char *s, char *t) { // 결과물 출력 int sLen, tLen; int i, j; sLen = strlen(s) + 1; tLen = strlen(t) + 1; printf(" - "); for(i = 0; i < sLen; i++) printf("%c ", s[i]); printf("n ┌"); for(i = 0; i < sLen; i++) printf("──"); printf("n"); printf("-│ "); for(i = 0; i < tLen; i++) { if(i > 0) printf("%c│ ", t[i-1]); for(j = 0; j < sLen; j++) printf("%2d ", matrix[i][j]); printf("n"); }
  • 12. printf("nn"); printf(" Distance : %d", matrix[tLen-1][sLen-1]); printf("nn"); } void freeMatrix(int **matrix, int tLen) { // 동적 메모리 할당 해제 int i; for(i = 0; i < tLen; i++) free(matrix[i]); free(matrix); } edit distance 를 비교할 두 단어를 입력받아 이차원 배열의 행렬에 대응시킨다. ↓ 각 행렬에 위치하는 문자를 비교한다. ↓ ↓ 알고리즘 비교한 문자가 서로 같을 경우, 해당하는 비교한 문자가 서로 다를 경우, 해당하는 개요 행렬의 왼쪽, 위, 왼쪽 위 대각선에 위치한 행렬의 왼쪽, 위, 왼쪽 위 대각선에 위치한 거리값 중 제일 작은 수에 1 을 더한 수가 거리값 중 제일 작은 수를 해당 행렬에 해당 행렬에 들어가게 된다. 입력한다. ↓ 배열이 가득 찰 때까지 위의 두 과정을 반복한다. 최종 사전 파일을 불러와서 자료구조화 시키지 못하였으며 Edit distance 의 알고리즘만 반성 구현하였음.