문자열 검색 (1)<br />[DevRookie] 꽝매니아<br />
문자열 검색이란?<br />왜 알아야 하는가?<br />BrutalForce<br />오토마타를 이용한 매칭<br />카프-라빈 알고리즘<br />정리<br />???<br />개요<br />
탐색 알고리즘의 종류<br />데이터 안에서 특정 패턴을 찾아내는 방법<br />본문 : 검색 대상이 되는 문자열<br />패턴 : 검색어<br />Shift: 탐색위치를 옮기는 것<br />문자열 검색이란?<br />
검색 알고리즘의 공부<br />다양한 활용분야<br />게임개발에도 쓰인다<br />대부분 만들어져 있는것을 잘 활용하는 것<br />하지만 직접 만들어야 될 수도 있다.<br />왜 알아야 하는가?<br />
왜 알아야 하는가?<br />
다양한 분야에서 쓰이는 응용 사례<br />Search Engine<br />Data Parsing<br />Data Compress, Encoding/Decoding<br />Query<br />Text Editor<...
유치원(?)에서나 배울 것 같은 방법<br />맨 처음 생각하게 되는 가장 단순한 방법<br />본문(앞/뒤)에서 부터 순차적으로 패턴(앞/뒤)를 검사하는 방식<br />BrutalForce (Naïve Search)<...
BrutalForce<br />
BrutalForce<br />
문제 해결 절차를 상태간의 이동(전이)로 나타낸 것.<br />오토마타를 활용한 검색<br />
오토마타를 활용한 검색<br />
오토마타를 활용한 검색<br />
목표 상태가 굳이 하나일 필요가 없다.<br />즉, 검색 과정에서 중간 결과를 도출 할 수도 있다.<br />입력 문자 타입이 많으면 공간을 많이 차지하므로 좋지 않다.<br />O(n) 의 복잡도를 보여준다.<br ...
증분 검색이란?<br />사용자가 글자를 입력하는 중에 계속적으로 해당 내용을 찾아주는 기능.<br />오토마타를 활용한 검색을 이용해 볼 수 있는 방법.<br />Visual Studio 에서는 CTRL + I, CT...
라빈– 카프 알고리즘<br />수식이 왜이리 복잡해!<br />이 알고리즘은 HASH를 사용합니다.<br />
패턴 문자를 해쉬와 공식을 사용해서 숫자로 바꿔준다.<br />본문의 비교 문자열도 똑같은 공식으로 숫자로 바꿔준다.<br />숫자 대 숫자 비교를 하게 된다.<br />라빈– 카프 알고리즘<br />
패턴의 문자들을 이용해 수치화 한다.<br />예: Σ = {a, b, c, d, e}<br />• |Σ| = 5<br />• a, b, c, d, e를 각각 0, 1, 2, 3, 4에 대응시킨다<br />• 문자열 “...
라빈– 카프 알고리즘<br />의외로 숫자가 좀 큰듯?<br />
라빈– 카프 알고리즘<br />오버 플로우날듯!<br />뭘루여…ㅜㅜ<br />나누면 되지!<br />
라빈– 카프 알고리즘<br />입력되는 숫자의 진수를 <br />고려해서 <br />큰 소수로 나머지 연산 처리.<br />
라빈– 카프 알고리즘<br />패턴에 대한 수치화 값 계산할때<br />나머지 연산 하기도 전에 <br />계산 하다가 <br />오버 플로우 날수도 있겠네요…<br />패턴의 길이를 무작정 길게 쓸수는 없으니 글자 수...
라빈– 카프 알고리즘<br />이것은 해쉬비교일뿐! <br />해쉬는 충돌할 수 있어요!<br />해쉬값이 같아도 일치하는지 확인해야 됩니다.<br />
라빈– 카프 알고리즘<br />검색 위치 이동후에는 해당 자리수의 해쉬값에서 빠져나간 앞칸 값을 빼고 새로 추가된 해쉬값을 더해준다.<br />해당 공식을 매번 할 필요는 없다.<br />
이게 다일까요? 천만에요…<br />다음주 KMP, Boyer-Moore 를 기대하세요…<br />무식하게 검색한다. BrutalForce(Naïve)<br />검색 패턴의 해결 절차를 만든다. 오토마다.<br />해쉬...
문자열 알고리즘 종류를 간단히(?) 알고 싶다면…<br />(정형/비정형)검색, 색인을 알고 싶다면…<br />If (Iterator == here)<br />
Brute force algorithm<br />Search with an automaton <br />KarpRabinalgorithm<br />Shift Or algorithm<br />MorrisPrattalgor...
정형데이터색인기법<br />- 역파일<br />- 접미사트리와접미사배열<br />- 요약파일<br />비정형데이터색인및검색기법<br /> - 공간접근방법<br /> - 다차원색인방법<br /> - R-트리<b...
Upcoming SlideShare
Loading in …5
×

문자열 검색 (1)

3,516 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,516
On SlideShare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
22
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

문자열 검색 (1)

  1. 1. 문자열 검색 (1)<br />[DevRookie] 꽝매니아<br />
  2. 2. 문자열 검색이란?<br />왜 알아야 하는가?<br />BrutalForce<br />오토마타를 이용한 매칭<br />카프-라빈 알고리즘<br />정리<br />???<br />개요<br />
  3. 3. 탐색 알고리즘의 종류<br />데이터 안에서 특정 패턴을 찾아내는 방법<br />본문 : 검색 대상이 되는 문자열<br />패턴 : 검색어<br />Shift: 탐색위치를 옮기는 것<br />문자열 검색이란?<br />
  4. 4. 검색 알고리즘의 공부<br />다양한 활용분야<br />게임개발에도 쓰인다<br />대부분 만들어져 있는것을 잘 활용하는 것<br />하지만 직접 만들어야 될 수도 있다.<br />왜 알아야 하는가?<br />
  5. 5. 왜 알아야 하는가?<br />
  6. 6. 다양한 분야에서 쓰이는 응용 사례<br />Search Engine<br />Data Parsing<br />Data Compress, Encoding/Decoding<br />Query<br />Text Editor<br />Language Code<br />비속어 필터링, 채팅창 명령, 커뮤니티 부분 활용 등<br />작업 분야에 따라 그리 소용 없을지도… 왜 그럴까?<br />문자열 비교는 정말 느리다! 다른 타입으로 비교하자!<br />왜 알아야 하는가?<br />
  7. 7. 유치원(?)에서나 배울 것 같은 방법<br />맨 처음 생각하게 되는 가장 단순한 방법<br />본문(앞/뒤)에서 부터 순차적으로 패턴(앞/뒤)를 검사하는 방식<br />BrutalForce (Naïve Search)<br />
  8. 8. BrutalForce<br />
  9. 9. BrutalForce<br />
  10. 10. 문제 해결 절차를 상태간의 이동(전이)로 나타낸 것.<br />오토마타를 활용한 검색<br />
  11. 11. 오토마타를 활용한 검색<br />
  12. 12. 오토마타를 활용한 검색<br />
  13. 13. 목표 상태가 굳이 하나일 필요가 없다.<br />즉, 검색 과정에서 중간 결과를 도출 할 수도 있다.<br />입력 문자 타입이 많으면 공간을 많이 차지하므로 좋지 않다.<br />O(n) 의 복잡도를 보여준다.<br />테이블을 미리 만드는 작업에 대한 복잡도 고려 필요<br />오토마타를 활용한 검색<br />
  14. 14. 증분 검색이란?<br />사용자가 글자를 입력하는 중에 계속적으로 해당 내용을 찾아주는 기능.<br />오토마타를 활용한 검색을 이용해 볼 수 있는 방법.<br />Visual Studio 에서는 CTRL + I, CTRL + SHIFT + I<br />CTRL + F 보다 편하죠?<br />쉬어 갑니다.<br />
  15. 15. 라빈– 카프 알고리즘<br />수식이 왜이리 복잡해!<br />이 알고리즘은 HASH를 사용합니다.<br />
  16. 16. 패턴 문자를 해쉬와 공식을 사용해서 숫자로 바꿔준다.<br />본문의 비교 문자열도 똑같은 공식으로 숫자로 바꿔준다.<br />숫자 대 숫자 비교를 하게 된다.<br />라빈– 카프 알고리즘<br />
  17. 17. 패턴의 문자들을 이용해 수치화 한다.<br />예: Σ = {a, b, c, d, e}<br />• |Σ| = 5<br />• a, b, c, d, e를 각각 0, 1, 2, 3, 4에 대응시킨다<br />• 문자열 “cad”를 수치화하면 2*52+0*51+3*50 = 28<br />라빈– 카프 알고리즘<br />
  18. 18. 라빈– 카프 알고리즘<br />의외로 숫자가 좀 큰듯?<br />
  19. 19. 라빈– 카프 알고리즘<br />오버 플로우날듯!<br />뭘루여…ㅜㅜ<br />나누면 되지!<br />
  20. 20. 라빈– 카프 알고리즘<br />입력되는 숫자의 진수를 <br />고려해서 <br />큰 소수로 나머지 연산 처리.<br />
  21. 21. 라빈– 카프 알고리즘<br />패턴에 대한 수치화 값 계산할때<br />나머지 연산 하기도 전에 <br />계산 하다가 <br />오버 플로우 날수도 있겠네요…<br />패턴의 길이를 무작정 길게 쓸수는 없으니 글자 수를 꽤 짧게 <br />제한해야 겠네요…<br />
  22. 22. 라빈– 카프 알고리즘<br />이것은 해쉬비교일뿐! <br />해쉬는 충돌할 수 있어요!<br />해쉬값이 같아도 일치하는지 확인해야 됩니다.<br />
  23. 23. 라빈– 카프 알고리즘<br />검색 위치 이동후에는 해당 자리수의 해쉬값에서 빠져나간 앞칸 값을 빼고 새로 추가된 해쉬값을 더해준다.<br />해당 공식을 매번 할 필요는 없다.<br />
  24. 24. 이게 다일까요? 천만에요…<br />다음주 KMP, Boyer-Moore 를 기대하세요…<br />무식하게 검색한다. BrutalForce(Naïve)<br />검색 패턴의 해결 절차를 만든다. 오토마다.<br />해쉬를 이용해 수치비교 한다. 라빈-카프<br />정리<br />
  25. 25. 문자열 알고리즘 종류를 간단히(?) 알고 싶다면…<br />(정형/비정형)검색, 색인을 알고 싶다면…<br />If (Iterator == here)<br />
  26. 26. Brute force algorithm<br />Search with an automaton <br />KarpRabinalgorithm<br />Shift Or algorithm<br />MorrisPrattalgorithm<br />KnuthMorrisPrattalgorithm<br />imon algorithm<br />olussialgorithm <br />alilGiancarloalgorithm<br />ApostolicoCrochemore algorithm <br />Not So Naive algorithm <br />Forward Dawg Matching algorithm <br />BoyerMoorealgorithm<br />TurboBM algorithm <br />ApostolicoGiancarloalgorithm<br />Reverse Colussialgorithm<br />Horspool algorithm<br />Quick Search algorithm<br />Tuned BoyerMoorealgorithm<br />ZhuTakaokaalgorithm<br />BerryRavindran algorithm <br />Smith algorithm<br />Raitaalgorithm<br />Reverse Factor algorithm<br />Turbo Reverse Factor algorithm<br />Backward Oracle Matching algorithm <br />GalilSeiferasalgorithm<br />Two Way algorithm<br />String Matching on Ordered Alphabets <br />Optimal Mismatch algorithm <br />Maximal Shift algorithm<br />Skip Search algorithm<br />KmpSkip Search algorithm <br />Alpha Skip Search algorithm <br />(참고1) 문자열 알고리즘 종류<br />
  27. 27. 정형데이터색인기법<br />- 역파일<br />- 접미사트리와접미사배열<br />- 요약파일<br />비정형데이터색인및검색기법<br /> - 공간접근방법<br /> - 다차원색인방법<br /> - R-트리<br /> - 순차탐색<br /> - GEMINI<br />(참고2)정형/비정형 색인<br />

×