KR100959244B1 - 계층화된 시프트 테이블을 이용한 고속의 문자열 패턴 탐지방법 - Google Patents

계층화된 시프트 테이블을 이용한 고속의 문자열 패턴 탐지방법 Download PDF

Info

Publication number
KR100959244B1
KR100959244B1 KR1020080075635A KR20080075635A KR100959244B1 KR 100959244 B1 KR100959244 B1 KR 100959244B1 KR 1020080075635 A KR1020080075635 A KR 1020080075635A KR 20080075635 A KR20080075635 A KR 20080075635A KR 100959244 B1 KR100959244 B1 KR 100959244B1
Authority
KR
South Korea
Prior art keywords
shift
patterns
text
value
pattern
Prior art date
Application number
KR1020080075635A
Other languages
English (en)
Other versions
KR20100013895A (ko
Inventor
최윤호
서승우
Original Assignee
재단법인서울대학교산학협력재단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 재단법인서울대학교산학협력재단 filed Critical 재단법인서울대학교산학협력재단
Priority to KR1020080075635A priority Critical patent/KR100959244B1/ko
Priority to PCT/KR2008/005598 priority patent/WO2010013863A1/en
Priority to US12/443,802 priority patent/US8108387B2/en
Publication of KR20100013895A publication Critical patent/KR20100013895A/ko
Application granted granted Critical
Publication of KR100959244B1 publication Critical patent/KR100959244B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/02Comparing digital values
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/02Indexing scheme relating to groups G06F7/02 - G06F7/026
    • G06F2207/025String search, i.e. pattern matching, e.g. find identical word or best match in a string

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 발명은 텍스트상에서의 문자열 패턴 탐지 방법에 관한 것으로서, 싱글 바이트(single-byte) 캐릭터 기반의 계층화된 시프트 테이블을 이용하여 텍스트상에서 이동 가능한 최대 길이만큼 검색 위치를 시프트함으로써 종래에 비해 패턴 탐지 속도를 향상시킬 수 있는 문자열 패턴 탐지 방법에 관한 것이다.
상기와 같은 본 발명의 목적을 달성하기 위한 소정의 텍스트에 N 개의 패턴 중 하나 이상의 패턴이 존재하는지 여부를 탐지하기 위한 방법은, (a) 상기 N 개의 패턴 각각의 문자열 길이를 계산하고, 그 중 가장 짧은 패턴의 길이를 LSP로 저장하는 단계; (b) 상기 텍스트에 포함될 수 있는 모든 1바이트 문자들을 인덱스(index)로 하는 B 개(B는 2 이상의 자연수)의 시프트(SHIFT) 테이블을 생성하고, 상기 B개의 시프트 테이블 각각에 대하여 각 인덱스에 대응하는 값(value)들을 LSP(Length of Shortest Pattern)로 초기화하는 단계; (c) 상기 텍스트에 포함될 수 있는 길이 B의 모든 문자열에 대한 각각의 해시값들을 인덱스로 하는 해시(HASH) 테이블 및, 상기 텍스트에 포함될 수 있는 길이 Bp(Bp는 2 이상의 자연수)의 모든 문자열에 대한 각각의 해시값들을 인덱스로 하는 프리픽스(PREFIX) 테이블을 생성하는 단계; (d) 상기 N 개의 패턴 중 어느 하나의 패턴을 선택하고, 상기 선택된 패턴의 가장 왼쪽 문자의 위치를 0 이라 할 때 왼쪽부터 0 에서 LSP - 1 위치까지의 문자열에 대하여, 상기 문자열의 가장 왼쪽부터 오른쪽으로 한 칸씩 이동 하면서 해당 위치에 존재하는 문자의 시프트 값을 계산하여 상기 B 개의 시프트 테이블의 값을 업데이트하는 단계; (e) 상기 (d) 단계에서 선택된 패턴에 대하여, 상기 선택된 패턴의 왼쪽부터 LSP - B 에서 LSP - 1 위치까지의 문자열에 대한 해시값들을 인덱스 값으로 하는 상기 해시(HASH) 테이블의 값(value)을 상기 선택된 패턴에 대한 포인터(pointer)로 저장하는 단계; (f) 상기 (d) 단계에서 선택된 패턴에 대하여, 상기 선택된 패턴의 왼쪽부터 0 에서 Bp - 1 위치까지의 문자열에 대한 해시값들을 인덱스 값으로 하는 상기 프리픽스(PREFIX) 테이블의 값(value)을 상기 선택된 패턴에 대한 포인터(pointer)로 저장하는 단계; (g) 상기 N 개의 패턴 모두에 대하여 상기 (c) 단계 내지 (f) 단계를 반복 수행하는 단계; (h) 상기 (g) 단계의 수행 이후, 상기 B 개의 시프트 테이블, 해시 테이블 및 프리픽스 테이블을 이용하여 상기 텍스트 내에 상기 N 개의 패턴 중 하나 이상의 패턴이 존재하는지 여부를 탐색하는 단계; 를 포함하여 구성된다.

Description

계층화된 시프트 테이블을 이용한 고속의 문자열 패턴 탐지 방법{High-speed string pattern matching method using layered SHIFT tables}
본 발명은 텍스트상에서의 문자열 패턴 탐지 방법에 관한 것으로서, 더욱 상세하게는 싱글 바이트(single-byte) 캐릭터 기반의 계층화된 시프트 테이블을 이용하여 텍스트상에서 이동 가능한 최대 길이만큼 검색 위치를 시프트 함으로써 종래에 비해 패턴 탐지 속도를 향상시킬 수 있는 문자열 패턴 탐지 방법에 관한 것이다.
패턴 매칭 알고리즘(Pattern Matching Algorithm)이란, 소정의 텍스트에 찾고자 하는 특정 문자열 패턴이 존재하는지 여부를 탐지하기 위한 알고리즘을 의미한다. 이러한 패턴 매칭 알고리즘은 그 찾고자 하는 패턴의 개수에 따라 싱글 패턴 매칭 알고리즘과 멀티 패턴 매칭 알고리즘으로 구분된다.
종래 싱글 패턴 매칭 알고리즘으로 가장 잘 알려진 것은 보이어-무어(Boyer Moore) 알고리즘이다. 보이어-무어 알고리즘은 패턴의 개수가 하나일 경우에는 비교적 잘 작동하나, 패턴의 개수가 많아질수록 그 성능이 급격하게 저하되는 특징이 있어 멀티 패턴 매칭 알고리즘에는 적용하기 어려운 문제점이 있었다.
이를 극복하기 위하여 MWM (Modified Wu-Manber) 알고리즘이 제안되었다. 상기 MWM 알고리즘은 찾고자 하는 복수 개의 패턴 집합을 이용하여 시프트(SHIFT) 테이블, 해시(HASH) 테이블, 및 프리픽스(PREFIX) 테이블을 구성하는 전처리 과정을 수행하고 상기 테이블들을 이용하여 텍스트를 스캐닝하는 구성을 가진다. 이때 상기 시프트 테이블은 텍스트 탐색 과정에서 얼마나 많은 문자열을 건너 뛸 수 있는지를 정의하기 위해 사용되고, 해시 테이블과 프리픽스 테이블은 해당 블록의 시프트 값이 0일 때 패턴과의 일치 여부를 근사적으로 판단하기 위해 사용된다.
그러나 상기 MWM 알고리즘은 상기 패턴 집합에 속하는 패턴 중 그 길이가 가장 짧은 패턴의 길이에 따라 그 성능이 좌우되므로, 패턴 집합 내에 길이가 짧은 패턴이 포함되어 있는 경우 그 성능이 매우 낮아지는 문제점이 있었다.
이와 같은 MWM 알고리즘의 문제점을 개선하기 위하여 L+1 MWM 알고리즘이 제안되었다. 종래의 MWM 알고리즘이 항상 각 패턴의 처음 부분의 문자열을 이용하여 시프트 테이블과 해시 테이블을 구성하는 데 비해, L+1 MWM 알고리즘은 가장 짧은 패턴의 가장 왼쪽에 가상의 1바이트를 가정하고 LSP + 1 길이의 문자열을 이용하여 테이블을 구성한다.
그러나 상기 L+1 MWM 알고리즘 또한 패턴들의 처음 부분에 존재하는 문자열들의 종류가 다양할 경우, MWM 알고리즘에 비해 기대했던 만큼의 속도 향상 효과가 나타나지 않는 문제점이 있었다. 또한 상기 MWM 알고리즘 및 L+1 MWM 알고리즘 모두 멀티 바이트 캐릭터 기반의 시프트 테이블을 이용하는 구성으로써 싱글 바이트 캐릭터 기반의 시프트 테이블과 비교하여 볼 때 평균 시트트값이 작을 수 밖에 없는 근본적인 한계가 존재하였다.
본 발명은 상기와 같은 문제점을 해결하기 위한 것으로서, 본 발명의 목적은 싱글 바이트(single-byte) 캐릭터 기반의 계층화된 시프트 테이블을 이용하여 텍스트상에서 이동 가능한 최대 길이만큼 검색 위치를 시프트함으로써 종래에 비해 패턴 탐지 속도를 향상시킬 수 있는 문자열 패턴 탐지 방법을 제공하는 데 있다.
상기와 같은 본 발명의 목적을 달성하기 위한, 소정의 텍스트에 N 개(N은 2 이상의 자연수)의 패턴 중 하나 이상의 패턴이 존재하는지 여부를 탐지하기 위한 방법은, (a) 상기 N 개의 패턴 각각의 문자열 길이를 계산하고, 그 중 가장 짧은 패턴의 길이를 LSP(Length of Shortest Pattern)로 저장하는 단계; (b) 상기 텍스트에 포함될 수 있는 모든 1바이트 문자들을 인덱스(index)로 하는 B 개(B는 2 이상의 자연수)의 시프트(SHIFT) 테이블을 생성하고, 상기 B개의 시프트 테이블 각각에 대하여 각 인덱스에 대응하는 값(value)들을 LSP로 초기화하는 단계; (c) 상기 텍스트에 포함될 수 있는 길이 B의 모든 문자열에 대한 각각의 해시값들을 인덱스로 하는 해시(HASH) 테이블 및, 상기 텍스트에 포함될 수 있는 길이 Bp(Bp는 2 이상의 자연수)의 모든 문자열에 대한 각각의 해시값들을 인덱스로 하는 프리픽스(PREFIX) 테이블을 생성하는 단계; (d) 상기 N 개의 패턴 중 어느 하나의 패턴을 선택하고, 상기 선택된 패턴의 가장 왼쪽 문자의 위치를 0 이라 할 때 왼쪽부터 0 에서 LSP - 1 위치까지의 문자열에 대하여, 상기 문자열의 가장 왼쪽부터 오른쪽으로 한 칸씩 이동하면서 해당 위치에 존재하는 문자의 시프트 값을 계산하여 상기 B 개의 시프트 테이블의 값을 업데이트하는 단계; (e) 상기 (d) 단계에서 선택된 패턴에 대하여, 상기 선택된 패턴의 왼쪽부터 LSP - B 에서 LSP - 1 위치까지의 문자열에 대한 해시값들을 인덱스 값으로 하는 상기 해시(HASH) 테이블의 값(value)을 상기 선택된 패턴에 대한 포인터(pointer)로 저장하는 단계; (f) 상기 (d) 단계에서 선택된 패턴에 대하여, 상기 선택된 패턴의 왼쪽부터 0 에서 Bp - 1 위치까지의 문자열에 대한 해시값들을 인덱스 값으로 하는 상기 프리픽스(PREFIX) 테이블의 값(value)을 상기 선택된 패턴에 대한 포인터(pointer)로 저장하는 단계; (g) 상기 N 개의 패턴 모두에 대하여 상기 (c) 단계 내지 (f) 단계를 반복 수행하는 단계; (h) 상기 (g) 단계의 수행 이후, 상기 B 개의 시프트 테이블, 해시 테이블 및 프리픽스 테이블을 이용하여 상기 텍스트 내에 상기 N 개의 패턴 중 하나 이상의 패턴이 존재하는지 여부를 탐색하는 단계; 를 포함하여 구성된다.
이때, 상기 B 개의 시프트 테이블 각각을 SHIFTLj 테이블(j는 0에서 B - 1 사이의 자연수)로 정의할 때, 상기 (d) 단계는, (d-1) 상기 선택된 패턴상의 위치(k1)를 0으로 설정하는 단계; (d-2) 상기 선택된 패턴에 대하여 상기 k1번째 위치에 해당하는 문자를 추출하는 단계; (d-3) 상기 추출된 문자를 인덱스로 하는 SHIFTLj 테이블의 값 LSP - 1 - k1 을 계산하는 단계; (d-4) 상기 (d-3) 단계에서 계산된 LSP - 1 - k1 값과 SHIFTLj 테이블의 현재값을 서로 비교하고, 이 중 작은 값을 상기 SHIFTLj 테이블의 해당 인덱스의 값으로 업데이트하는 단계; (d-5) 만약 상기 k1 값이 LSP - 1 - j 값과 동일한 경우, 상기 k1 위치에 해당하는 문자를 인덱스로 하는 상기 SHIFTLj 테이블의 값을 0 으로 설정하는 단계; (d-6) 상기 B 개의 시프트 테이블 모두에 대하여, 상기 (d-3) 단계 내지 (d-5) 단계를 반복 수행하는 단계; (d-7) 상기 k1 값을 LSP - 1 에 도달할 때까지 1씩 증가시키면서, 상기 (d-2) 내지 (d-6) 단계를 반복 수행하는 단계; 를 포함하여 구성되는 것이 바람직하다.
한편, 상기 (e) 단계에서 상기 포인터를 저장하고자 하는 상기 해시 테이블의 값에 기 저장된 포인터가 있을 경우, 기 저장된 포인터를 삭제하지 않고 상기 선택된 패턴에 대한 포인터를 리스트 형태로 추가 저장하는 것이 바람직하다.
또한, 기 (f) 단계에서 상기 포인터를 저장하고자 하는 상기 프리픽스 테이블의 값에 기 저장된 포인터가 있을 경우, 기 저장된 포인터를 삭제하지 않고 상기 선택된 패턴에 대한 포인터를 리스트 형태로 추가 저장하는 것이 바람직하다.
그리고, 상기 B 개의 시프트 테이블 각각을 SHIFTLj 테이블(j는 0에서 B - 1 사이의 자연수)로 정의할 때, 상기 (h) 단계는, (h-1) 상기 텍스트의 왼쪽에서 가장 첫 번째 위치를 0 이라 할 때, 펀치 포인터(Sc)를 상기 텍스트의 LSP - 1 위치로 설정하는 단계; (h-2) 상기 텍스트의 Sc 위치에 해당하는 문자에 대한 시프트 값 을 SHIFTL0 테이블로부터 추출하는 단계; (h-3) 상기 (h-2) 단계에서 추출된 시프트 값이 0인 경우, 상기 j 값을 1 부터 B - 1 까지 1씩 증가시키면서 상기 텍스트의 Sc - j 위치에 해당하는 문자에 대한 시프트 값을 SHIFTLj 테이블로부터 추출하는 단계; (h-4) 상기 (h-3) 단계에서 추출된 시프트 값들이 모두 0인 경우, 상기 텍스트의 Sc - B + 1부터 Sc 위치까지의 문자열에 대한 해시값을 인덱스 값으로 하는 패턴들을 상기 해시 테이블로부터 검출하는 단계; (h-5) 상기 (h-4) 단계에서 상기 해시 테이블로부터 패턴들이 검출된 경우, 상기 텍스트의 Sc - LSP + 1 부터 Sc - LSP + Bp 위치까지의 문자열에 대한 해시값을 인덱스 값으로 하는 패턴들을 상기 프리픽스 테이블로부터 검출하는 단계; (h-6) 상기 (h-5) 단계에서 상기 프리픽스 테이블로부터 패턴들이 검출된 경우, 상기 프리픽스 테이블로부터 검출된 패턴과 상기 해시 테이블로부터 검출된 패턴 중 일치하는 패턴들이 존재하는지 여부를 판단하는 단계; (h-7) 상기 (h-6) 단계에서의 판단 결과 일치하는 패턴들이 있는 경우, 상기 일치하는 패턴들과 상기 텍스트를 직접 비교하여 상기 패턴들이 실제로 상기 텍스트에 존재하는지 여부를 탐색하는 단계; (h-8) 상기 (h-7) 단계에서의 판단 결과 상기 텍스트와 직접 비교한 패턴들 중 하나라도 상기 텍스트와 일치하는 패턴이 존재하는 경우, 해당 패턴을 상기 텍스트에 존재하는 패턴으로 판단하는 단계; 를 포함하여 구성될 수 있다.
이때, 상기 (h-2) 단계에서 추출된 시프트 값이 0이 아닌 경우, 추출된 상 기 시프트 값 만큼 상기 Sc를 상기 텍스트의 오른쪽으로 이동하고, 이동된 상기 Sc를 기준으로 상기 (h-2) 단계 이하의 단계들을 수행하는 것이 바람직하다.
그리고, 상기 (h-3) 단계의 수행 도중 최초로 0이 아닌 시프트 값이 추출된 경우, 다음 수식을 이용하여 상기 Sc를 상기 텍스트의 오른쪽으로 이동하고, 이동된 상기 Sc를 기준으로 상기 (h-2) 단계 이하의 단계들을 수행하도록 구성될 수 있으며,
Sn = Sc + max (1, SHIFTL1[*(Sc - 1)] - 1, ... , SHIFTLi[*(Sc - i)] - i)
상기 수식에서, Sc 는 펀치 포인터, Sn 은 Sc의 다음 위치, *(Sc - i)는 텍스트상의 Sc - i 위치에 해당하는 문자(character), i는 최초로 0이 아닌 시프트 값이 추출된 j의 값을 의미한다.
또한, 상기 (h-4) 단계에서 상기 해시 테이블로부터 패턴들이 검출되지 않은 경우, 또는 상기 (h-5) 단계에서 상기 프리픽스 테이블로부터 패턴들이 검출되지 않은 경우, 또는 상기 (h-6) 단계에서 일치하는 패턴들이 없는 경우, 또는 상기 (h-7) 단계에서 직접 비교 결과 최종적으로 패턴들이 상기 텍스트와 불일치하는 것으로 판단되는 경우 중 어느 하나의 경우에 해당하는 경우, 상기 Sc를 상기 텍스트의 오른쪽으로 1 만큼 이동하고, 이동된 상기 Sc를 기준으로 상기 (h-2) 단계 이하 의 단계들을 수행하는 것이 바람직하다.
본 발명은 싱글 바이트(single-byte) 캐릭터 기반의 계층화된 시프트 테이블을 이용한 멀티 패턴 매칭 알고리즘을 제공함으로써, 종래의 패턴 매칭 알고리즘에 비해 고속으로 텍스트내 패턴의 존재 여부를 탐지할 수 있는 효과가 있다.
본 발명의 상기 목적과 기술적 구성 및 그에 따른 작용 효과에 관한 자세한 사항은 본 발명의 명세서에 첨부된 도면에 의거한 이하의 상세한 설명에 의하여 보다 명확하게 이해될 것이다.
본 발명의 설명에 앞서 본 발명과 관련된 공지 기능 또는 구성에 대한 구체적인 기술은 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략하기로 한다.
또한, 후술되는 용어들은 본 발명에서의 기능을 고려하여 정의된 용어들로서 이는 사용자 및 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 따라서 그러한 정의는 본 명세서 전반에 걸쳐 기재된 내용을 바탕으로 판단되어야 할 것이다.
본 발명에 따른 BLAST(B- LAyered bad-character SHIFT Tables) 알고리즘은 소정의 길이를 가진 텍스트(text) 내에서 특정 문자열 패턴(pattern)의 존재 여부를 탐지하기 위한 방법이다. 본 발명에 있어 탐지하고자 하는 상기 문자열 패턴은 하나가 아닌 복수 개(N 개)가 존재하며, 본 알고리즘을 따를 경우 상기 N 개의 패턴들 중 어떠한 패턴이 상기 텍스트 내에 포함되어 있는가를 탐지할 수 있다.
상기 BLAST 알고리즘은 프리프로세싱 단계와 스캐닝 단계의 두 과정으로 이루어지며, 이하에서는 각 단계별로 상세한 알고리즘의 흐름을 설명하기로 한다.
먼저, 본 알고리즘에 대한 설명에 앞서 본 발명의 설명에 사용되는 용어들의 정의를 기재하면 다음과 같다.
- 텍스트(text): 패턴의 존재 여부를 검출하기 위한 대상 문자열
- 패턴(pattern): 텍스트 내에서 찾고자 하는 문자열
- N: 패턴의 갯수
- P: 패턴의 집합(그룹)
- LSP: 상기 N 개의 패턴 중 가장 짧은 패턴의 길이(Length of Shortest pattern)
1. 프리프로세싱 단계(Preprocessing Stage)
프리프로세싱 단계는 상기 N 개의 패턴을 이용하여 시프트(SHIFT) 테이블, 해시(HASH) 테이블, 및 프리픽스(PREFIX) 테이블을 생성하는 단계이다.
상기 시프트 테이블, 해시 테이블 및 프리픽스 테이블은 종래의 패턴 탐지 알고리즘인 MWM (Modified Wu-Manber) 알고리즘에서 유래한 것이다. 시프트 테이블은 텍스트의 탐색 과정에서 얼마나 많은 문자열을 무시하고 건너뛸 수 있는지(bad-character shift)를 정의하기 위하여 사용되고, 해시 테이블 및 프리픽스 테이블은 상기 시프트 테이블의 시프트 값이 '0' 일 경우 현재 위치에 있는 텍스트가 상기 N 개의 패턴들 중 어떤 패턴과 일치하는지를 근사적으로 판단하기 위하여 사용된다.
본 발명에 따른 BLAST 알고리즘에서는, 종래의 MWM 알고리즘 또는 L+1-MWM 알고리즘에서 멀티 바이트(multi-byte) 기반의 하나의 시프트 테이블을 사용하는 것과 달리, 계층화된 B 개의 시프트 테이블(B-Layered bad-character SHIFT table)을 생성하는 것을 특징으로 한다. 이때 B는 2 이상의 자연수로서 알고리즘의 수행 시 미리 설정되는 값이다. 여기서 상기 계층화된 B 개의 시프트 테이블의 이름을 SHIFTLj (이 때, j = 0, 1, ... , B - 1)라고 정의하기로 한다. 각각의 시프트 테이블(SHIFTLj)은 싱글 바이트(single-byte) 기반의 시프트 테이블로서, 0 ~ 255 사이의 8비트 ASCII 값을 인덱스로 가진다.
상기 계층화된 B 개의 시프트 테이블을 생성하는 과정은 다음과 같다.
먼저, 상기 N 개의 패턴 각각의 문자열 길이를 계산하고, 그 중 가장 짧은 패턴의 길이를 LSP로 저장한다.
다음으로, 상기 N 개의 패턴 중 어느 하나의 패턴에 대하여, 패턴의 가장 왼쪽부터 LSP - 1 위치까지 길이가 1인 윈도우를 한 칸씩 이동하면서 SHIFTL0 테이 블 각각의 인덱스의 값(shift value)을 계산한다.
상기 SHIFTL0 테이블의 값은 다음과 같이 계산된다. 먼저 상기 SHIFTL0 테이블의 모든 인덱스에 대한 초기값을 LSP로 설정한다.
이후, 상기 선택된 패턴의 가장 왼쪽(position 0)부터 LSP - 1 위치까지 윈도우를 한 칸씩 이동하면서, 현재 칸에 해당하는 문자를 인덱스로 하는 상기 SHIFTL0 테이블의 현재값과 LSP - 1 - k1 을 계산한 값을 비교하여 작은 값을 SHIFTL0 테이블의 해당 인덱스의 값으로 업데이트한다. 이때, k1 은 상기 윈도우의 현재 위치를 나타내는 값이다(k1 = 0, 1, ..., LSP - 1). 상기 과정을 N 개의 모든 패턴의 가장 왼쪽부터 LSP - 1 위치까지의 문자열에 대해 반복함으로써, SHIFTL0 테이블의 값을 모두 계산할 수 있다.
상기 SHIFTL0 테이블의 값을 계산하는 방법과 동일한 방법으로, SHIFTLj 테이블 (1 ≤ j ≤ B - 1)을 구성한다. 다만 SHIFTL0 테이블과 달리, SHIFTLj 테이블의 경우 k1 = LSP - 1 - j 인 경우, 해당 위치에 해당하는 문자를 인덱스로 하는 SHIFTLj 테이블의 값은 0으로 설정된다는 점이 상이하다.
다음으로는 해시(HASH) 테이블 및 프리픽스(PREFIX) 테이블을 생성한다.
해시 테이블은 상기 N 개의 패턴 중 가장 왼쪽부터 LSP 길이 만큼 추출된 문자열들에 대하여, 오른쪽부터 B 개 만큼의 문자열에 대한 해시값들을 인덱 스(index)로 가지는 테이블이며, 상기 각각의 인덱스에 대한 값(value)은 상기 인덱스와 동일한 해시값을 갖는 패턴들을 가리키는 포인터(pointer)이다.
그리고 프리픽스 테이블은 상기 N 개의 패턴 중 가장 왼쪽부터 Bp 개 만큼의 문자열에 대한 해시값들을 인덱스로 가지는 테이블이며, 상기 각각의 인덱스의 값은 상기 인덱스와 동일한 해시값을 갖는 패턴들을 가리키는 포인터(pointer)이다. 이때 Bp 는 2 이상의 자연수로서 B 와 함께 알고리즘의 수행 시 미리 설정되는 값이다.
상기 해시 테이블 및 프리픽스 테이블은 종래의 MWM 알고리즘과 그 생성 방법이 동일하므로 여기서는 그 상세한 설명을 생략하기로 한다.
상기 계층화된 시프트 테이블, 해시 테이블, 프리픽스 테이블의 생성 과정을 예로 들어 설명하면 도 1과 같다.
도 1의 예를 설명하기 위하여, B = 2, Bp = 2 로 설정되어 있다고 가정한다. 또한 패턴 P 는 {P1, P2, P3, P4}의 4개의 패턴으로 구성되어 있으며, 각각의 패턴은
P1 = 'a1 a5 a3 a2 a3 a5 a1'
P2 = 'a3 a4 a2 a4 a3 a3 a5'
P3 = 'a3 a5 a4 a3 a2 a3'
P4 = 'a1 a5 a2 a3 a2'
로 구성되어 있다고 가정한다.
상기 예에서 가장 짧은 패턴은 P4 이며, P4의 길이는 5이므로, LSP = 5가 된다.
설명의 편의를 위해, 상기 패턴 집합 P에서 왼쪽부터 LSP 만큼의 패턴을 추출하여 이를 S = {S1, S2, S3, S4} 라 하면,
S1 = 'a1 a5 a3 a2 a3'
S2 = 'a3 a4 a2 a4 a3'
S3 = 'a3 a5 a4 a3 a2'
S4 = 'a1 a5 a2 a3 a2'
가 된다.
도 1에 도시된 것과 같이, SHIFTL0 테이블과 SHIFTL1 테이블의 모든 값들을 LSP = 5로 초기화한 뒤, 먼저 S1에 대하여 왼쪽부터 오른쪽으로 한 칸씩 이동하면서 SHIFTL0 테이블과 SHIFTL1 테이블을 구성한다.
상기 도면에서, 윈도우의 현재 위치(k1)가 0 일 때, LSP - 1 - k1 = 5 - 1 - 0 = 4가 된다. 따라서, S1에서 k1 = 0 일 때의 캐릭터는 a1 이므로, SHIFTL0[a1] = min(5, 4) = 4 가 되며, SHIFTL1[a1]도 마찬가지로 SHIFTL1[a1] = min(5, 4) = 4 가 된다.
상기와 동일한 방법으로 k1 = 1 일 때,
SHIFTL0[a5] = min(5, 3) = 3,
SHIFTL1[a5] = min(5, 3) = 3이 되고,
k1 = 2 일 때,
SHIFTL0[a3] = min(5, 2) = 2,
SHIFTL1[a3] = min(5, 2) = 2가 된다.
k1 = 3일 경우는 도시된 바와 같이, SHIFTL0[a2] = min(5, 1) = 1이 되나, , SHIFTL1[a2] = 0 이 된다. 이는 상술한 바와 같이 k1 = LSP - 1 - 1 = 3 이 되기 때문이다. 즉 SHIFTLj 테이블의 경우 오른쪽에서 j 번째 위치에 해당하는 캐릭터는 그 시프트 값이 0이 된다.
한편, 상기 S1에서 해시 테이블 및 프리픽스 테이블의 값 또한 설정할 수 있다. 도시된 바와 같이, S1의 첫 Bp (= 2) 자리 캐릭터는 a1 a5이므로, PREFIX[a1 a5] = P1이 되고 끝 B (= 2) 자리 캐릭터는 a2 a3이므로, HASH[a2 a3] = P1 이 된다.
상기 과정을 S1 내지 S4 에 대하여 반복하여 얻어진 SHIFTL0, SHIFTL1 테이블, HASH 테이블, PREFIX 테이블을 도 2에 나타내었다.
2. 스캐닝 단계(Scanning Stage)
스캐닝 단계는 상기 프리프로세싱 단계에서 생성한 계층화된 시프트 테이블, 해시 테이블 및 프리픽스 테이블을 이용하여 텍스트 내 패턴의 존재 여부를 탐색하는 단계이다.
먼저, 텍스트의 왼쪽에서 가장 첫 번째 위치를 0 이라 할 때, 펀치 포인터(punch pointer) Sc를 LSP - 1 위치로 설정한다. 상기 Sc는 패턴 탐지의 기준이 되는 위치로서 탐색 과정에서 텍스트의 가장 오른쪽 끝까지 오른쪽으로만 이동하며, 현재 위치에 매칭되는 패턴이 없을 경우, 오른쪽으로 이동하는 거리는 후술할 바와 같이 상기 계층화된 시프트 테이블의 시프트 값에 의하여 정해진다.
다음으로, 상기 텍스트의 Sc 위치에 존재하는 캐릭터에 대한 시프트 값을 SHIFTL0 테이블로부터 추출한다.
만일 상기 추출 결과, 추출된 시프트 값이 0이 아닌 경우, 해당 값만큼 Sc를 오른쪽으로 이동한다. 예를 들어, 텍스트상에서 Sc 위치에 해당하는 캐릭터가 x 이고 SHIFTL0[x] = 3 이라면, 다음 포인터(Sn)의 위치는 Sn = Sc + 3 이 된다. 상기 이동 이후, 알고리즘은 이동한 위치를 새로운 Sc로 설정하고 SHIFTL0 테이블로부터 시프트 값을 추출하는 단계를 반복한다.
한편, 상기 SHIFTL0 테이블로부터 추출된 시프트 값이 0 인 경우에는 Sc - 1 위치, 즉 Sc의 한 칸 왼쪽에 있는 캐릭터에 대한 시프트 값을 SHIFTL1 테이블로부터 추출한다. 만약 상기 SHIFTL1 테이블에서 추출된 값 또한 0 일 경우, 이번에는 다시 한 칸 왼쪽으로 이동하여 Sc - 2 위치에 해당하는 캐릭터에 대한 시프트 값을 SHIFTL2 테이블로부터 추출한다. 이를 달리 표현하면, j를 1부터 B - 1 까지 차례로 1씩 증가하면서 그 때마다 Sc - j 위치에 해당하는 캐릭터에 대한 시프트 값을 SHIFTLj 테이블로부터 추출한다고 설명할 수 있으며, 상기 과정은 시프트 테이블로부터 최초로 0이 아닌 시프트 값이 추출되거나, j 가 B - 1 에 도달할 때 까지 계속된다.
만일, SHIFTLi (1 ≤ i ≤ B - 1)테이블로부터 시프트 값이 처음으로 0이 아닌 다른 값이 나왔다고 가정하자. 이 경우 또한 추출된 값을 이용하여 Sc를 오른쪽으로 이동하게 되는데, 이때의 이동 값은 다음과 같이 정해진다.
Sn = Sc + max (1, SHIFTL1[*(Sc - 1)] - 1, ... , SHIFTLi[*(Sc - i)] - i)
상기 수식에서, Sc 는 펀치 포인터, Sn 은 Sc의 다음 위치, *(Sc - i)는 텍스트상의 Sc - i 위치에 해당하는 캐릭터를 의미하며, max (a, b) = a (a ≥ b), max (a, b) = b (a < b) 로 정의된다.
상기 수식에서 max (1, SHIFTL1[*(Sc - 1)] - 1, ... , SHIFTLi[*(Sc - i)] - i)는 현재 Sc가 텍스트상에서 오른쪽으로 이동할 수 있는 최대값이다.
이와 같이 계층화된 텍스트 테이블을 이용하여 텍스트상에서 Sc 가 한번에 이동할 수 있는 최대치만큼 이동함으로써, 텍스트 내 패턴의 탐색 시간을 최소화할 수 있다.
한편, Sc 위치부터 Sc - (B - 1) 위치까지의 모든 시프트 값이 0인 경우, 이는 찾고자 하는 패턴들 중 최소한 하나의 패턴이 텍스트상의 현재 위치에 존재할 가능성이 높다는 것을 나타낸다. 이 경우에는 다음 단계로서 상기 해시 테이블 및 프리픽스 테이블을 이용하여 상기 텍스트가 패턴과 근사적으로 일치하는지를 판단 하게 된다. 설명의 편의를 위해 먼저 현재 Sc로부터 왼쪽으로 LSP 길이 만큼의 문자열을 매칭 패턴이 될 수 있는 패턴 후보(pattern candidate)라 하자.
먼저, 해시 테이블을 이용하여 상기 패턴 후보의 가장 오른쪽 B 개의 문자열과 일치하는 패턴들의 존재 여부를 검출하고, 프리픽스 테이블을 이용하여 상기 패턴 후보의 가장 왼쪽 Bp 개의 문자열과 일치하는 패턴들의 존재 여부를 검출한다.
이후, 상기 해시 테이블로부터 검출된 패턴들과 프리픽스 테이블로부터 검출된 패턴들을 서로 비교하여 일치하는 패턴(즉, 양 단계에서 모두 검출된 패턴)이 있는지 여부를 판단한다.
만약 상기 해시 테이블로부터 검출된 패턴들과 프리픽스 테이블로부터 검출된 패턴들 중 일치하는 패턴이 있을 경우에는, 해당 패턴이 텍스트상의 현재 위치에 존재할 가능성이 매우 높을 것으로 판단하고 상기 일치된 패턴과 텍스트를 직접 비교하여 해당 패턴이 실제로 텍스트상의 현재 위치에 존재하는 지 여부를 판단하며, 상기 직접 비교 결과 해당 패턴이 실제로 텍스트상에 존재하는 경우 최종적으로 일치하는 패턴이 존재하는 것으로 판단하게 된다. 그러나 해시 테이블로부터 검출된 패턴들과 프리픽스 테이블로부터 검출된 패턴들 간에 일치하는 패턴이 없는 경우나, 상기 직접 비교 결과 패턴이 텍스트와 불일치하는 경우, 현재 위치에는 찾고자 하는 패턴이 없다고 판단하고 Sc 를 한 칸 오른쪽으로 이동하여 다시 스캐닝 단계를 반복하게 된다.
상기 스캐닝 단계를 예를 들어 설명하면 도 3과 같다.
도 3은 상기 도 2에 도시된 계층화된 시프트 테이블, 해시 테이블, 프리픽스 테이블을 이용하여 텍스트(T) 내의 패턴 P (= {P1, P2, P3, P4}) 를 탐색하는 과정을 나타낸 도면이다.
먼저, 도 3의 (a)를 보면, 현재 펀치 포인터 Sc 에 해당하는 캐릭터는 a6 임을 알 수 있다. a6는 패턴 P를 구성하는 캐릭터가 아니므로, 도 2에 도시된 것과 같이 SHIFTL0[a6] = LSP = 5 이고, 따라서 이 경우 Sc를 오른쪽으로 다섯 칸 이동한다.
다음으로 도 3의 (b)의 경우를 살펴보면, Sc에 해당하는 캐릭터는 a2, Sc - 1에 해당하는 캐릭터는 a3이며, 도 2의 시프트 테이블을 참조하여 보면, SHIFTL0[a2] = 0, SHIFTL1[a3] = 0 으로 오른쪽에서 B (= 2) 자리 만큼의 모든 시프트 값이 0임을 알 수 있다. 따라서 이 경우 ' a1 a5 a2 a3 a2 ' 는 패턴 후보가 되며, 해시 테이블과 프리픽스 테이블을 이용하여 패턴 매칭 여부를 판단한다.
도 2의 해시 테이블을 참조하면, 마지막 B(= 2) 자리가 a3 a2인 패턴은 P3 또는 P4 이며, 프리픽스 테이블을 참조하면, 처음 Bp(= 2) 자리가 a1 a5인 패턴은 P1 또는 P4 이다. 이 중 해시 테이블 및 프리픽스 테이블이 모두 일치하는 패턴은 P4 이 므로, 마지막으로 P4 와 텍스트를 직접 비교하여 패턴 매칭 여부를 판단한다. 상기 예에서 P4 = 'a1 a5 a2 a3 a2'로 정의하였으므로, 최종적으로 알고리즘 수행 결과 상기 텍스트에 P4가 존재하는 것으로 판단한다.
도 3의 (c) 및 (e)의 경우, SHIFTL0[a5] = 3 이므로 Sc는 오른쪽으로 세 칸 이동된다.
도 3의 (d)의 경우, SHIFTL0[a3] = 0, SHIFTL1[a2] = 0 이나, 프리픽스 테이블을 참조하여 보면, 처음 2자리가 a2 a5 인 패턴은 존재하지 않으므로 최종적으로 일치하는 패턴이 없는 것으로 판단하고 Sc를 오른쪽으로 한 칸 이동한다.
도 3의 (f) 의 경우, SHIFTL0[a2] = 0 이나, SHIFTL1[a5] = 3 이므로, Sc의 다음 위치는 다음과 같이 Sc + 2 가 된다.
Sn = Sc + max (1, SHIFTL1[a5] - 1) = Sc + 3 - 1 = Sc + 2
이상, 본 발명의 구체적인 실시 형태에 대하여 상세하게 기술하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적 특징을 변경하지 않고서도 다른 구체적인 형태로 실시할 수 있으므로, 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 본 발명은 본 상세한 설 명에 기재된 것에 한정되는 것은 아닌 것으로 이해되어야만 한다. 본 발명의 권리범위는 상기 상세한 설명보다는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 등가 개념으로부터 도출되는 모든 변경 또는 변형된 실시형태는 본 발명의 범위에 포함되는 것으로 해석되어야 한다.
도 1은 본 발명에 따른 프리프로세싱 단계에서, 계층화된 시프트 테이블, 해시 테이블, 프리픽스 테이블의 생성하는 과정을 예시한 도면이다.
도 2는 본 발명에 따른 프리프로세싱 단계에 의해 생성된 계층화된 시프트 테이블, 해시 테이블, 프리픽스 테이블을 예시한 도면이다.
도 3은 본 발명에 따른 스캐닝 단계에서, 도 2에 도시된 계층화된 시프트 테이블, 해시 테이블 및 프리픽스 테이블을 이용하여 텍스트 내 패턴의 존재를 탐색하는 과정을 예시한 도면이다.

Claims (8)

  1. 소정의 텍스트에 N 개(N은 2 이상의 자연수)의 패턴 중 하나 이상의 패턴이 존재하는지 여부를 탐지하기 위한 방법으로서,
    (a) 상기 N 개의 패턴 각각의 문자열 길이를 계산하고, 그 중 가장 짧은 패턴의 길이를 LSP(Length of Shortest Pattern)로 저장하는 단계;
    (b) 상기 텍스트에 포함될 수 있는 모든 1바이트 문자들을 인덱스(index)로 하는 B 개(B는 2 이상의 자연수)의 시프트(SHIFT) 테이블을 생성하고, 상기 B개의 시프트 테이블 각각에 대하여 각 인덱스에 대응하는 값(value)들을 LSP로 초기화하는 단계;
    (c) 상기 텍스트에 포함될 수 있는 길이 B의 모든 문자열에 대한 각각의 해시값들을 인덱스로 하는 해시(HASH) 테이블 및, 상기 텍스트에 포함될 수 있는 길이 Bp(Bp는 2 이상의 자연수)의 모든 문자열에 대한 각각의 해시값들을 인덱스로 하는 프리픽스(PREFIX) 테이블을 생성하는 단계;
    (d) 상기 N 개의 패턴 중 어느 하나의 패턴을 선택하고, 상기 선택된 패턴의 가장 왼쪽 문자의 위치를 0 이라 할 때 왼쪽부터 0 에서 LSP - 1 위치까지의 문자열에 대하여, 상기 문자열의 가장 왼쪽부터 오른쪽으로 한 칸씩 이동하면서 해당 위치에 존재하는 문자의 시프트 값을 계산하여 상기 B 개의 시프트 테이블의 값을 업데이트하는 단계;
    (e) 상기 (d) 단계에서 선택된 패턴에 대하여, 상기 선택된 패턴의 왼쪽부터 LSP - B 에서 LSP - 1 위치까지의 문자열에 대한 해시값들을 인덱스 값으로 하는 상기 해시(HASH) 테이블의 값(value)을 상기 선택된 패턴에 대한 포인터(pointer)로 저장하는 단계;
    (f) 상기 (d) 단계에서 선택된 패턴에 대하여, 상기 선택된 패턴의 왼쪽부터 0 에서 Bp - 1 위치까지의 문자열에 대한 해시값들을 인덱스 값으로 하는 상기 프리픽스(PREFIX) 테이블의 값(value)을 상기 선택된 패턴에 대한 포인터(pointer)로 저장하는 단계;
    (g) 상기 N 개의 패턴 모두에 대하여 상기 (c) 단계 내지 (f) 단계를 반복 수행하는 단계;
    (h) 상기 (g) 단계의 수행 이후, 상기 B 개의 시프트 테이블, 해시 테이블 및 프리픽스 테이블을 이용하여 상기 텍스트 내에 상기 N 개의 패턴 중 하나 이상의 패턴이 존재하는지 여부를 탐색하는 단계;
    를 포함하여 구성되는 문자열 패턴 탐지 방법.
  2. 제1항에 있어서,
    상기 B 개의 시프트 테이블 각각을 SHIFTLj 테이블(j는 0에서 B - 1 사이의 자연수)로 정의할 때,
    상기 (d) 단계는,
    (d-1) 상기 선택된 패턴상의 위치(k1)를 0으로 설정하는 단계;
    (d-2) 상기 선택된 패턴에 대하여 상기 k1번째 위치에 해당하는 문자를 추출하는 단계;
    (d-3) 상기 추출된 문자를 인덱스로 하는 SHIFTLj 테이블의 값 LSP - 1 - k1 을 계산하는 단계;
    (d-4) 상기 (d-3) 단계에서 계산된 LSP - 1 - k1 값과 SHIFTLj 테이블의 현재값을 서로 비교하고, 이 중 작은 값을 상기 SHIFTLj 테이블의 해당 인덱스의 값으로 업데이트하는 단계;
    (d-5) 만약 상기 k1 값이 LSP - 1 - j 값과 동일한 경우, 상기 k1 위치에 해당하는 문자를 인덱스로 하는 상기 SHIFTLj 테이블의 값을 0 으로 설정하는 단계;
    (d-6) 상기 B 개의 시프트 테이블 모두에 대하여, 상기 (d-3) 단계 내지 (d-5) 단계를 반복 수행하는 단계;
    (d-7) 상기 k1 값을 LSP - 1 에 도달할 때까지 1씩 증가시키면서, 상기 (d-2) 내지 (d-6) 단계를 반복 수행하는 단계;
    를 포함하여 구성되는 문자열 패턴 탐지 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 (e) 단계에서 상기 포인터를 저장하고자 하는 상기 해시 테이블의 값에 기 저장된 포인터가 있을 경우, 기 저장된 포인터를 삭제하지 않고 상기 선택된 패턴에 대한 포인터를 리스트 형태로 추가 저장하는 것을 특징으로 하는 문자열 패턴 탐지 방법.
  4. 제1항 또는 제2항에 있어서,
    상기 (f) 단계에서 상기 포인터를 저장하고자 하는 상기 프리픽스 테이블의 값에 기 저장된 포인터가 있을 경우, 기 저장된 포인터를 삭제하지 않고 상기 선택된 패턴에 대한 포인터를 리스트 형태로 추가 저장하는 것을 특징으로 하는 문자열 패턴 탐지 방법.
  5. 제1항에 있어서,
    상기 B 개의 시프트 테이블 각각을 SHIFTLj 테이블(j는 0에서 B - 1 사이의 자연수)로 정의할 때,
    상기 (h) 단계는,
    (h-1) 상기 텍스트의 왼쪽에서 가장 첫 번째 위치를 0 이라 할 때, 펀치 포인터(Sc)를 상기 텍스트의 LSP - 1 위치로 설정하는 단계;
    (h-2) 상기 텍스트의 Sc 위치에 해당하는 문자에 대한 시프트 값을 SHIFTL0 테이블로부터 추출하는 단계;
    (h-3) 상기 (h-2) 단계에서 추출된 시프트 값이 0인 경우, 상기 j 값을 1 부터 B - 1 까지 1씩 증가시키면서 상기 텍스트의 Sc - j 위치에 해당하는 문자에 대한 시프트 값을 SHIFTLj 테이블로부터 추출하는 단계;
    (h-4) 상기 (h-3) 단계에서 추출된 시프트 값들이 모두 0인 경우, 상기 텍스트의 Sc - B + 1부터 Sc 위치까지의 문자열에 대한 해시값을 인덱스 값으로 하는 패턴들을 상기 해시 테이블로부터 검출하는 단계;
    (h-5) 상기 (h-4) 단계에서 상기 해시 테이블로부터 패턴들이 검출된 경우, 상기 텍스트의 Sc - LSP + 1 부터 Sc - LSP + Bp 위치까지의 문자열에 대한 해시값을 인덱스 값으로 하는 패턴들을 상기 프리픽스 테이블로부터 검출하는 단계;
    (h-6) 상기 (h-5) 단계에서 상기 프리픽스 테이블로부터 패턴들이 검출된 경우, 상기 프리픽스 테이블로부터 검출된 패턴과 상기 해시 테이블로부터 검출된 패턴 중 일치하는 패턴들이 존재하는지 여부를 판단하는 단계;
    (h-7) 상기 (h-6) 단계에서의 판단 결과 일치하는 패턴들이 있는 경우, 상기 일치하는 패턴들과 상기 텍스트를 직접 비교하여 상기 패턴들이 실제로 상기 텍 스트에 존재하는지 여부를 탐색하는 단계;
    (h-8) 상기 (h-7) 단계에서의 판단 결과 상기 텍스트와 직접 비교한 패턴들 중 하나라도 상기 텍스트와 일치하는 패턴이 존재하는 경우, 해당 패턴을 상기 텍스트에 존재하는 패턴으로 판단하는 단계;
    를 포함하여 구성되는 문자열 패턴 탐지 방법.
  6. 제5항에 있어서,
    상기 (h-2) 단계에서 추출된 시프트 값이 0이 아닌 경우, 추출된 상기 시프트 값 만큼 상기 Sc를 상기 텍스트의 오른쪽으로 이동하고, 이동된 상기 Sc를 기준으로 상기 (h-2) 단계 이하의 단계들을 수행하는 것을 특징으로 하는 문자열 패턴 탐지 방법.
  7. 제5항에 있어서,
    상기 (h-3) 단계의 수행 도중 최초로 0이 아닌 시프트 값이 추출된 경우, 다음 수식을 이용하여 상기 Sc를 상기 텍스트의 오른쪽으로 이동하고, 이동된 상기 Sc를 기준으로 상기 (h-2) 단계 이하의 단계들을 수행하는 것을 특징으로 하는 문자열 패턴 탐지 방법.
    Sn = Sc + max (1, SHIFTL1[*(Sc - 1)] - 1, ... , SHIFTLi[*(Sc - i)] - i)
    상기 수식에서, Sc 는 펀치 포인터, Sn 은 Sc의 다음 위치, *(Sc - i)는 텍스트상의 Sc - i 위치에 해당하는 문자(character), i는 최초로 0이 아닌 시프트 값이 추출된 j의 값.
  8. 제5항에 있어서,
    상기 (h-4) 단계에서 상기 해시 테이블로부터 패턴들이 검출되지 않은 경우, 또는 상기 (h-5) 단계에서 상기 프리픽스 테이블로부터 패턴들이 검출되지 않은 경우, 또는 상기 (h-6) 단계에서 일치하는 패턴들이 없는 경우, 또는 상기 (h-7) 단계에서 직접 비교 결과 최종적으로 패턴들이 상기 텍스트와 불일치하는 것으로 판단되는 경우 중 어느 하나의 경우에 해당하는 경우,
    상기 Sc를 상기 텍스트의 오른쪽으로 1 만큼 이동하고, 이동된 상기 Sc를 기준으로 상기 (h-2) 단계 이하의 단계들을 수행하는 것을 특징으로 하는 문자열 패턴 탐지 방법.
KR1020080075635A 2008-08-01 2008-08-01 계층화된 시프트 테이블을 이용한 고속의 문자열 패턴 탐지방법 KR100959244B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020080075635A KR100959244B1 (ko) 2008-08-01 2008-08-01 계층화된 시프트 테이블을 이용한 고속의 문자열 패턴 탐지방법
PCT/KR2008/005598 WO2010013863A1 (en) 2008-08-01 2008-09-22 Method of detecting character string pattern at high speed using layered shift tables
US12/443,802 US8108387B2 (en) 2008-08-01 2008-09-22 Method of detecting character string pattern at high speed using layered shift tables

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020080075635A KR100959244B1 (ko) 2008-08-01 2008-08-01 계층화된 시프트 테이블을 이용한 고속의 문자열 패턴 탐지방법

Publications (2)

Publication Number Publication Date
KR20100013895A KR20100013895A (ko) 2010-02-10
KR100959244B1 true KR100959244B1 (ko) 2010-05-24

Family

ID=41610548

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020080075635A KR100959244B1 (ko) 2008-08-01 2008-08-01 계층화된 시프트 테이블을 이용한 고속의 문자열 패턴 탐지방법

Country Status (3)

Country Link
US (1) US8108387B2 (ko)
KR (1) KR100959244B1 (ko)
WO (1) WO2010013863A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10523692B2 (en) 2016-04-08 2019-12-31 Samsung Electronics Co., Ltd. Load balancing method and apparatus in intrusion detection system

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8630989B2 (en) 2011-05-27 2014-01-14 International Business Machines Corporation Systems and methods for information extraction using contextual pattern discovery
CN102890719B (zh) * 2012-10-12 2015-12-16 浙江宇视科技有限公司 一种对车牌号进行模糊搜索的方法及装置
CN103544277A (zh) * 2013-10-22 2014-01-29 深圳市捷顺科技实业股份有限公司 一种查询目标文本的方法及装置
US10558690B2 (en) * 2015-07-06 2020-02-11 International Business Machines Corporation Multiple sub-string searching
KR101662957B1 (ko) * 2015-07-30 2016-10-05 인하대학교 산학협력단 해싱기반의 순위다중패턴매칭 방법
KR102213368B1 (ko) * 2019-10-10 2021-02-08 엔시큐어 주식회사 멀티 키워드 고속 검색 시스템 및 방법

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050054538A (ko) * 2003-12-05 2005-06-10 한국전자통신연구원 고속 패턴 저장 및 매칭 방법
KR20060013815A (ko) * 2004-08-09 2006-02-14 한국전자통신연구원 해쉬 테이블 주소 분산 장치 및 방법, 이를 이용한패턴매칭 장치
KR100653958B1 (ko) 2005-06-22 2006-12-05 충남대학교산학협력단 Tcam를 이용한 해시 기반 고성능 멀티 패턴 매치알고리즘
KR100648297B1 (ko) 2005-09-01 2006-12-20 재단법인서울대학교산학협력재단 고속의 네트워크 침입 탐지 방법

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3189186B2 (ja) * 1992-03-23 2001-07-16 インターナショナル・ビジネス・マシーンズ・コーポレ−ション パターンに基づく翻訳装置
US20080097741A1 (en) * 2006-10-18 2008-04-24 Domenica Bagnato Text analysis, transliteration and translation method and apparatus for hieroglypic, hieratic, and demotic texts from ancient egyptian
CN101296114B (zh) * 2007-04-29 2011-04-20 国际商业机器公司 基于流的并行模式匹配方法和系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050054538A (ko) * 2003-12-05 2005-06-10 한국전자통신연구원 고속 패턴 저장 및 매칭 방법
KR20060013815A (ko) * 2004-08-09 2006-02-14 한국전자통신연구원 해쉬 테이블 주소 분산 장치 및 방법, 이를 이용한패턴매칭 장치
KR100653958B1 (ko) 2005-06-22 2006-12-05 충남대학교산학협력단 Tcam를 이용한 해시 기반 고성능 멀티 패턴 매치알고리즘
KR100648297B1 (ko) 2005-09-01 2006-12-20 재단법인서울대학교산학협력재단 고속의 네트워크 침입 탐지 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10523692B2 (en) 2016-04-08 2019-12-31 Samsung Electronics Co., Ltd. Load balancing method and apparatus in intrusion detection system

Also Published As

Publication number Publication date
KR20100013895A (ko) 2010-02-10
US20110066631A1 (en) 2011-03-17
WO2010013863A1 (en) 2010-02-04
US8108387B2 (en) 2012-01-31

Similar Documents

Publication Publication Date Title
KR100959244B1 (ko) 계층화된 시프트 테이블을 이용한 고속의 문자열 패턴 탐지방법
JP5472108B2 (ja) 検索装置、検索方法およびプログラム
CN104252469B (zh) 用于模式匹配的方法、设备和电路
US8095526B2 (en) Efficient retrieval of variable-length character string data
US20130297641A1 (en) Code string search apparatus, search method, and program
CN106599097B (zh) 海量特征串集合的匹配方法和装置
CN107229759B (zh) 一种字符串模式匹配的方法
KR101662957B1 (ko) 해싱기반의 순위다중패턴매칭 방법
CN103577598B (zh) 模式串与文本串的匹配方法和装置
CN108628953A (zh) 一种基于fpga的并行字符串匹配算法
US7548652B1 (en) Rapid comparison of similar data strings
CN105025013B (zh) 基于优先级Trie树的动态IP匹配模型的建立方法
JP6613019B2 (ja) パターンを探索する装置
Chrobak et al. The greedy algorithm for the minimum common string partition problem
US20100174742A1 (en) Bit string search apparatus, search method, and program
CN109460495B (zh) 一种基于改进bm算法与后缀数组的冗余字段过滤方法
Larsson Most recent match queries in on-line suffix trees
Hirota et al. Efficient algorithms for enumerating maximal common subsequences of two strings
CN113065419B (zh) 一种基于流量高频内容的模式匹配算法及系统
CN115525801A (zh) 网络安全系统的模式匹配算法
KR100653958B1 (ko) Tcam를 이용한 해시 기반 고성능 멀티 패턴 매치알고리즘
JP4565064B2 (ja) 高速マッチング法
CN113010882B (zh) 一种适用于缓存丢失攻击的自定义位置顺序模式匹配方法
Tevatia et al. An offensive algorithm for multi-pattern parameterized string matching
EP2249257B1 (en) Bit string retrieval device, retrieval method and program

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130508

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140428

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150430

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160128

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20170421

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20180425

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20190429

Year of fee payment: 10