문자열 검색 (1)
Upcoming SlideShare
Loading in...5
×
 

문자열 검색 (1)

on

  • 2,501 views

 

Statistics

Views

Total Views
2,501
Views on SlideShare
2,501
Embed Views
0

Actions

Likes
1
Downloads
12
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

문자열 검색 (1) 문자열 검색 (1) Presentation Transcript

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