KR101769247B1 - 계층적 인터벌 트리를 이용한 문자열 비교 방법 및 장치 - Google Patents
계층적 인터벌 트리를 이용한 문자열 비교 방법 및 장치 Download PDFInfo
- Publication number
- KR101769247B1 KR101769247B1 KR1020160078420A KR20160078420A KR101769247B1 KR 101769247 B1 KR101769247 B1 KR 101769247B1 KR 1020160078420 A KR1020160078420 A KR 1020160078420A KR 20160078420 A KR20160078420 A KR 20160078420A KR 101769247 B1 KR101769247 B1 KR 101769247B1
- Authority
- KR
- South Korea
- Prior art keywords
- string
- block
- interval
- comparison
- input
- Prior art date
Links
Images
Classifications
-
- G06F17/30985—
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
-
- G06F17/30961—
-
- G06F19/22—
-
- G06F19/24—
-
- G—PHYSICS
- G16—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR SPECIFIC APPLICATION FIELDS
- G16B—BIOINFORMATICS, i.e. INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR GENETIC OR PROTEIN-RELATED DATA PROCESSING IN COMPUTATIONAL MOLECULAR BIOLOGY
- G16B30/00—ICT specially adapted for sequence analysis involving nucleotides or amino acids
-
- G—PHYSICS
- G16—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR SPECIFIC APPLICATION FIELDS
- G16B—BIOINFORMATICS, i.e. INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR GENETIC OR PROTEIN-RELATED DATA PROCESSING IN COMPUTATIONAL MOLECULAR BIOLOGY
- G16B40/00—ICT specially adapted for biostatistics; ICT specially adapted for bioinformatics-related machine learning or data mining, e.g. knowledge discovery or pattern finding
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Medical Informatics (AREA)
- Evolutionary Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Spectroscopy & Molecular Physics (AREA)
- General Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Biotechnology (AREA)
- General Engineering & Computer Science (AREA)
- Bioinformatics & Computational Biology (AREA)
- Epidemiology (AREA)
- Public Health (AREA)
- Evolutionary Computation (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioethics (AREA)
- Artificial Intelligence (AREA)
- Chemical & Material Sciences (AREA)
- Analytical Chemistry (AREA)
- Proteomics, Peptides & Aminoacids (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
계층적 인터벌 트리를 이용한 문자열 비교 방법 및 장치가 개시된다. 문자열 비교 방법은 비교 문자열의 모든 부분 문자열을 포함하는 방향성 비순환적 단어 그래프(Directed Acyclic Word Graph)를 생성하는 단계; 상기 방향성 비순환적 단어 그래프를 이용하여 입력 문자열과 상기 비교 문자열 간의 공통된 부분 문자열에 대응하는 블록을 블록 리스트에 저장하는 단계; 상기 블록 리스트와 상기 비교 문자열에 대한 계층적 인터벌 트리(Hierarchical Interval Tree)를 이용하여 상기 입력 문자열의 블록을 스왑하는 단계; 및 상기 스왑된 입력 문자열과 상기 비교 문자열 간의 유사성을 판단하는 단계를 포함할 수 있다.
Description
본 명세서에 개시되어 있는 실시예들은 문자열 비교 방법 및 장치에 관한 것으로, 보다 구체적으로는 계층적 인터벌 트리를 이용한 문자열 비교 방법 및 장치에 관한 것이다.
두 문자열간의 유사성을 판단하는 알고리즘으로 블록 스왑 알고리즘이 적용될 수 있다. 블록 스왑 알고리즘은 동일하지만 서로 다른 위치에 있는 두 문자열의 블록에 대한 편집 거리를 동일하게 만드는 알고리즘을 의미한다. 이를 통해 유사한 의미를 가지고 있는 두 문자열은 서로 관계 있는 것으로 인식될 수 있고, 실제적인 의미가 고려될 수 있다.
본 발명은 계층적 인터벌 트리를 이용함으로써 입력 문자열의 블록 스왑을 수행할 때 발생하는 모호성 문제를 해결하는 방법 및 장치를 제공한다.
일실시예에 따른 문자열 비교 방법은 비교 문자열의 모든 부분 문자열을 포함하는 방향성 비순환적 단어 그래프(Directed Acyclic Word Graph)를 생성하는 단계, 상기 방향성 비순환적 단어 그래프를 이용하여 입력 문자열과 상기 비교 문자열 간의 공통된 부분 문자열에 대응하는 블록을 블록 리스트에 저장하는 단계, 상기 블록 리스트와 상기 비교 문자열에 대한 계층적 인터벌 트리(Hierarchical Interval Tree)를 이용하여 상기 입력 문자열의 블록을 스왑하는 단계 및 상기 스왑된 입력 문자열과 상기 비교 문자열 간의 유사성을 판단하는 단계 를 포함할 수 있다.
상기 방향성 비순환적 단어 그래프는 복수의 노드 및 복수의 방향성 엣지를 포함하고, 상기 복수의 노드는 상기 부분 문자열의 마지막 문자(suffix)에 대응하고, 상기 방향성 엣지를 따라 상기 복수의 노드가 연결되는 경우 상기 부분 문자열에 고유하게 대응할 수 있다.
상기 스왑하는 단계는, 상기 입력 문자열의 블록에 대응하는, 상기 비교 문자열에 포함된 적어도 하나 이상의 인터벌을 이용하여 인터벌 트리를 생성하는 단계, 상기 인터벌 트리를 이용하여 상기 입력 문자열의 블록에 대응하는 인터벌을 선택하는 단계 및 상기 선택된 인터벌에 기초하여 상기 입력 문자열의 블록의 위치와 상기 비교 문자열의 블록의 위치가 대응하도록 상기 입력 문자열의 블록을 스왑하는 단계를 포함할 수 있다.
상기 인터벌을 선택하는 단계는, 상기 복수의 인터벌 간의 겹침(intersection)이 가장 작은 인터벌을 선택할 수 있다.
상기 인터벌을 선택하는 단계는, 상기 입력 문자열의 제1 블록에 대하여 제1 인터벌이 선택된 경우, 상기 입력 문자열의 제2 블록에 대하여 제2 인터벌에 대응하는 노드의 적어도 하나 이상의 자식 노드 중에서 제3 인터벌을 선택하고, 상기 제1 블록은 이미 인터벌이 선택된 블록이고 상기 제2 블록은 현재 인터벌을 선택하려는 블록이고, 상기 제1 인터벌과 상기 제2 인터벌은 상기 제1 블록에 대응하고 상기 제3 인터벌은 상기 제2 블록에 대응할 수 있다.
상기 유사성을 판단하는 단계는, 상기 스왑된 입력 문자열과 상기 비교 문자열 간의 편집 거리를 판단할 수 있다.
상기 편집 거리는 상기 스왑된 입력 문자열 내에서 상기 블록의 위치가 상기 비교 문자열과 동일해지도록 상기 스왑된 입력 문자열에 적용되는 오퍼레이션에 대응하는 수치의 합의 최소값에 대응할 수 있다.
상기 오퍼레이션은 문자에 대한 삽입, 삭제 및 교체를 포함할 수 있다.
일실시예에 따른 문자열 비교 장치는 입력 문자열의 모든 부분 문자열을 포함하는 방향성 비순환적 단어 그래프를 생성하는 생성부, 상기 방향성 비순환적 단어 그래프를 이용하여 상기 입력 문자열과 비교 문자열 간의 공통된 부분 문자열에 대응하는 블록을 블록 리스트에 저장하는 저장부, 상기 블록 리스트와 상기 입력 문자열에 대한 계층적 인터벌 트리를 이용하여 상기 입력 문자열의 블록을 스왑하는 편집부 및 상기 스왑된 입력 문자열과 상기 비교 문자열 간의 유사성을 판단하는 판단부를 포함할 수 있다.
일실시예에 따르면, 계층적 인터벌 트리를 이용함으로써 입력 문자열의 블록 스왑을 수행할 때 발생하는 모호성 문제를 해결할 수 있다.
도 1은 일실시예에 따른 유사성이 판단될 두 문자열을 도시한 도면이다.
도 2는 일실시예에 따른 두 문자열을 비교하는 방법을 나타내는 순서도이다.
도 3은 일실시예에 따른 비교 문자열 "adbccadbc"의 DAWG를 도시한 도면이다.
도 4는 일실시예에 따른 DAWG를 이용하여 선형 시간 안에 블록을 스와핑하는 과정을 나타낸 도면이다.
도 5는 일실시예에 따른 블록에 대응하는 인터벌 선택의 모호성을 설명하기 위한 도면이다.
도 6a는 일실시예에 따른 왼쪽 엔드 포인트를 기준으로 정렬된 인터벌들을 도시한 도면이다.
도 6b는 일실시예에 따른 도6a에 대한 계층적 인터벌 트리를 도시한 도면이다.
도 7은 일실시예에 따른 두 개의 동일한 서브 트리를 가지는 계층적 인터벌 트리를 도시한 도면이다.
도 8은 일실시예에 따른 도 3에 대하여 입력 문자열에서 블록을 스왑하기 위한 비교 문자열에 대한 계층적 인터벌 트리를 도시한 도면이다.
도 9는 일실시예에 따른 스와핑 이후 동일해진 두 개의 문자열을 도시한 도면이다.
도 10은 일실시예에 따른 두 개의 문자열을 비교하는 장치를 도시한 도면이다.
도 11은 스노트 규칙 세트에서 블록 리스트 크기에 대한 경우의 수를 나타낸 그래프이다.
도 12는 특정 채소의 DNA 시퀀스에 대해 블록을 발견하기 위해 DAWG를 사용하는 경우 포함의 경우의 수, 오버래핑의 경우의 수 및 발견된 인터벌의 수를 나타낸 그래프이다.
도 2는 일실시예에 따른 두 문자열을 비교하는 방법을 나타내는 순서도이다.
도 3은 일실시예에 따른 비교 문자열 "adbccadbc"의 DAWG를 도시한 도면이다.
도 4는 일실시예에 따른 DAWG를 이용하여 선형 시간 안에 블록을 스와핑하는 과정을 나타낸 도면이다.
도 5는 일실시예에 따른 블록에 대응하는 인터벌 선택의 모호성을 설명하기 위한 도면이다.
도 6a는 일실시예에 따른 왼쪽 엔드 포인트를 기준으로 정렬된 인터벌들을 도시한 도면이다.
도 6b는 일실시예에 따른 도6a에 대한 계층적 인터벌 트리를 도시한 도면이다.
도 7은 일실시예에 따른 두 개의 동일한 서브 트리를 가지는 계층적 인터벌 트리를 도시한 도면이다.
도 8은 일실시예에 따른 도 3에 대하여 입력 문자열에서 블록을 스왑하기 위한 비교 문자열에 대한 계층적 인터벌 트리를 도시한 도면이다.
도 9는 일실시예에 따른 스와핑 이후 동일해진 두 개의 문자열을 도시한 도면이다.
도 10은 일실시예에 따른 두 개의 문자열을 비교하는 장치를 도시한 도면이다.
도 11은 스노트 규칙 세트에서 블록 리스트 크기에 대한 경우의 수를 나타낸 그래프이다.
도 12는 특정 채소의 DNA 시퀀스에 대해 블록을 발견하기 위해 DAWG를 사용하는 경우 포함의 경우의 수, 오버래핑의 경우의 수 및 발견된 인터벌의 수를 나타낸 그래프이다.
아래의 특정한 구조적 내지 기능적 설명들은 단지 실시예들을 설명하기 위한 목적으로 예시된 것으로, 특허출원의 범위가 본 명세서에 설명된 내용에 한정되는 것으로 해석되어서는 안된다. 설명한 분야에 속하는 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 본 명세서에서 "일 실시예" 또는 "실시예"에 대한 언급은 그 실시예와 관련하여 설명되는 특정한 특징, 구조 또는 특성이 적어도 하나의 실시예에 포함된다는 것을 의미하며, "일 실시예" 또는 "실시예"에 대한 언급이 모두 동일한 실시예를 지칭하는 것이라고 이해되어서는 안된다.
본 명세서에 개시되어 있는 실시예들에 대해서 특정한 구조적 또는 기능적 설명들은 단지 실시예들을 설명하기 위한 목적으로 예시된 것으로서, 실시예들은 다양한 형태로 실시될 수 있으며 본 명세서에 설명된 실시예들에 한정되지 않는다.
본 명세서에 개시되어 있는 실시예들은 다양한 변경들을 가할 수 있고 여러 가지 형태들을 가질 수 있으므로 실시예들을 도면에 예시하고 본 명세서에 상세하게 설명하고자 한다. 그러나, 이는 실시예들을 특정한 개시형태들에 대해 한정하려는 것이 아니며, 본 명세서의 사상 및 기술 범위에 포함되는 변경, 균등물, 또는 대체물을 포함한다.
제1 또는 제2 등의 용어를 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만, 예를 들어 본원의 권리 범위로부터 이탈되지 않은 채, 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소는 제1 구성요소로도 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다. 구성요소들 간의 관계를 설명하는 표현들, 예를 들어 "~사이에"와 "바로~사이에" 또는 "~에 직접 이웃하는" 등도 마찬가지로 해석되어야 한다.
본 명세서에서 사용한 용어는 단지 특정한 실시예들을 설명하기 위해 사용된 것으로, 권리범위를 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 설시된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함으로 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 해당 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하에서 설명될 실시예들은 동영상 안에 포함된 객체의 움직임을 식별하고 그 유형을 결정하는데 적용될 수 있다.
이하, 실시예들을 첨부된 도면들을 참조하여 상세하게 설명한다. 첨부 도면을 참조하여 설명함에 있어, 도면 부호에 관계없이 동일한 구성 요소는 동일한 참조 부호를 부여하고, 이에 대한 중복되는 설명은 생략하기로 한다.
도 1은 일실시예에 따른 유사성이 판단될 두 문자열을 도시한 도면이다.
본원에서 개시될 문자열 비교 장치는 먼저 입력 문자열의 모든 부분 문자열을 찾기 위하여 방향성 비순환적 단어 그래프(Directed Acyclic Word Graph, DAWG)를 생성한다. 이후 문자열 비교 장치는 방향성 비순환적 단어 그래프를 이용하여 입력 문자열과 비교 문자열 간의 공통된 부분 문자열에 대응하는 블록을 찾고 이를 블록 리스트에 저장한다. 문자열 비교 장치는 블록 리스트와 입력 문자열에 대한 계층적 인터벌 트리(Hierarchical Interval Tree)를 이용하여 입력 문자열의 블록을 스왑하여 문자열 간의 실제적 의미를 고려하기 위한 전처리 단계를 수행한다. 마지막으로 문자열 비교 장치는 스왑된 입력 문자열과 비교 문자열 간의 유사성을 판단하기 위하여 편집 거리를 계산한다. 문자열 비교 장치는 편집 거리를 미리 설정된 수치와 비교하여 두 문자열 간의 유사성을 판단할 수 있다. 본원에서는 비교할 문자열은 입력 문자열로 지칭되고, 비교 대상이 되는 문자열은 비교 문자열이라고 지칭될 것이다. 여기서 전처리 단계는 DAWG 생성, 블록 검색 및 검색된 블록을 블록리스트에 저장, 블록 스왑 과정을 포함할 수 있다.
편집 거리 알고리즘은 구현하는 것이 쉽지만 중대한 결점이 있다. 편집 거리 알고리즘은 다이나믹 프로그래밍을 사용하기 때문에, 직접 두 문자열을 비교할 뿐 두 문자열의 실제 의미를 고려하지 않는다. 예를 들어, 두 문자열 "block swap"과 "swapped block"은 유사한 의미를 가지고 있지만 편집 거리 알고리즘에서는 이들이 관계없는 문자열로 인식된다.
이러한 문제를 해결하기 위하여, 편집 거리 알고리즘을 적용하기에 앞서 블록 스왑(Block Swap) 알고리즘이 적용될 수 있다. 블록 스왑 알고리즘은 동일하지만 서로 다른 위치에 있는 두 문자열의 블록에 대한 편집 거리를 동일하게 만들 수 있다. 이를 통해 유사한 의미를 가지고 있는 두 문자열은 서로 관계 있는 것으로 인식될 수 있고, 실제적인 의미가 고려될 수 있다. 이하 블록은 두 문자열 간의 공통된 부분 문자열을 지칭하는 것으로 사용된다.
구체적으로, 블록 스왑 알고리즘은 실제적인 의미를 고려하기 위해 추가적인 오퍼레이션을 제공하는 대신에, 편집 거리 알고리즘을 통해 유사성을 판단하기 전에 문자열의 블록을 스왑하는 전처리 단계를 포함한다. 이 전처리 단계는 블록을 식별하는 단계와 블록을 스와핑하는 단계를 포함할 수 있다.
블록이 식별된 후에 블록을 스와핑하는 과정이 수행될 수 있다. 스와핑 이후에, 두 문자열 간의 공통된 부분 문자열인 블록들은 두 문자열 내에서 동일한 위치와 순서를 가지게 될 것이다. 블록 스왑 알고리즘은 편집 거리 알고리즘과 같이 O (mn)의 러닝 타임을 상한으로 갖지만, 블록 스왑 알고리즘이 적용된 경우는 편집 거리 알고리즘만 적용된 경우와 비교하면 상당히 진전된 결과를 보인다.
블록 스왑 알고리즘을 적용하기 위하여 우선 블록을 식별하는 단계가 선행되어야 한다. 블록을 식별하는 단계에서 두 문자열 사이의 블록을 식별하기 위하여 대각선(diagonal) 기술과 함께 편집 거리의 매트릭스가 룩업 테이블로서 사용될 수 있다. 블록이 발견될 때, 스와핑 동작의 결과를 최적화하기 위하여 중단점(cut point)이 계산될 수 있다. 하지만, 블록을 식별하기 위하여 단순히 룩업 테이블을 사용하는 경우보다 방향성 비순환적 단어 그래프(Directed acyclic word graph, DAWG)를 사용하는 경우에 더 진전된 결과가 도출될 수 있다.
DAWG는 결정적 유한 상태 오토마타(deterministic finite state automata, DFA)의 한 종류이고, DAWG는 특정 문자열의 부분 문자열의 집합을 나타낼 수 있다. DAWG가 사용되면, 임의의 문자열 내에서 문자열의 길이에 비례하는 시간 동안 어떠한 부분 문자열의 출현도 식별될 수 있다. DAWG는 서픽스(suffix) 트리와 동일한 특징을 많이 공유하는 유사한 트리 구조일 수 있다. 따라서 DAWG는 서픽스 트리의 일종으로 볼 수 있다. 서픽스 트리는 트리의 각 노드가 문자열의 각 문자에 대응하고, 엣지를 따라 리프 노드로부터 루트 노드로 각 노드에 대응하는 문자가 연결되는 경우 문자열의 고유한 부분 문자열에 대응되는 트리 구조를 지칭할 수 있다.
DAWG를 사용하는 알고리즘은 단어 그래프의 선형적인 구축(construction)과 인터벌 트리의 이진 검색 덕분에 O(m + n + σ log σ)의 전처리 시간을 가질 수 있다. 여기서 σ는 처리되어야 하는 인터벌의 수를 의미한다. 또한, DAWG는 가능한 많은 블록을 지원할 수 있다. 하지만, DAWG는 블록들이 서로 겹치거나 서로를 덮는 경우에 모호성 문제에 직면할 수 있다. 모호성 문제란 블록에 대응하는 인터벌이 복수인 경우 상기 블록에 대해 어떤 인터벌을 선택할 지의 문제를 의미한다.
이러한 문제를 해결하기 위해, 본원에서는 계층적 인터벌 트리가 제시된다. 계층적 인터벌 트리는 용인될 수 있는 시간 내에 인터벌들을 처리할 수 있는 데이터 구조일 수 있다. 이것은 인터벌 트리의 일종이며, 여기서 부모 노드와 자식 노드의 관계는 인터벌들 간의 포함(cover) 상태를 통하여 분명해진다. 다시 말하면, 인터벌 a가 인터벌 b를 포함한다면 인터벌 a에 대응하는 노드는 인터벌 b에 대응하는 노드의 직접적 또는 간접적 부모 노드가 될 수 있다. 여기서 포함된다는 것은 커버된다(cover)는 것을 지칭할 수 있다. 이 계층적 인터벌 트리는 삽입과 삭제 오퍼레이션 양자에 적용될 수 있다.
본원에서 이후 개시되는 실시예들은 실제적인 DNA 시퀀스 대신에 임의의 두 문자열인 비교 문자열 "adbccadbc" (110)과 입력 문자열 "adbcbccad" (120)을 통해 설명된다. 즉 비교 문자열과 입력 문자열을 매칭하는 방법이 개시된다. 이러한 예시가 문자열 비교 방법을 정확하면서도 보다 간단하게 설명할 수 있고, 블록 스왑을 수행하는 경우에 발생되는 모호성 문제를 보다 잘 설명할 수 있기 때문이다. 이하 문자열은 스트링으로 지칭될 수 있다. 이하, 비교 문자열은 Dw 문자열(Dw string), 입력 문자열은 시뮬레이션된 문자열(simulated string)이라고 지칭될 수 있다.
도 2는 일실시예에 따른 두 문자열을 비교하는 방법을 나타내는 순서도이다.
일실시예에 따른 문자열 비교 방법은 DAWG를 기초로 비교 문자열로부터 모든 부분 문자열을 찾고, 입력 문자열과 비교 문자열 간의 공통된 부분 문자열인 블록을 찾아 블록 리스트에 저장한 후, 비교 문자열로부터 계층적 인터벌 트리를 구축하여 입력 문자열의 각 블록 마다 인터벌을 선택하여, 입력 문자열의 블록들이 비교 문자열의 블록들과 동일한 위치와 순서를 갖도록 스왑하는 단계를 포함한다.
단계(210)에서 일실시예에 따른 문자열 비교 장치는 비교 문자열의 모든 부분 문자열을 포함하는 방향성 비순환적 단어 그래프를 생성할 수 있다.
DAWG는 복수의 노드 및 복수의 방향성 엣지를 포함할 수 있다. 여기서 복수의 노드는 상기 부분 문자열의 마지막 문자(suffix)에 대응할 수 있다. 또한, 방향성 엣지를 따라 복수의 노드가 연결되는 경우 연결된 노드 또는 에지들은 부분 문자열에 고유하게 대응할 수 있다. 따라서 문자열 비교 장치는 DAWG를 통하여 중복되는 일 없이 고유한 부분 문자열을 모두 검색할 수 있다.
단계(220)에서 일실시예에 따른 문자열 비교 장치는 방향성 비순환적 단어 그래프를 이용하여 입력 문자열과 비교 문자열 간의 공통된 부분 문자열에 대응하는 블록을 블록 리스트에 저장할 수 있다.
단계(230)에서 일실시예에 따른 문자열 비교 장치는 블록 리스트와 비교 문자열에 대한 계층적 인터벌 트리를 이용하여 입력 문자열의 블록을 스왑할 수 있다.
구체적으로, 단계(231)에서 일실시예에 따른 문자열 비교 장치는 입력 문자열의 블록에 대응하는, 비교 문자열에 포함된 적어도 하나 이상의 인터벌을 이용하여 인터벌 트리를 생성할 수 있다.
단계(232)에서 일실시예에 따른 문자열 비교 장치는 인터벌 트리를 이용하여 입력 문자열의 블록에 대응하는 인터벌을 선택할 수 있다. 이때, 일실시예에 따른 문자열 비교 장치는 복수의 인터벌 간의 겹침(intersection)이 가장 작은 인터벌을 선택할 수 있다.
구체적으로, 제1 블록은 이미 인터벌이 선택된 블록이고 제2 블록은 현재 인터벌을 선택하려는 블록이고, 제1 인터벌과 제2 인터벌은 상기 제1 블록에 대응하고 제3 인터벌은 제2 블록에 대응한다고 가정할 수 있다. 이때, 일실시예에 따른 문자열 비교 장치는 입력 문자열의 제1 블록에 대하여 제1 인터벌이 선택된 경우, 입력 문자열의 제2 블록에 대하여 제2 인터벌에 대응하는 노드의 적어도 하나 이상의 자식 노드 중에서 제3 인터벌을 선택할 수 있다. 이는 도 8에서 설명되는 선택 알고리즘에 대응된다.
일실시예에 따른 문자열 비교 장치는 선택된 인터벌에 기초하여 입력 문자열의 블록의 위치와 비교 문자열의 블록의 위치가 대응하도록 입력 문자열의 블록을 스왑할 수 있다.
단계(240)에서 일실시예에 따른 문자열 비교 장치는 스왑된 입력 문자열과 비교 문자열 간의 유사성을 판단할 수 있다. 구체적으로, 단계(241)에서 일실시예에 따른 문자열 비교 장치는 스왑된 입력 문자열과 비교 문자열 간의 편집 거리를 판단할 수 있다. 여기서, 편집 거리는 스왑된 입력 문자열 내에서 블록의 위치가 비교 문자열에서 해당 블록의 위치와 동일해지도록 스왑된 입력 문자열에 적용되는 오퍼레이션에 대응하는 수치의 합의 최소값에 대응할 수 있다. 또한, 오퍼레이션은 문자에 대한 삽입, 삭제 및 교체를 포함할 수 있다.
이하의 도면에서는 도 1에서 제시된 두 문자열인 비교 문자열 "adbccadbc"과 입력 문자열 "adbcbccad"을 통해 두 문자열을 비교하는 방법의 각 단계가 구체적으로 설명된다.
도 3은 일실시예에 따른 비교 문자열 "adbccadbc"의 DAWG를 도시한 도면이다.
단계(210)는 도 3을 통해 설명될 수 있다. 도 3은 비교 문자열 "adbccadbc"의 모든 부분 문자열을 찾기 위해 도입된 DAWG를 나타낸다. "adbccadbc"의 서브 문자열의 엔드-셋 도면의 각 노드는 부분 문자열의 마지막 문자의 위치를 나타낼 수 있다. 예를 들어, 노드[2,7] (304)는 부분 문자열 "adb", "db" 및 "b"이 문자열 "adbccadbc"에서 위치 2와 7에서 끝난다는 것을 나타낸다. 빈(empty) 문자열 는 빈 문자열의 부분 문자열이고 그것은 임의의 문자열의 모든 위치에서 끝난다. 더미(dummy) 루트 노드 [0,1,2,3,4,5,6,7,8] (301)는 를 나타내기 위해 삽입될 수 있다.
DAWG에서 모든 비 루트 노드에서 루트 노드까지의 경로는 문자열의 고유한 서브 문자열에 대응될 수 있다. 다시 말하면, DAWG는 복수의 노드 및 복수의 방향성 엣지를 포함할 수 있다. 여기서 복수의 노드는 상기 부분 문자열의 마지막 문자(suffix)에 대응할 수 있다. 또한, 방향성 엣지를 따라 복수의 노드가 연결되는 경우 연결된 노드 또는 에지들은 부분 문자열에 고유하게 대응할 수 있다.
예를 들어, 노드(307), 노드(306), 노드(304) 및 노드(301)를 연결한 경로는 부분 문자열 "bcc"에 대응한다. 또한, 부분 문자열 "bcc"는 DAWG의 다른 경로에 의해 대응될 수 없다. 즉, 부분 문자열 각각은 오직 하나의 경로에만 대응된다. 따라서, DAWG를 통해 입력 문자열의 부분 문자열은 한 번씩만 고려되므로 수행 시간이 단축되는 효과를 얻을 수 있다. DAWG를 사용한 블록 스왑의 수행 시간은 도 4에서 자세하게 설명된다.
DAWG는 입력 문자열의 길이에 비례하는 시간 내에 구축될(built) 수 있다. DAWG는 최대 2n-2 스테이트 (또는 상태)와 3n-4 트랜지션 (또는 전이) 에지(edge)를 포함할 수 있고, n은 입력 문자열의 길이를 나타낼 수 있다. 이처럼 DAWG는 선형적인 스테이트와 트랜지션 에지 만으로 동작할 수 있으므로 메모리 측면에서 문자열 매칭에 있어서 좋은 효율을 나타낼 수 있다.
도 4는 일실시예에 따른 DAWG를 이용하여 선형 시간 안에 블록을 스와핑하는 과정을 나타낸 도면이다.
블록들을 선형 시간에서 스왑하기 위하여, 원본 입력 문자열(410)과 동일한 크기의 초기화되지 않은 새로운 문자열이 생성된다. 여기서 초기화되지 않았다는 것은 새로운 문자열의 각 위치에 대응하는 메모리에 아직 특정 문자가 정해지지 않은 것을 의미할 수 있다.
새로운 문자열을 초기화하기 위하여, 우선 원본 입력 문자열(410) 내의 모든 블록들은 그들의 조정된 위치에 기초하여 새로운 문자열로 복사된다. 블록의 복사가 수행된 후에, 새로운 문자열에서 초기화되지 않은 캐릭터들은 입력 문자열(410) 내의 임의의 블록에 속하지 않은 캐릭터들, 즉 입력 문자열(410)과 비교 문자열 (도시되지 않음)의 공통되지 않은 부분 문자열에 의해 왼쪽에서 오른쪽으로 복사된다.
여기서 복사된 새로운 문자열은 스와핑된 문자열(420)이라고 지칭될 수 있다. 결론적으로, 스와핑된 문자열(420)은 원본 입력 문자열(410)이 조정된 위치를 기초로 스왑된 문자열을 의미할 수 있다. 즉, 원본 입력 문자열(410)과 비교 문자열의 공통된 부분 문자열인 블록을 복사하는 과정과 원본 입력 문자열(410)과 비교 문자열의 공통되지 않은 부분 문자열을 복사하는 과정을 통틀어 입력 문자열을 스왑하는 과정이라고 지칭할 수 있다.
문자열 상의 모든 캐릭터는 일정 시간 내에 도달될 수 있고, 그래서 복사 오퍼레이션의 총 수는 n = |S|이다. 결과적으로, 스와핑 시간은 O(n)이다. DAWG에 의해 블록들을 찾는 것은 수행 시간에 있어서 개선된 결과를 보인다는 것이 입증되었지만, 가능한(probable) 인터벌 선택에서의 모호성 문제가 발생할 수 있다. 여기서 "가능한"이라는 단어는 각 블록이 복수의 인터벌로 스왑될 확률을 가리킨다. 다시 말하면, 각 블록에 대응하는 인터벌의 수는 복수이므로, 블록이 어떠한 인터벌로 스왑될지의 문제, 즉 블록이 어떠한 인터벌로 복사될 지의 문제가 모호성 문제라고 지칭될 수 있다. 각 블록이 어떠한 인터벌로 복사되는 지는 수행 시간에 영향을 미칠 수 있다.
도 5는 일실시예에 따른 블록에 대응하는 인터벌 선택의 모호성을 설명하기 위한 도면이다.
입력 문자열과 비교 문자열 간의 공통된 부분 문자열인 블록이 발견될 수 있다. 이하 비교 문자열은 Dw 문자열(510)로 지칭될 수 있고, 입력 문자열은 시뮬레이션된 문자열(520)에 대응할 수 있다. 이때, DAWG를 통하여 발견된 블록, 즉 Dw 문자열(510)과 시뮬레이션된 문자열(520) 간의 공통된 부분 문자열이 Dw 문자열(510) 내의 어디에 위치하는 지와 얼마나 많이 존재하는 지가 파악될 수 있다. Dw 문자열(510) 내에서 각 블록이 위치하는 복수의 범위는 각각 가능한 인터벌이라고 지칭될 수 있다. 어떤 케이스에서, 각각의 블록은 하나 이상의 가능한 인터벌을 가질 수 있으며, 각 블록을 어떤 인터벌로 스왑할 지 선택하는 것은 수행 시간의 효율성에 영향을 미칠 수 있다.
도 5는 가능한 인터벌 선택의 모호성을 보여준다. 문자열은 왼쪽부터 식별 번호가 0부터 순차적으로 부여될 수 있다. 블록 "adbc"는 [0; 3] 와 [5; 8]에서 두 개의 가능한 인터벌들을 가진다. "adbc"에 대해 [0; 3]이 선택되는 경우에, 두 번째 블록 "bcc"가 위치할 수 있는 인터벌은 [2; 4] 밖에 없는데 "adbc"에 대하여 이미 겹치는 부분을 가지는 인터벌 [0; 3]이 선택되었기 때문에, 블록 "bcc"는 스왑될 위치가 존재하지 않을 것이다. 가장 적절한 인터벌을 선택하는 것은 추가적인 단계를 요구하지만 결과적으로 스와핑의 효율성을 개선할 수 있다. 최적의 인터벌을 선택하는 것은 인터벌 그래프 또는 인터벌 트리에 의해 달성될 수 있다.
도 6a는 일실시예에 따른 왼쪽 엔드 포인트를 기준으로 정렬된 인터벌들을 도시한 도면이다. 도 6b는 일실시예에 따른 도6a에 대한 계층적 인터벌 트리를 도시한 도면이다.
도 6a에서 a에서 j에 대응하는 선은 인터벌들에 대응한다. 각 인터벌은 0에서 N번째까지의 위치를 나타내는 축에 대응하여 정렬되어 있다. 각 인터벌들은 포함 (cover)되는 관계, 일부만 겹치는 관계 또는 전혀 겹치지 않는 관계일 수 있다. 예를 들어, a와 b는 포함관계이며 f와 d는 일부만 겹치는 관계이고 a와 c는 전혀 겹치지 않는 관계이다. 이러한 인터벌간의 관계를 시각적으로 표현한 데이터 구조로 인터벌 그래프와 인터벌 트리가 있다.
인터벌 그래프에서 각 노드는 인터벌을 나타내며, 두 인터벌의 교차 관계는 두 노드 사이의 링크에 의해 표현된다. 블록은 하나 이상의 인터벌을 가질 수 있으며, 이러한 인터벌들에 대응하는 노드들은 상호간에 링크를 가진다. 각 블록에 대한 최적 선택의 문제는 방향성 없는(undirected) 그래프의 최대 웨이트 세트를 찾는 문제일 수 있다. 이 문제를 푸는 효율적인 방법 중 하나는 인터벌 그래프를 대응하는 선 그래프로 바꾸고 Gabow의 알고리즘을 사용하여 최대 매칭 문제를 푸는 것이다. 이 방법의 복잡도는 O(n(m + n logn))이고, 여기서 n과 m은 각각 정점(vertices)과 에지(edges)의 수이다. 여기서 에지는 링크에 대응할 수 있고, 정점은 노드에 대응할 수 있다.
인터벌 그래프는 효율성에 있어서 최적의 솔루션을 제공할 수 있다. 하지만, 본원에서는 효율성과 성능 사이의 균형을 유지하기 위하여 인터벌 트리 알고리즘을 제안한다. 인터벌 트리는 인터벌 그래프보다 더욱 간단하고 구현하기 쉽다. 트리비얼(trivial) 인터벌 트리는 삭제 및 삽입 오퍼레이션에 의해 선택 모호성 문제를 해결할 수 있다. 이 방법은 O(σlog(σ))의 상한을 가지며, 여기서 σ는 처리되어야 하는 가능한 인터벌의 수이다.
트리비얼 인터벌 트리는 삽입과 삭제 오퍼레이션을 사용하여 블록의 인터벌을 저장한다. 트리비얼 인터벌 트리의 구조적 특징 덕분에, 인터벌들 사이의 교차점을 식별하는 것은 단지 n log(n) 에 비례하는(linearithmic) 시간이 걸린다. 블록에 대한 가장 적절한 가능한 인터벌은 다른 인터벌들과 최소한의 교차점을 가지는 인터벌일 수 있다. 트리비얼 인터벌 트리가 구축되는 동안 블록을 찾는 과정도 수행되며, 마지막 블록이 처리될 때 블록 리스트 역시 사용될 준비가 완료될 수 있다.
그러나, 블록에 대하여 선택된 가능한 인터벌은 해당 블록이 발견되는 시점에서만 가장 적절한 것일 수 있고, 그 이후 더욱 적절한 잠재적인 가능한 인터벌이 발견될 수 있다. 즉, 임의의 블록에 대하여 오직 하나의 가능한 인터벌이 저장될 수 있기 때문에 특정 시점의 인터벌의 선택은 임시적인 것일 수 있다. 본원에서는 블록의 모든 인터벌들이 동시에 저장되는 것을 허용하도록 하는 개선된 트리 구조가 제안된다. 이에 따라 블록을 찾는 단계가 완료된 경우에 인터벌 선택에 있어서 더 나은 결정을 내릴 수 있는 충분한 정보가 제공될 수 있다. 여기서 개선된 트리 구조는 계층적 인터벌 트리를 포함할 수 있다.
일실시예에 따른 문자열 비교 장치는 입력 문자열의 블록에 대응하는, 입력 문자열에 포함된 적어도 하나 이상의 인터벌을 이용하여 인터벌 트리를 생성할 수 있다.
구체적으로, 도 6b에 도시된 계층적 인터벌 트리는 = (, )인 스패닝(spanning) 트리이고, 여기서 부모 노드와 자식 노드의 관계는 인터벌들 간의 포함(cover) 상태를 통하여 분명해진다. 즉, 인터벌 a가 인터벌 b를 포함한다면 인터벌 a에 대응하는 노드는 인터벌 b에 대응하는 노드의 직접적 또는 간접적 부모 노드일 수 있다.
트리 S에서 노드는 인터벌에 대응한다. 편의를 위해, 본원에서는 인터벌 및 이에 대응하는 스패팅 트리 상의 노드가 동일한 문자를 통하여 표현된다. 따라서, 노드 a가 노드 b를 커버한다는 것은 인터벌 a가 인터벌 b를 커버한다는 것으로 이해될 수 있다.
스패닝 트리 S에 대하여, 오직 a가 인터벌 b를 커버하는 가장 큰 좌측 엔드 포인트를 가지는 인터벌인 경우에만, 노드 b는 노드 a의 직접적인 자식 노드가 될 수 있다.
계층적 인터벌 트리는 가상의 가장 큰 인터벌에 대응하는 더미 루트 노드를 포함할 수 있다. 더미 루트 노드에 대응하는 인터벌은 다른 모든 인터벌들을 커버할 수 있다.
계층적 인터벌 트리는 정렬된(ordered) 트리일 수 있다. 다시 말하면, 만일 j와 b가 동일한 부모 노드 a를 가지고 j의 좌측 엔드 포인트가 b의 좌측 엔드 포인트보다 더 작은 경우라면 노드 j가 노드 b의 좌측 형제 노드일 수 있다.
예를 들어, 노드 a는 d를 커버하지만 d는 b의 직접인 자식 노드이며 a의 직접적인 자식 노드는 아니다. 이것은 b가 d를 커버하는 것 중에서 가장 큰 좌측 엔드 포인트를 가지기 때문이다. 노드 j는 왼쪽 형제 노드 f와 오른쪽 형제 노드 b를 가진다.
이러한 특성을 비교 문자열에 대한 가지는 계층적 인터벌 트리와 블록 리스트를 이용하여 단계(230)에서 일실시예에 따른 문자열 비교 장치는 입력 문자열의 블록을 스왑할 수 있다.
도 7은 일실시예에 따른 두 개의 동일한 서브 트리를 가지는 계층적 인터벌 트리를 도시한 도면이다.
도 7은 도 8의 선택 알고리즘을 도출하기 위한 정리 1를 설명하기 위하여 도시된다.
계층적 인터벌 트리의 특성으로부터, 트리의 각각의 가지에 대해 하나 이상의 선택된 인터벌은 존재하지 않는다. 그 이유는 동일한 가지, 또는 리프에서 루트 노드로의 경로에서 두 인터벌들 중 하나는 다른 하나를 커버할 것이기 때문이다. 여기서 최소한의 교차점을 가지는 인터벌을 선택하는 것은 최대 독립 가지 집합을 찾는 문제가 된다. 추가적으로 동일한 블록의 두 개 이상의 가능한 인터벌들은 저장되므로, 오직 그들 중 하나만이 선택될 수 있다.
여기서 더 나은 결과를 도출하는 인터벌을 선택하는 것은 두 가지 요인에 의존한다. 두 가지 요인이란 그것의 자손들의 수와 교차하는 인터벌들의 수를 의미한다. 이 중 전자에 대하여, 동일한 블록에 대응하는 인터벌들에 대응하는 노드들은 동일한 자손들의 수를 가진다. 이는 정리 1로 표현될 수 있다.
정의. 스패닝 트리 S의 노드에서 서브 트리는 S의 서브 트리이며, 여기서 스패닝 트리 S의 노드란 루트 노드를 가리킨다. 이때, 노드가 블록에 속한다는 것은 노드가 그 블록의 가능한 인터벌을 나타낸다는 것을 의미한다.
정리 1. 동일한 블록에 속하는 두 노드에서 서브 트리들은 동일하다.
증명. i1이 첫 번째 서브 트리 루트에 의해 표현된 인터벌이고 i2가 두 번째 서브 트리 루트에 의해 표현된 인터벌이라고 할 때, i1=i2라는 것은 그들이 동일한 블록의 가능한 인터벌들이라는 것을 의미한다. 추가적으로, I1 = {i11, i12,..., i1k}가 첫 번째 서브 트리의 자식 노드에 의해 표현되는 인터벌들의 집합이고 I2 = {i21, i22,..., i2h}가 두 번째 서브 트리의 자식 노드에 의해 표현된 인터벌들의 집합이라고 하자. 오직 임의의 블록 b가 Dw 문자열 상의 위치 i1p에서 발생하는 경우에만, 인터벌 i1p ∈ I1은 b의 가능한 인터벌이고, i1p ⊂ i1가 된다. 동일한 블록의 두 개의 가능한 인터벌들이 Dw 문자열 상의 두 개의 범위를 가리리키므로, (여기서 이러한 범위의 두 개의 서브 문자열은 동일함) 결과적으로 b는 문자열의 범위 i2 내에서 또 다시 출현해야 한다. 그러므로 블록 b는 i2q ⊂ i2이고 i2q ∈ I2인 또 다른 가능한 인터벌 i2q를 가질 것이다. 모든 i1j에 대하여 동일한 논의를 사용한다면 두 집합 I1과 I2가 동일하다는 결론에 이를 수 있고, 더욱이 모든 1 ≤ ≤ = h 에 대하여 i1j ≡ i2j가 된다. i1j와 i2j로부터 시작되는 서브 트리의 모든 쌍에 대하여, 동일한 방법이 수행되어 그들이 동일하다는 것이 증명될 수 있다. 마지막으로, 동일한 블록에 속하는 두 서브 트리는 동일하다.
도 7는 이러한 주장에 대한 명백한 예시를 제공한다. 여기서, 블록 "adbc"는 루트(700)의 두 개의 자식들(701, 702)에 의해 표현되는 두 개의 인터벌들을 가지고, 그들로부터 시작되는 그 서브 트리들은 동일하다. 정리 1에 의해 인터벌을 선택하는 것은 두 가지 요인 중 인터벌에 대응하는 노드의 자손들의 수는 무시될 수 있다.
도 8은 일실시예에 따른 도 3에 대하여 블록을 스왑하기 위한 계층적 인터벌 트리를 도시한 도면이다. 도 9는 일실시예에 따른 스와핑 이후 동일해진 두 개의 문자열을 도시한 도면이다.
단계(230)는 도 8과 도 9를 통하여 설명될 수 있다. 단계(230)에서 일실시예에 따른 문자열 비교 장치는 블록 리스트와 비교 문자열에 대한 계층적 인터벌 트리를 이용하여 입력 문자열의 블록을 스왑할 수 있다. 구체적으로, 일실시예에 따른 문자열 비교 장치는 선택된 인터벌에 기초하여 입력 문자열의 블록의 위치와 비교 문자열의 블록의 위치가 대응하도록 입력 문자열의 블록을 스왑할 수 있다.
정리 1 덕분에, 인터벌 선택은 이제 오직 그것이 교차점을 가지는 인터벌의 수에 의존한다. 즉, 일실시예에 따른 문자열 비교 장치는 복수의 인터벌 간의 겹침이 가장 작은 인터벌을 선택할 수 있다.
이에 따라, 가능한 인터벌 선택의 모호성을 해결하기 위한 알고리즘은 다음과 같다:
선택 알고리즘:
1) 루트 노드로부터, 각 블록에 대해 하나의 노드가 선택될 수 있다. 블록이 하나 이상의 노드를 가진다면, 가장 작은 교차점을 가지는 노드가 선택될 수 있다.
2) 임의의 블록에 대해 인터벌이 선택되지 않은 경우에, 선택되지 않은 노드에 대하여, 그들의 대응하는 그들의 자식 노드들이 고려될 수 있다. 고려될 수 있는 노드가 존재하지 않을 때까지 반복적으로 수행될 수 있다.
다시 말하면, 제1 블록은 이미 인터벌이 선택된 블록이고 제2 블록은 현재 인터벌을 선택하려는 블록이고, 제1 인터벌과 제2 인터벌은 상기 제1 블록에 대응하고 제3 인터벌은 제2 블록에 대응한다고 가정하는 경우에, 일실시예에 따른 문자열 비교 장치는 입력 문자열의 제1 블록에 대하여 제1 인터벌이 선택된 경우, 입력 문자열의 제2 블록에 대하여 제2 인터벌에 대응하는 노드의 적어도 하나 이상의 자식 노드 중에서 제3 인터벌을 선택할 수 있다.
정리 2. 선택 알고리즘은 종료되기까지 수행 시간이 O (σ)가 걸린다.
증명. 트리가 구축되는 동안에, 각 노드의 교차점의 수가 마킹될 수 있고, O (1)의 시간 내에 최소한의 교차점을 가지는 인터벌이 선택될 수 있다. 선택된 블록에 속하는 모든 남아있는 노드들은 왼쪽에서 오른쪽으로 스캔되어 알고리즘의 성능이 보장될 수 있다. 이러한 전략 덕분에, 각 노드는 기껏해야 한 번 고려되며, 고려되는 전체 노드들은 σ와 같거나 작을 수 있다.
동일한 블록에 속하는 노드들은 실제로 그 노드들에 대응하는 인터벌들의 교차점의 수에 의해 정렬될 수 있고 순서대로(in succession) 고려될 수 있다. 이러한 전략은 결과를 개선할 수 있지만, 동시에 알고리즘의 복잡도가 O(σlog σ)까지 높아질 수 있다. 이러한 복잡도는 트리 구축의 복잡도와 유사하지만 그 구현은 훨씬 어려울 수 있다.
이하 도 8에서는 제시된 알고리즘에 따라 블록이 선택되는 예가 설명되고, 구체적으로 도 5의 모호성 문제에 대한 솔루션이 예시로서 설명된다. 블록 "adbc"에 대하여 두 번째 가능한 인터벌 [5; 8] (802)은 다른 인터벌들([0; 3], [2; 4]) (801, 803)과 아무런 교차점을 가지지 않기 때문에 선택될 수 있다. 그 후에, 블록 "bcc"에 대하여 인터벌 [2; 4] (803)이 선택될 수 있다. 블록 "ad"에 대하여, "adbc"에 대한 첫 번째 인터벌 [0; 3] (801)은 선택되지 않았으므로 자식 노드가 고려될 수 있다. 따라서 블록 "ad"에 대하여 인터벌 [0; 1] (804)이 선택될 수 있다.
이후에 도 9에서 스와핑 과정이 설명된다. 구체적으로, 원본 입력 문자열(910)과 동일한 크기의 초기화되지 않은 새로운 문자열이 생성된다. 새로운 문자열을 초기화하기 위하여, 우선 원본 입력 문자열(910) 내의 모든 블록들은 그들의 조정된 위치에 기초하여 새로운 문자열로 복사될 수 있다. 여기서 조정된 위치란 원본 입력 문자열의 각 블록에 대하여 선택된 비교 문자열 상의 인터벌이 나타내는 위치를 의미할 수 있다.
블록의 복사가 수행된 후에, 새로운 문자열에서 초기화되지 않은 캐릭터들은 원본 입력 문자열(920) 내의 임의의 블록에 속하지 않은 캐릭터들, 즉 원본 입력 문자열(920)과 비교 문자열 (도시되지 않음)의 공통되지 않은 부분 문자열에 의해 왼쪽에서 오른쪽으로 복사된다. 하지만, 도 9의 예시에서는 모든 부분 문자열이 공통된 부분 문자열인 블록에 해당하므로 이 과정이 생략될 수 있다.
복사된 새로운 문자열은 스와핑된 문자열(910)이라고 지칭될 수 있다. 스와핑된 문자열(910)은 원본 입력 문자열(920)이 조정된 위치를 기초로 스왑된 문자열을 의미할 수 있다. 선택된 인터벌에 기초하여 각 블록의 스와핑이 완료된 이후에, 두 문자열인 비교 문자열 "adbccadbc" (도시되지 않음)과 원본 입력 문자열(920) "adbcbccad"의 스와핑된 문자열(910) "adbccadbc"은 도 9에 도시된 것처럼 동일해질 것이다.
도 10은 일실시예에 따른 두 개의 문자열을 비교하는 장치를 도시한 도면이다.
일실시예에 따른 문자열 비교 장치(1000)는 프로세서(1010)와 메모리(1020)를 포함할 수 있다. 프로세서(1010)는 생성부(1011), 저장부(1012), 편집부(1013) 및 판단부(1014)를 포함할 수 있다.
생성부(1011)는 비교 문자열의 모든 부분 문자열을 포함하는 DAWG를 생성한다. 저장부(1012)는 DAWG를 이용하여 입력 문자열과 비교 문자열 간의 공통된 부분 문자열에 대응하는 블록을 메모리(1020) 상의 블록 리스트에 저장한다. 편집부(1013)는 블록 리스트와 입력 문자열에 대한 계층적 인터벌 트리를 이용하여 입력 문자열의 블록을 스왑한다. 판단부(1014)는 스왑된 입력 문자열과 비교 문자열 간의 유사성을 판단한다.
이하 도 11과 도 12에서는 일실시예에 따른 문자열 비교 방법의 성능에 대한 이론적 예측과 실제 실험 결과가 설명된다.
도 11은 스노트 규칙 세트(Snort rule set)에서 블록 리스트 크기에 대한 경우의 수를 나타낸 그래프이다. 도 12는 특정 채소의 DNA 시퀀스에 대해 블록을 발견하기 위해 DAWG를 사용하는 경우 포함의 경우의 수, 오버래핑의 경우의 수 및 발견된 인터벌의 수를 나타낸 그래프이다.
먼저, 일실시예에 따른 문자열 비교 방법의 성능에 대한 이론적 예측이 검토된다. 결론적으로, 이론적 예측은 계층적 인터벌 트리는 O (σ log σ)의 수행시간으로 온라인으로 구축될 수 있다는 것이다. 이를 도출하기 위해 이하에서 정리 3, 정리 4 및 정리 5의 증명 과정이 설명된다. 이후 실제 실험 결과가 설명된다.
정리 3. 만일 인터벌 x가 스패닝 트리 S의 인터벌 y를 커버한다면, x는 y의 어떠한 형제들에 의해서도 커버될 수 없다.
증명. x가 y의 형제 노드 x에 의해 커버된다고 가정하면 z는 y를 커버할 것이다. z와 y는 동일한 부모 노드를 가지기 때문에 z의 좌측 엔드 포인트는 부모(y)의 좌측 엔드 포인트보다 더 크며, 이것은 부모(y)는 반드시 y를 커버하는 인터벌 중에서 가장 큰 좌측 엔트 포인트를 가지는 계층적 인터벌 트리의 정의와 모순된다. 따라서, 인터벌 x가 스패닝 트리 S의 인터벌 y를 커버한다면, x는 y의 어떠한 형제들의 의해서도 커버될 수 없다. 따라서 정리 3이 증명된다.
정리 4. 삽입 오퍼레이션은 O (log s) 의 러닝 타임이 걸리고, 여기서 s는 스패닝 트리의 크기이다.
증명. 새로운 인터벌 x를 트리에 삽입하는 것은 두 개의 단계 (단계 1, 단계 2)를 필요로 할 수 있다. 단계 1은 x를 커버하는 가장 큰 좌측 엔드 포인트를 가지는 인터벌 ∈ 을 식별하는 것이고, 단계 2는 x에 의해 커버되는 y에 대응하는 노드의 모든 자식 노드들을 발견하는 것이며, 여기서 이 노드들은 x에 대응하는 노드의 자식 노드들이 된다.
단계 1에서 y를 식별하기 위하여 루트 노드에서 시작하여 루트 노드의 자식 노드들이 오른쪽에서 왼쪽으로 검색되고 x를 커버하는 첫 번째 노드가 검색될 수 있다. 동일한 검색 전략이 이 첫 번째 노드의 자식들에 대해 수행되어 다른 노드가 발견될 수 있다. 이러한 과정은 아무런 노드가 발견되지 않을 때까지 반복적으로 수행될 수 있으며, 발견되는 마지막 노드가 인터벌 y에 대응하는 노드가 될 수 있다.
단계 2는 마지막 루프 동안에 달성될 수 있다. 이는 정리 3에 의하여, x에 의해 커버된 인터벌이 발견될 때마다 이것은 그 인터벌의 모든 형제들이 x를 커버할 수 없다는 것을 암시적으로 나타내므로, 이것이 마지막 루프라는 것을 나타내기 때문이다. x의 자식 노드들은 마지막 루프에서 발견되는 연속적인 형제 노드들이므로, 단계 2는 단계 1이 끝나는 시점에 시작될 수 있다.
평균적인 경우에, 스패닝 트리는 트리 검색의 총 시간이 O (log s)가 걸리도록 조정될 수 있다. 최악의 경우로서, 스패닝 트리가 링크드 리스트의 형태인 경우에, 트리 내의 인터벌들의 좌측 엔드 포인트의 어레이가 저장될 수 있고, 이진 검색(binary searching)을 사용하여 y가 발견될 수 있다. 어레이 상의 각 엘레먼트를 검색하는 시간이 일정하다고 가정하는 경우에, 이진 검색(binary searching)을 사용하여 y가 발견되는 시간은 O (log s) 가 걸리며, 어레이를 위해 필요한 추가적인 메모리는 O (s)이고, 이것은 인터벌 트리와 유사하다. 최악의 경우에, 단계 2는 완료되기까지 O (1) 의 시간이 걸릴 수 있다. 전체적으로, 삽입 오퍼레이션 시간은 O (log s)이고 O (s)의 공간을 필요로 한다. 따라서 정리 4가 증명된다.
정리 5. 계층적 인터벌 트리는 O(σ log σ)의 수행시간으로 온라인으로 구축될 수 있고, 여기서 ?는 트리에 삽입되는 인터벌들의 수이다.
증명. 정리 4에 의하여, 각각의 삽입은 O(log s)의 시간이 걸리고 삽입을 위한 전체 시간은 다음과 같은 식으로 추정될 수 있다.
위 식을 사용하면, O(log σ!) = O(σ log σ)가 되므로, 정리 5이 증명된다. 따라서, 일실시예에 따른 계층적 인터벌 트리를 이용한 문자열 비교 방법은 O(σ log σ)의 러닝 타임을 가지면서 매우 효율적으로 선택 모호성 문제를 해결할 수 있다는 것이 증명된다. 일실시예에 따른 문자열 비교 방법의 전처리 단계를 위해 요구되는 공간은 O (σ)일 수 있다. 또한, 실험 결과 사실상 거의 대부분의 케이스에서 모호성이 그렇게 집중적이지 않고 서로를 오버랩하거나 커버하지 않았다. 게다가, DNA 시퀀스에 대한 실험은 블록 사이즈의 더 낮은 바운드에 대하여 객관적인 시각을 제공하며, 그러한 더 낮은 바운드는 용인 가능한 수행 시간 내에 일실시예에 따른 문자열 비교 방법이 처리되도록 조정될 수 있다.
m을 Dw 문자열의 길이로 n을 시뮬레이션된 문자열의 길이로 가정하면, Dw와 시뮬레이션을 구축하는 시간은 O (n + m) 이다. 정리 5과 2 덕분에, 전처리를 위한 전체 시간은 O (n + m + σ log σ)이다. 편집 거리는 O (mn)의 점근적인 상한을 가지므로, DWAG는 언제나 더 짧은 문자열을 사용하여 구축되기 때문에 일실시예에 따른 문자열 비교 방법은 σ log σ ≤ O (n^2) 인 경우에 이득이 있다. 알파벳의 크기인 k가 충분히 큰 경우에 두 문자열의 가장 긴 공통된 부분열의 평균 길이는 2n/가 된다. 결론적으로, 평균적인 경우에 σ = O (n)이며, σ이 너무 크지만 않다면 σ = O (n)라는 것은 일실시예에 따른 문자열 비교 방법이 좋은 결과를 반환할 수 있다는 사실을 도출한다.
실제로, σ는 대게 n과 비교하여 매우 작다. 평균 길이가 500개의 문자인 800만개의 스노트(Snort) 규칙의 쌍에 대한 실험은 4개 이내의 블록들을 가지는 케이스들이 다른 것들보다 우세하다는 것을 보여주었다. 또한 블록이 두 개 이상의 가능한 인터벌을 가지는 경우는 없었다. 그 이유는 사실상 문자열의 고유한 시퀀스가 특정 공격(attack)을 설명하는 스노트 규칙의 특성에 있을 수 있다.
일반적으로, 스노트 규칙의 경우에 점근적인 상한에 영향을 미치지 않으면서 일실시예에 따른 문자열 비교 방법이 편집 거리를 개선할 수 있다고 결론지을 수 있다. DNA 시퀀스를 비교하는 경우에, 모호성 문제는 더욱 중요할 수 있다. 평균 길이가 3000개의 문자인 570 개의 채소의 DNA 시퀀스에 대한 실험에서, 블록의 최소한의 사이즈가 Dw 문자열 길이의 10 또는 20 퍼센트에서 조정되는 경우에 오버랩 또는 포함되는 경우가 매우 작다는 것이 발견되는데, 이는 발견된 인터벌의 수가 작다는 것에서 그 이유를 찾을 수 있다. 바운드가 3 퍼센트로 낮아지는 경우에, 오버랩 및 포함되는 경우의 증가율은 인터벌 수의 증가율을 초과하기 시작하지만, 570 개의 채소의 DNA 시퀀스의 수와 비교될 때 오버랩 및 포함되는 경우의 증가율은 여전히 작다. 요약하면, 블록의 최소한의 사이즈가 정확하게 조정되다면 일실시예에 따른 문자열 비교 방법은 성능과 효율성 사이에서 좋은 균형을 보일 수 있다는 것이다.
일실시예에 따른 문자열 비교 방법에 따르면, 원본 입력 문자열로부터 시뮬레이션된 문자열을 왼쪽에서 오른쪽으로 스캔하는 경우, 발견되는 블록은 서로를 오버랩하지 않으며 이산적이고, 시뮬레이션된 문자열 상에서 특정 순서를 가진다. 그러므로 최악의 경우에도, 가능한 인터벌의 수는 n^2를 넘을 수 없으며, 이것은 수행 시간이 σ = O (n^2 )라는 것을 의미한다. 최악의 경우는 모든 블록이 n개의 가능한 인터벌들을 가지는 경우에 발생하지만, 정리 1 덕분에 이러한 모든 인터벌들이 처리될 필요는 없다. 정리 1는 동일한 블록에 속하는 노드들의 서브 트리들은 동일하다는 것이므로, 첫 번째 블록이 발견되는 경우에 단지 첫 번째 서브 트리에 대해 첫 번째 가능한 인터벌이 처리될 필요가 있고 다른 서브 트리들로 정확하게 복사될 필요가 있을 뿐이다. 결국, 처리될 필요가 있는 인터벌들의 실제 수는 최악의 경우에도 (n^2 )이다. 모든 ε< 2 에 대하여 σ = O (n^ε ) 인 경우에 σ log σ ≤ O (n^2 )이므로, 일실시예에 따른 문자열 비교 방법의 전처리 과정의 상한은 언제나 편집 거리의 복잡도보다 작다고 결론 지을 수 있다.
이 계층적 인터벌 트리는 인터벌들이 서로 오버랩되지 않는 경우에 완벽하게 작동할 수 있다. 인터벌 사이에 많은 교차점이 존재하는 경우에, 효율성은 보장되지 않을 수 있다. 하지만, 교차점의 크기가 작다면 블록의 개수는 줄어들 수 있고, 블록들 각각의 가능한 인터벌들은 그 차이에 적합할 수 있다(can fit into the gaps).
결론적으로, 본원에서 계층적 인터벌 트리를 이용한 문자열 비교 방법이 제시되었다. 일실시예에 따른 문자열 비교 방법은 DAWG를 사용하는 경우의 모호성을 해결하여 블록 스왑 단계와 편집 거리의 결과를 개선할 수 있다. 계층적 인터벌 트리는 트리비얼 인터벌 트리 또는 인터벌 그래프에 비추어 효율성과 성능의 균형이라는 측면에서 장점이 있다. 하지만 계층적 인터벌 트리는 오버랩된 인터벌들을 완전하게 처리하지 못한다는 측면에서 여전히 한계점이 있다. 다만, DAWG의 특성이 충분히 사용된다면 전처리 시간 O (m + n + σ log σ)이 훨씬 줄어들 수 있다.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.
Claims (9)
- 비교 문자열의 모든 부분 문자열을 포함하는 방향성 비순환적 단어 그래프(Directed Acyclic Word Graph)를 생성하는 단계;
상기 방향성 비순환적 단어 그래프를 이용하여 입력 문자열과 상기 비교 문자열 간의 공통된 부분 문자열에 대응하는 블록을 블록 리스트에 저장하는 단계;
상기 블록 리스트와 상기 비교 문자열에 대한 계층적 인터벌 트리(Hierarchical Interval Tree)를 이용하여 상기 입력 문자열의 블록을 스왑하는 단계; 및
상기 스왑된 입력 문자열과 상기 비교 문자열 간의 유사성을 판단하는 단계
를 포함하고,
상기 계층적 인터벌 트리의 부모 노드 및 자식 노드는 상기 비교 문자열에 포함된 적어도 하나 이상의 인터벌 사이의 포함관계에 기초하여 결정되는
문자열 비교 방법.
- 제1항에 있어서,
상기 방향성 비순환적 단어 그래프는 복수의 노드 및 복수의 방향성 엣지를 포함하고, 상기 복수의 노드는 상기 부분 문자열의 마지막 문자(suffix)에 대응하고,
상기 방향성 엣지를 따라 상기 복수의 노드가 연결되는 경우 상기 부분 문자열에 고유하게 대응하는
문자열 비교 방법.
- 제1항에 있어서,
상기 스왑하는 단계는,
상기 입력 문자열의 블록에 대응하는, 상기 적어도 하나 이상의 인터벌을 이용하여 인터벌 트리를 생성하는 단계;
상기 인터벌 트리를 이용하여 상기 입력 문자열의 블록에 대응하는 인터벌을 선택하는 단계; 및
상기 선택된 인터벌에 기초하여 상기 입력 문자열의 블록의 위치와 상기 비교 문자열의 블록의 위치가 대응하도록 상기 입력 문자열의 블록을 스왑하는 단계
를 포함하는 문자열 비교 방법.
- 제3항에 있어서,
상기 인터벌을 선택하는 단계는,
상기 복수의 인터벌 간의 겹침(intersection)이 가장 작은 인터벌을 선택하는 문자열 비교 방법.
- 제4항에 있어서,
상기 인터벌을 선택하는 단계는,
상기 입력 문자열의 제1 블록에 대하여 제1 인터벌이 선택된 경우, 상기 입력 문자열의 제2 블록에 대하여 제2 인터벌에 대응하는 노드의 적어도 하나 이상의 자식 노드 중에서 제3 인터벌을 선택하고,
상기 제1 블록은 이미 인터벌이 선택된 블록이고 상기 제2 블록은 현재 인터벌을 선택하려는 블록이고,
상기 제1 인터벌과 상기 제2 인터벌은 상기 제1 블록에 대응하고 상기 제3 인터벌은 상기 제2 블록에 대응하는
문자열 비교 방법.
- 제1항에 있어서,
상기 유사성을 판단하는 단계는,
상기 스왑된 입력 문자열과 상기 비교 문자열 간의 편집 거리를 판단하는 문자열 비교 방법.
- 제6항에 있어서,
상기 편집 거리는 상기 스왑된 입력 문자열의 상기 블록의 위치가 상기 비교 문자열의 상기 블록의 위치와 동일해지도록 상기 스왑된 입력 문자열에 적용되는 오퍼레이션에 대응하는 수치의 합의 최소값에 대응하는 문자열 비교 방법.
- 제7항에 있어서,
상기 오퍼레이션은 문자에 대한 삽입, 삭제 및 교체를 포함하는 문자열 비교 방법.
- 입력 문자열의 모든 부분 문자열을 포함하는 방향성 비순환적 단어 그래프를 생성하는 생성부;
상기 방향성 비순환적 단어 그래프를 이용하여 상기 입력 문자열과 비교 문자열 간의 공통된 부분 문자열에 대응하는 블록을 블록 리스트에 저장하는 저장부;
상기 블록 리스트와 상기 입력 문자열에 대한 계층적 인터벌 트리를 이용하여 상기 입력 문자열의 블록을 스왑하는 편집부 및
상기 스왑된 입력 문자열과 상기 비교 문자열 간의 유사성을 판단하는 판단부
를 포함하고,
상기 계층적 인터벌 트리의 부모 노드 및 자식 노드는 상기 비교 문자열에 포함된 적어도 하나 이상의 인터벌 사이의 포함관계에 기초하여 결정되는
문자열 비교 장치.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020150180464 | 2015-12-16 | ||
KR20150180464 | 2015-12-16 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20170072112A KR20170072112A (ko) | 2017-06-26 |
KR101769247B1 true KR101769247B1 (ko) | 2017-08-18 |
Family
ID=59282726
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020160078420A KR101769247B1 (ko) | 2015-12-16 | 2016-06-23 | 계층적 인터벌 트리를 이용한 문자열 비교 방법 및 장치 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR101769247B1 (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108846023A (zh) * | 2018-05-24 | 2018-11-20 | 普强信息技术(北京)有限公司 | 文本的非常规特性挖掘方法及装置 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115484515B (zh) * | 2022-08-26 | 2024-09-27 | 四川九州电子科技股份有限公司 | 跑流测试中误码率的统计方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014052863A (ja) * | 2012-09-07 | 2014-03-20 | Ricoh Co Ltd | 情報処理装置、情報処理システム、情報処理方法 |
-
2016
- 2016-06-23 KR KR1020160078420A patent/KR101769247B1/ko active IP Right Grant
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014052863A (ja) * | 2012-09-07 | 2014-03-20 | Ricoh Co Ltd | 情報処理装置、情報処理システム、情報処理方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108846023A (zh) * | 2018-05-24 | 2018-11-20 | 普强信息技术(北京)有限公司 | 文本的非常规特性挖掘方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
KR20170072112A (ko) | 2017-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10540350B2 (en) | Source code search engine | |
US7725510B2 (en) | Method and system for multi-character multi-pattern pattern matching | |
CN106547644B (zh) | 增量备份方法和设备 | |
CN110168548B (zh) | 编译设备和方法 | |
JP2009512099A (ja) | トライでの再始動可能なハッシュの方法及び装置 | |
Madras et al. | Structure of random 312‐avoiding permutations | |
KR101769247B1 (ko) | 계층적 인터벌 트리를 이용한 문자열 비교 방법 및 장치 | |
KR101662957B1 (ko) | 해싱기반의 순위다중패턴매칭 방법 | |
Spampinato et al. | Linear algebraic depth-first search | |
KR102394210B1 (ko) | 커뮤니티 검출 장치 및 방법 | |
WO2011016281A2 (ja) | ベイジアンネットワーク構造学習のための情報処理装置及びプログラム | |
JP6773115B2 (ja) | 類似データ検索装置、類似データ検索方法および記録媒体 | |
Kawade et al. | An analysis on computation of longest common subsequence algorithm | |
Larsson | Most recent match queries in on-line suffix trees | |
JP2020530151A (ja) | データ処理装置における連続値の照合 | |
KR101626721B1 (ko) | 사각망 순열패턴매칭을 위한 효율적인 알고리즘 | |
KR102146625B1 (ko) | 오토마타 기반 증분적 중위 확률 계산 장치 및 방법 | |
KR102233217B1 (ko) | 분할순위패턴매칭 알고리즘 | |
Orlandic et al. | A functional database representation of large sets of objects | |
KR101837236B1 (ko) | 코드 커버리지 향상을 위한 베이직 블록 크기 감응 실행 경로 탐색 방법 및 시스템 | |
Brabazon et al. | Grammar-based and developmental genetic programming | |
KR102271489B1 (ko) | 정규표현식 패턴의 탐지를 위한 아호코라식 오토마타 구축 장치 및 방법 | |
Dudek et al. | Edit Distance between Unrooted Trees in Cubic Time | |
Miller et al. | Optimal Edge Weight Perturbations to Attack Shortest Paths | |
KR101080898B1 (ko) | 문자열 색인 방법 및 장치 |
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 |