문자열 검색 (1)[DevRookie] 꽝매니아
문자열 검색이란?왜 알아야 하는가?BrutalForce오토마타를 이용한 매칭카프-라빈 알고리즘정리???개요
탐색 알고리즘의 종류데이터 안에서 특정 패턴을 찾아내는 방법본문 : 검색 대상이 되는 문자열패턴 : 검색어Shift: 탐색위치를 옮기는 것문자열 검색이란?
검색 알고리즘의 공부다양한 활용분야게임개발에도 쓰인다대부분 만들어져 있는것을 잘 활용하는 것하지만 직접 만들어야 될 수도 있다.왜 알아야 하는가?
왜 알아야 하는가?
다양한 분야에서 쓰이는 응용 사례Search EngineData ParsingData Compress, Encoding/DecodingQueryText EditorLanguage Code비속어 필터링, 채팅창 명령, 커뮤니티 부분 활용 등작업 분야에 따라 그리 소용 없을지도… 왜 그럴까?문자열 비교는 정말 느리다! 다른 타입으로 비교하자!왜 알아야 하는가?
유치원(?)에서나 배울 것 같은 방법맨 처음 생각하게 되는 가장 단순한 방법본문(앞/뒤)에서 부터 순차적으로 패턴(앞/뒤)를 검사하는 방식BrutalForce (Naïve Search)
BrutalForce
BrutalForce
문제 해결 절차를 상태간의 이동(전이)로 나타낸 것.오토마타를 활용한 검색
오토마타를 활용한 검색
오토마타를 활용한 검색
목표 상태가 굳이 하나일 필요가 없다.즉, 검색 과정에서 중간 결과를 도출 할 수도 있다.입력 문자 타입이 많으면 공간을 많이 차지하므로 좋지 않다.O(n) 의 복잡도를 보여준다.테이블을 미리 만드는 작업에 대한 복잡도 고려 필요오토마타를 활용한 검색
증분 검색이란?사용자가 글자를 입력하는 중에 계속적으로 해당 내용을 찾아주는 기능.오토마타를 활용한 검색을 이용해 볼 수 있는 방법.Visual Studio 에서는 CTRL + I, CTRL + SHIFT + ICTRL + 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 algorithmSearch with an automaton KarpRabinalgorithmShift Or algorithmMorrisPrattalgorithmKnuthMorrisPrattalgorithmimon algorithmolussialgorithm alilGiancarloalgorithmApostolicoCrochemore algorithm Not So Naive algorithm Forward Dawg Matching algorithm BoyerMoorealgorithmTurboBM algorithm ApostolicoGiancarloalgorithmReverse ColussialgorithmHorspool algorithmQuick Search algorithmTuned BoyerMoorealgorithmZhuTakaokaalgorithmBerryRavindran algorithm Smith algorithmRaitaalgorithmReverse Factor algorithmTurbo Reverse Factor algorithmBackward Oracle Matching algorithm GalilSeiferasalgorithmTwo Way algorithmString Matching on Ordered Alphabets Optimal Mismatch algorithm Maximal Shift algorithmSkip Search algorithmKmpSkip Search algorithm Alpha Skip Search algorithm (참고1) 문자열 알고리즘 종류
정형데이터색인기법- 역파일- 접미사트리와접미사배열- 요약파일비정형데이터색인및검색기법 - 공간접근방법 - 다차원색인방법 - R-트리 - 순차탐색 - GEMINI(참고2)정형/비정형 색인

문자열 검색 (1)

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