KR101355254B1 - 접미사 트리의 병렬 생성을 위한 트라이 자료구조 기반 접미사 병렬 분할 방법 - Google Patents

접미사 트리의 병렬 생성을 위한 트라이 자료구조 기반 접미사 병렬 분할 방법 Download PDF

Info

Publication number
KR101355254B1
KR101355254B1 KR1020120117022A KR20120117022A KR101355254B1 KR 101355254 B1 KR101355254 B1 KR 101355254B1 KR 1020120117022 A KR1020120117022 A KR 1020120117022A KR 20120117022 A KR20120117022 A KR 20120117022A KR 101355254 B1 KR101355254 B1 KR 101355254B1
Authority
KR
South Korea
Prior art keywords
suffix
node
split
string
trie
Prior art date
Application number
KR1020120117022A
Other languages
English (en)
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 KR1020120117022A priority Critical patent/KR101355254B1/ko
Application granted granted Critical
Publication of KR101355254B1 publication Critical patent/KR101355254B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Machine Translation (AREA)

Abstract

접미사 트리의 병렬 생성을 위한 트라이 자료구조 기반 접미사 병렬 분할 방법이 개시된다. 접미사 병렬 분할 방법은, 입력 문자열의 샘플 문자열(sampled string)을 이용하여 접미사의 공통 접두사를 표현하는 자료 구조인 분할 트라이(partition trie)를 생성하는 단계; 상기 분할 트라이의 각 노드에 대해 MSL(modified suffix link)을 계산하는 단계; 및 상기 MSL을 이용하여 상기 입력 문자열에 대한 접미사 인덱스를 상기 분할 트라이 내에서 각 접미사에 해당되는 노드로 이동시키는 단계를 포함할 수 있다.

Description

접미사 트리의 병렬 생성을 위한 트라이 자료구조 기반 접미사 병렬 분할 방법{PARALLEL SUFFIX PARTITIONING METHOD FOR PARALLEL SUFFIX TREE CONSTRUCTION USING TRIE}
본 발명의 실시예들은 접미사 트리의 병렬 생성에 필수적인 부 프로그램인 접미사 병렬 분할 알고리즘에 관한 것이다.
접미사 트리(Suffix Tree)란 주어진 문자열의 모든 접미사들에 대한 압축된 트라이(trie)이다. 접미사 트리는 텍스트 처리(text processing), 데이터 압축(data compression), 컴퓨터 비전(computer vision), 전산 생물학(computational biology) 등과 같은 분야에서 널리 사용되는 기본적인 자료구조이다. 또한, 최근 활발히 연구되는 웹 분석(web analysis)과 같은 네트워크 관련 연구나 유전자 염기서열 분석에서 원하는 텍스트를 효과적으로 찾는데 응용될 수 있다.
한국등록특허 제10-1088290호(등록일 2011년 11월 23일)에는 접미사 배열을 이용하여 원하는 문자열을 검색하는 기술이 개시되어 있다.
접미사 트리는 주어진 길이의 길이에 비례하여 생성될 수 있지만, 두 가지 일반적인 약점이 존재한다. 첫 번째 요인은, 입력 텍스트의 길이가 매우 긴 경우 트리의 모든 노드를 메인 메모리에 저장할 수 없을 정도로 많은 메모리를 요구한다는 점이다. 그러므로 디스크를 기반으로 하는 접미사 트리 생성 알고리즘의 경우에는 I/O 시간 소비를 줄이기 위해 연구 되어왔다. 두 번째 요인은, 접미사 트리의 생성은 트리가 생성되는 동안 트리 내부의 노드들을 무작위로 접근함으로써 캐시의 효율을 낮춘다는 점이다. 그러나, 최근 64bit 하드웨어 시스템의 등장으로 컴퓨터 시스템은 수백GB의 메인 메모리를 효율적으로 사용할 수 있다. 게다가, CMP(Chip Multiprocessor Architectures)의 등장으로 메인 메모리 내부에서 동작하는 병렬 알고리즘이 더욱 중요해 졌다.
1980년대와 1990년대부터 접미사 트리의 병렬 생성 알고리즘에 대한 연구 성과가 발표되고 있다. Apostolico는 CRCW PRAM 모델에서 O(nlogn)-work, O(logn)-time의 수행성능을 보이는 병렬 접미사 트리 생성 알고리즘을 처음 제시했고(n은 입력 문자열의 길이), Hariharan은 CREW PRAM 모델에서 이론적으로 최적의 수행시간을 갖는 O(n)-work, O(log4n)-time 알고리즘을 제시했다. 그러나 이러한 이론적인 결과들은 모두 PRAM 모델에 기반하기 때문에 실용적으로 구현하기는 어렵다.
최근, CMP이나 분산 시스템과 같은 병렬 구조가 발전함에 따라 실용적인 접미사 트리의 병렬 생성에 대한 연구가 진행되고 있다. Chen과 Schmidt는 그리드 컴퓨팅 환경에서 접미사 트리를 생성하는 병렬 알고리즘을 제시하였는데, 이 알고리즘은 각각의 접미사들이 공통의 접두사를 공유하는 CPST(Common Prefix Suffix Tree)를 독립적으로 생성하도록 동작한다. Tsirogiannis와 Koudas는 CMP 구조에서 동작하는 캐시 성능을 고려한 접미사 트리 생성 알고리즘들을 제안하였다. 이 알고리즘들은 캐시의 성능을 향상시키기 위해 샘플 기반(sample based)의 분할 알고리즘을 이용하며, CMP 구조에서 병렬적으로 동작한다.
대부분의 접미사 트리의 병렬 생성 알고리즘들은 접미사들을 여러 개로 분할(partitioning)하여 각 분할된 트리에 대해 병렬적으로 생성하는 접근법을 사용한다. 따라서 분할(partitioning)은 디스크, 분산시스템, CMP 기반의 접미사 트리의 병렬 생성에서 핵심적인 역할을 한다. 일반적으로, 각 그룹 내의 접미사들은 공통의 접두사를 공유한다. Chen과 Schmidt는 문자열 매칭 알고리즘을 통해 고정 길이의 접두사들을 찾고, 이를 이용하여 접미사들을 분할하였다. Tsirogiannis와 Koudas는 가변 길이의 접두사들을 이용하여 모든 분할이 거의 동일한 사이즈를 가지게 하였으며, 해시 테이블을 이용하여 분할을 수행한다.
접미사 트리의 병렬 생성을 위해 접미사의 공통 접두사를 표현하는 자료 구조인 트라이(trie)를 이용하는 새로운 분할(partitioning) 알고리즘을 제공한다.
접미사 트리의 병렬 생성에 필수적인 부 프로그램인 접미사들의 병렬 분할 과정에서 접미사들을 가변 길이의 접두사를 이용하여 분할하는 분할 알고리즘을 제공한다.
본 발명의 실시예에 따르면, 접미사 트리의 병렬 생성을 위한 접미사 병렬 분할 방법은, 입력 문자열의 샘플 문자열(sampled string)을 이용하여 접미사의 공통 접두사를 표현하는 자료 구조인 분할 트라이(partition trie)를 생성하는 단계; 상기 분할 트라이의 각 노드에 대해 MSL(modified suffix link)을 계산하는 단계; 및 상기 MSL을 이용하여 상기 입력 문자열에 대한 접미사 인덱스를 상기 분할 트라이 내에서 각 접미사에 해당되는 노드로 이동시키는 단계를 포함할 수 있다.
일 측면에 따르면, 상기 분할 트라이를 생성하는 단계는, (1) 상기 샘플 문자열에 포함된 부분 문자열을 추출한 후 상기 샘플 문자열을 루트 노드(root node)로 하고 상기 부분 문자열을 리프 노드(leaf node)로 정의하는 단계; (2) 상기 부분 문자열 각각에 대하여 상기 부분 문자열이 상기 샘플 문자열 내에서 등장하는 빈도 수를 계산하는 단계; (3) 상기 부분 문자열 중 상기 빈도 수가 임계치를 초과한 문자열에 대하여 상기 리프 노드를 확장하고 상기 빈도 수가 상기 임계치 이하인 문자열을 분할 노드(partition node)로 정의하는 단계; 및 (4) 상기 리프 노드의 확장에 따라 상기 리프 노드 간에 연결된 문자열에 대하여 상기 샘플 문자열 내에서의 빈도 수를 계산한 후 상기 (3) 단계를 반복하는 단계를 포함할 수 있다.
다른 측면에 따르면, 상기 MSL을 계산하는 단계는, 상기 분할 트라이에서 너비 우선 검색(breadth first search) 방식을 이용하여 각 노드의 MSL을 계산할 수 있다.
또 다른 측면에 따르면, 상기 분할 트라이 내에서 각 접미사에 해당되는 노드로 이동시키는 단계는, 상기 입력 문자열의 모든 접미사에 대하여 각 접미사에 대응되는 분할 노드를 찾아 해당 접미사 인덱스를 삽입할 수 있다.
또 다른 측면에 따르면, 상기 분할 트라이 내에서 각 접미사에 해당되는 노드로 이동시키는 단계는, 상기 입력 문자열의 첫 번째 접미사에 대응되는 분할 노드를 찾은 이후에는 상기 MSL을 이용하여 내부 노드에서 상기 입력 문자열의 다음 접미사에 대응되는 분할 노드를 찾을 수 있다.
본 발명의 실시예에 따르면, 접미사 트리의 병렬 생성을 위해 접미사들을 가변 길이의 접두사를 이용하고 해시 테이블이 아닌 트라이를 사용하여 분할함으로써 분할 프로시저의 성능을 향상시킬 수 있다.
본 발명의 실시예에 따르면, 접미사 트리의 병렬 생성을 위해 보조 자료구조로서 트라이를 사용함으로써 각각의 분할에 대한 부분 접미사 트리의 생성이 끝났을 때 완전한 접미사 트리를 얻기 위한 후처리 과정이 해시 테이블을 이용한 알고리즘 보다 훨씬 단순해질 수 있으며 CMP 구조에서 쉽게 병렬적으로 동작할 수 있다.
도 1은 본 발명의 일 실시예에 있어서, 트라이를 이용한 접미사 트리 구축 과정을 도시한 것이다.
도 2는 본 발명의 일 실시예에 있어서, 분할 단계를 설명하기 위한 예시 도면이다.
도 3은 본 발명의 일 실시예에 있어서, 세분화 단계를 설명하기 위한 예시 도면이다.
도 4는 본 발명의 일 실시예에 있어서, 영문 텍스트에 대한 속도 향상 결과를 도시한 그래프이다.
도 5는 본 발명의 일 실시예에 있어서, 길이가 107인 DNA서열에 대한 분할 결과를 도시한 그래프이다.
이하, 본 발명의 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
본 실시예들은 텍스트 처리(text processing), 데이터 압축(data compression), 컴퓨터 비전(computer vision), 전산 생물학(computational biology), 웹 분석(web analysis) 등의 분야에서 원하는 텍스트를 찾는 컴퓨터 시스템에 적용될 수 있다.
본 실시예에서는 접미사 트리의 병렬 생성을 위해 트라이를 이용하는 새로운 분할(partitioning) 알고리즘을 제안한다. 본 발명에서 제안하는 알고리즘은 접미사들을 가변 길이의 접두사를 이용하여 분할하며, 보조 자료구조는 해시 테이블이 아닌, 트라이를 사용한다. 분할 단계에서 트라이를 사용함으로써 분할 프로시저의 성능을 향상시킬 수 있으며, 쉽게 병렬적으로 동작할 수 있다. 또한, 접미사 트리 자체가 근본적으로 트라이의 구조를 가지기 때문에 각각의 분할에 대한 부분 접미사 트리의 생성이 끝났을 때 완전한 접미사 트리를 얻기 위한 후처리 과정이 훨씬 단순해질 수 있다.
도 1은 본 발명의 일 실시예에 있어서, 트라이를 이용한 접미사 트리 구축 과정을 도시한 것이다. 일 실시예에 따른 접미사 트리 구축 과정은 컴퓨터 시스템의 접미사 트리 생성 엔진에 의해 실행될 수 있다.
본 실시예에서 접미사 트리의 병렬 생성(parallel construction) 알고리즘은 도 1에 도시한 바와 같이 4개의 단계로 구성되며, 해시 테이블을 사용하는 알고리즘과 많은 부분 유사하다.
첫 번째는 분할 단계(Partition Phase)로, 접미사들을 여러 개의 분할로 나누는 과정이다. 두 번째는 생성 단계(Construction Phase)이며, 각각의 분할에 대해 독립적으로 부분 접미사 트리를 생성한다. 세 번째인 세분화 단계(Refinement Phase)는 주어진 문자열의 모든 접미사들을 표현하는 완전한 접미사 트리를 얻기 위한 과정이다.
본 발명에서 제안하는 알고리즘과 해시 테이블을 사용하는 알고리즘과의 가장 큰 차이점은 분할 단계에서 사용되는 보조 자료구조다. Tsirogiannis와 Koudas의 알고리즘은 해시 테이블을 사용하는 반면, 본 발명에서 제안하는 알고리즘은 트라이를 사용한다. 또한 해시 테이블을 사용하지 않고, 트라이를 사용하기 때문에 생성 이후의 단계 또한 달라진다. 해시 테이블을 사용하는 알고리즘에선 부분 접미사 트리들을 합치는(Merging) 과정이 존재하지만, 트라이를 사용하는 경우 내부 노드의 일부분을 수정하는 것으로 접미사 트리를 얻을 수 있다.
본 발명의 분할 단계와 세분화 단계에 대한 세부적인 알고리즘을 설명하기로 한다. 본 실시예에서 생성 단계와 접미사 링크 복원 단계(Suffix link recovery Phase)는 Tsirogiannis와 Koudas이 제안한 알고리즘과 동일하므로 그 상세한 설명은 생략하기로 한다.
분할 단계
분할 단계는 3개의 스텝(step)으로 진행한다. 먼저, 입력 문자열의 샘플 문자열(sampled string)을 이용하여 보조 자료구조인 분할 트라이(partition trie)를 생성한다(제1 스텝). 다음으로, 분할 트라이 내의 각 노드의 MSL(modified suffix link)을 계산한다(제2 스텝). 마지막으로, 입력 문자열의 접미사 인덱스를 분할 트라이 안에서 각 접미사에 해당하는 노드로 이동시킨다(제3 스텝).
- 제1 스텝
여기서, 분할 트라이란 입력 문자열에서 접미사의 공통 접두사를 표현하는 트라이를 의미한다. 각 내부 노드는 |Σ|개의 자식들을 가지며(여기서, Σ는 입력 문자열의 알파벳 집합), 각 자식들은 Σ 안에서 서로 다른 알파벳을 표현한다. 또한, 루트(root) 노드로부터 리프(leaf) 노드까지 알파벳을 연결한 문자열은 접미사들의 공통 접두사를 표현한다. 또한, 분할 트라이에서의 리프 노드를 분할 노드(partition node)라고 정의한다.
분할 트라이는 접두사들의 빈도수를 기준으로 점진적으로 노드를 확장해가면서 생성되며, 빈도 수의 계산은 입력 문자열의 샘플 문자열(sampled string)만을 이용하여 계산하게 된다. 먼저, 초기화 과정으로, 문자열 길이 k를 0보다 큰 고정 상수라고 할 때, 길이 k의 모든 문자열을 표현하도록 트라이를 생성한다. 따라서 트라이는 |Σ|k개의 리프 노드를 가지게 된다. 그 다음 과정은 여러 과정(pass)에 걸쳐 수행된다. 각 과정은 k부터 시작하며, k≤p인 과정 p에서의 처리 과정은 다음과 같다. 샘플 문자열에서 길이 p인 모든 부분 문자열들에 대해, 부분 문자열을 표현하는 깊이가 p인 리프 노드가 가지고 있는 빈도수 값을 증가시킨다. 만약 어떤 부분 문자열과 대응되는 깊이가 p인 리프 노드가 존재하지 않는다면 그 부분 문자열은 무시된다. 모든 부분 문자열에 대해서 처리가 완료되면, 각 리프 노드가 가지는 빈도수가 주어진 임계값 t보다 큰지 검사한다. 만약 빈도수가 t보다 크다면, 해당 리프 노드에 |Σ|개의 자식을 붙여 확장한다. 반대로 빈도수가 t보다 작거나 같다면, 해당 리프 노드는 더 이상 확장되지 않고, 분할 노드가 된다. 만약 임의의 과정 p에서 확장된 노드가 하나도 존재하지 않는다면 분할 트라이의 생성은 완료된다. 만약 그렇지 않고 확장된 노드가 하나라도 존재한다면 과정 p+1에 대해 위와 같은 과정을 반복한다.
도 2는 분할 트라이의 예시를 도시한 것이다.
도 2는 t=2일 때, 주어진 문자열 S=ABBCABCAAB$에 대한 분할 트라이를 생성하는 과정을 도시한 것이다. k=1이며, 입력 문자열 전체가 샘플 문자열이라고 가정한다. 먼저, 길이가 1인 모든 문자열을 표현하는 트라이를 생성한다. pass 1에서, 길이 1인 부분 문자열들은 추출되고, 추출된 문자열들의 빈도수가 계산된다. 문자열 "A"와 "B"의 빈도가 2이상이기 때문에, "A"와 "B"를 표현하는 노드는 확장되고, 다른 리프 노드의 카운트는 2보다 작거나 같기 때문에 분할 노드가 된다. 이러한 방법으로 pass 3까지 진행하면 이후에 더 이상 확장되는 노드가 없기 때문에, 분할 트라이의 생성은 종료된다.
- 제2 스텝
다음 스텝에선 분할 트라이 안의 모든 노드에 대해 MSL(modified suffix link)을 계산한다. MSL은 다음과 같이 정의된다. 임의의 노드 v가 문자열 xa를 표현하고(x는 알파벳, a는 길이가 0이상인 문자열), 임의의 노드 w가 a를 표현한다고 하면, v의 MSL은 노드 w를 가리킨다. 만약 그러한 노드가 존재하지 않는다면, 노드 v의 MSL은 a의 접두사 중 가장 길이가 긴 접두사를 표현하는 노드를 가리킨다. MSL의 계산은 분할 트라이에서 BFS(breadth first search)를 이용하여 수행된다.
- 제3 스텝
분할 단계의 마지막 스텝은 입력 문자열에 대한 접미사 인덱스를 분할 노드 안으로 이동시키는 것이다. 입력 문자열의 모든 접미사에 대해 각 접미사에 대응되는 분할 노드를 찾는다. 처리 순서는 입력 문자열의 가장 왼쪽부터 오른쪽으로 진행된다. 첫 번째 접미사에 대응하는 분할 노드를 찾고 나면, 이후부터는 루트 노드에서 시작할 필요 없이 MSL을 이용하여 내부 노드에서 찾아 나갈 수 있다. MSL의 역할은 접미사 트리의 접미사 링크의 역할과 유사하다.
알고리즘의 전체 생성 과정에서, 제3 스텝은 입력 문자열의 모든 접미사에 대해 진행하기 때문에 생성 단계를 제외하면 가장 많은 시간을 소비한다. 제3 스텝 안에서 접미사 인덱스를 삽입하는 것을 제외하면 각각의 접두사에 대해 동시에 수행될 수 있다. 제3 스텝을 병렬적으로 수행하기 위해서 입력 문자열을 코어(쓰레드) 개수만큼의 영역으로 나누고, 각 영역에 대해 하나의 코어(쓰레드)가 처리한다. 각 코어(쓰레드)는 접미사 인덱스를 삽입하는 동안에만 동기화(synchronization mechanism) 하여 삽입하게 된다.
세분화 단계
세분화 단계는 분할 노드를 루트로 하는 각 부분 트리의 생성이 완료된 후에 수행된다. 생성 단계의 결과로부터 나온 중간 트리(intermediate tree)는 분할 단계가 샘플 문자열을 기반으로 동작하고 노드를 예측하여 생성하기 때문에 접미사 트리의 정의에 맞지 않는 노드가 존재할 수 있다. 먼저, 중간 트리의 내부 모드가 자식을 하나만 가질 수 있다. 둘째로, 입력 문자열의 접미사를 표현하지 않는 리프 노드가 존재할 수 있다.
중간 트리로부터 접미사 트리로 만들기 위해서 세분화 단계는 불필요한 노드를 삭제하고, 레이블을 수정한다. 세분화 단계에서는 분할 트라이 내의 각 노드들이 2개의 자식을 가지는지 검사한다. 만약 노드가 자식을 가지지 않으면 해당 노드를 삭제하며, 노드가 자식을 하나만 갖는다면 해당 노드를 삭제하고 자식 노드와 부모 노드를 연결한다. 세분화 단계는 분할 트라이를 후위순회(post order traversal)하며 위와 같이 수행된다.
도 3은 세분화 단계의 예를 보여준다.
도 3의 (a)는 입력 문자열 "ABBCABCAAB$"에 대한 중간 트리이다. 여기서 회색 노드는 분할 트라이를 가리킨다. 문자열 "ABA"를 나타내는 노드는 자식이 없기 때문에 삭제된다. 다음으로 문자열 "BB"를 표현하는 노드를 보면 자식이 하나만 있기 때문에 해당 노드는 삭제되고 자식과 부모가 연결된다. 도 3의 (b)는 세분화 단계가 끝난 뒤의 트리의 모습이며, 이는 문자열 S = ABBCABCAAB$의 접미사 트리이다.
본 발명에서 제안한 알고리즘에 대한 실험 결과를 설명하면 다음과 같다.
실험은 트라이를 이용한 알고리즘과 해시 테이블을 이용한 알고리즘을 비교한 것이며, 실험 환경은 다음과 같다. CPU는 4개의 코어와 8개의 하이퍼 쓰레드를 갖는 Intel i7-930이고, 24GB의 주 메모리를 가진다. 병렬 알고리즘은 Intel Cilk Plus Platform을 이용하였고, 해시 테이블은 Intel사의 Threading Building Blocks 라이브러리의 자료 구조 중 하나인 "concurrent_hasp_map"를 이용하여 구현하였다.
서로 다른 특성을 가진 3종류의 입력 문자열들을 대상으로 실험하였다. 하나는 |Σ|=4인 무작위 문자열이고, 다른 하나는 Human Genome Project에서 얻은 |Σ|=16인 DNA 서열이며, 마지막으로 Pizza&Chili Corpus에서 얻은 |Σ|=239인 영문 텍스트이다.
먼저, 두 개의 분할 알고리즘의 성능을 비교한다.
Figure 112012085504762-pat00001
표1은 길이가 108인 입력 문자열에 대한 분할 과정의 수행 시간을 쓰레드의 수에 따라 보여준다. 모든 종류의 문자열과 쓰레드의 범위에서 트라이를 이용한 알고리즘은 해시 테이블보다 빠른 수행성능을 보인다. DNA서열과 영문 텍스트(2.3X ~ 2.9X)에 대한 성능향상은 무작위 텍스트(1.2X ~ 2X)로 실험한 것보다 더 좋게 나오나, DNA서열과 영문 텍스트는 공통적으로 가지는 부분 문자열들이(common substrings) 많기 때문이다.
Figure 112012085504762-pat00002
표2에서는 8개의 쓰레드를 사용했을 때 입력 텍스트의 길이에 따른 수행 시간을 보여준다. 표1의 결과에서와 마찬가지로, 트라이를 이용한 알고리즘이 해시 테이블보다 빠른 결과를 보이고 있으며, DNA 서열과 영문 텍스트(1.9X~3.0X)에 대한 성능 향상이 무작위 텍스트(1.2X~1.5X)에 대한 성능향상보다 크다는 것을 알 수 있다.
본 발명에 따른 트라이를 이용한 알고리즘은 효율적으로 멀티프로세서의 계산능력을 활용할 수 있고, 접미사 트리의 분할 비용을 대폭 낮출 수 있다. 8개의 쓰레드를 사용할 때의 수행 시간은 1개의 쓰레드를 사용할 때보다 4.8X~6.2X배의 속도 향상을 보인다. 도 4는 여러 개의 코어(쓰레드)를 사용하였을 때 여러 길이의 영문 텍스트에 대한 속도 향상을 보여준다.
분할 크기의 분포에 대해 분석해보면 도 5에서는 길이가 107인 DNA서열에 대한 분할결과를 보여준다. 분할된 개수는 총 2443개이고, 한 분할 내의 최대 접미사 인덱스의 수는 41,797개이며 최소 개수는 1개이다. 또한, 분할의 크기가 큰 개수는 매우 적고, 대부분은 분할의 크기가 작다.
본 실시예에서는 공통 접두사를 공유하도록 접미사를 분할하는 새로운 알고리즘을 제시한 것이다. 트라이를 이용하여 분할을 나타내고, 어떤 분할에 접미사가 속해야 하는지를 결정할 수 있다. 본 발명에서 제안하는 알고리즘은 간단하고 효율적이다. 실험 결과에서 알 수 있듯이 트라이를 사용한 알고리즘이 해시 테이블을 이용한 것보다 빠름을 보이며, 트라이를 사용한 분할 알고리즘이 CMP 구조에 맞게 쉽게 병렬화가 가능하다. 성능측정 결과, 본 발명에서 제안한 알고리즘의 성능 향상은 입력 문자열에 대해 선형적인 속도 향상을 나타낸다는 것을 알 수 있다.
본 발명의 실시예에 따른 방법들은 다양한 컴퓨터 시스템을 통하여 수행될 수 있는 프로그램 명령(instruction) 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 또한, 상술한 파일 시스템은 컴퓨터 판독이 가능한 기록 매체에 기록될 수 있다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다.
그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.

Claims (5)

  1. 접미사 트리의 병렬 생성을 위한 접미사 병렬 분할 방법에 있어서,
    입력 문자열의 샘플 문자열(sampled string)을 이용하여 접미사의 공통 접두사를 표현하는 자료 구조인 분할 트라이(partition trie)를 생성하는 단계;
    상기 분할 트라이의 각 노드에 대해 MSL(modified suffix link)을 계산하는 단계; 및
    상기 MSL을 이용하여 상기 입력 문자열에 대한 접미사 인덱스를 상기 분할 트라이 내에서 각 접미사에 해당되는 노드로 이동시키는 단계
    를 포함하고,
    상기 분할 트라이를 생성하는 단계는,
    접두사들의 빈도 수를 기준으로 노드를 확장해가면서 상기 분할 트라이를 생성하는 것으로,
    (1) 상기 샘플 문자열에 포함된 부분 문자열을 추출한 후 상기 샘플 문자열을 루트 노드(root node)로 하고 상기 부분 문자열을 리프 노드(leaf node)로 정의하는 단계;
    (2) 상기 입력 문자열의 샘플 문자열만을 이용하여 상기 빈도 수를 계산하되, 상기 부분 문자열 각각에 대하여 상기 부분 문자열이 상기 샘플 문자열 내에서 등장하는 빈도 수를 계산하는 단계;
    (3) 상기 부분 문자열 중 상기 빈도 수가 임계치를 초과한 문자열에 대하여 상기 리프 노드를 확장하고 상기 빈도 수가 상기 임계치 이하인 문자열을 분할 노드(partition node)로 정의하는 단계; 및
    (4) 상기 리프 노드의 확장에 따라 상기 리프 노드 간에 연결된 문자열에 대하여 상기 샘플 문자열 내에서의 빈도 수를 계산한 후 상기 (3) 단계를 반복하는 단계
    를 포함하고,
    상기 MSL은 상기 분할 트라이의 각 노드가 표현하는 문자열의 접두사 중 가장 길이가 긴 접두사에 대응되는 노드이며,
    상기 분할 트라이 내에서 각 접미사에 해당되는 노드로 이동시키는 단계는,
    상기 입력 문자열의 가장 왼쪽부터 오른쪽으로 진행되는 것으로, 상기 루트 노드에서 시작하여 상기 입력 문자열의 첫 번째 접미사에 대응되는 분할 노드를 찾은 이후에는 상기 첫 번째 접미사에 대응하는 분할 노드를 기준으로 상기 MSL을 이용하여 내부 노드에서 상기 입력 문자열의 다음 접미사에 대응되는 분할 노드를 찾고,
    상기 입력 문자열에 대한 접미사 인덱스를 분할 노드 안으로 이동시키는 과정을 각각의 접두사에 대해 동시에 수행하되, 상기 입력 문자열을 쓰레드(thread) 개수만큼의 영역으로 분할한 후 분할된 영역 각각에 대해 하나의 쓰레드를 처리하는 것
    을 특징으로 하는 접미사 병렬 분할 방법.
  2. 삭제
  3. 제1항에 있어서,
    상기 MSL을 계산하는 단계는,
    상기 분할 트라이에서 너비 우선 검색(breadth first search) 방식을 이용하여 각 노드의 MSL을 계산하는 것
    을 특징으로 하는 접미사 병렬 분할 방법.
  4. 제1항에 있어서,
    상기 분할 트라이 내에서 각 접미사에 해당되는 노드로 이동시키는 단계는,
    상기 입력 문자열의 모든 접미사에 대하여 각 접미사에 대응되는 분할 노드를 찾아 해당 접미사 인덱스를 삽입하는 것
    을 특징으로 하는 접미사 병렬 분할 방법.
  5. 삭제
KR1020120117022A 2012-10-22 2012-10-22 접미사 트리의 병렬 생성을 위한 트라이 자료구조 기반 접미사 병렬 분할 방법 KR101355254B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020120117022A KR101355254B1 (ko) 2012-10-22 2012-10-22 접미사 트리의 병렬 생성을 위한 트라이 자료구조 기반 접미사 병렬 분할 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020120117022A KR101355254B1 (ko) 2012-10-22 2012-10-22 접미사 트리의 병렬 생성을 위한 트라이 자료구조 기반 접미사 병렬 분할 방법

Publications (1)

Publication Number Publication Date
KR101355254B1 true KR101355254B1 (ko) 2014-01-28

Family

ID=50146386

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120117022A KR101355254B1 (ko) 2012-10-22 2012-10-22 접미사 트리의 병렬 생성을 위한 트라이 자료구조 기반 접미사 병렬 분할 방법

Country Status (1)

Country Link
KR (1) KR101355254B1 (ko)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010071841A (ko) * 1998-07-10 2001-07-31 추후 데이터의 검색을 위한 서치 시스템 및 방법
JP2009116559A (ja) * 2007-11-06 2009-05-28 Hitachi Ltd 大量配列の一括検索方法及び検索システム
JP2009244996A (ja) 2008-03-28 2009-10-22 Hitachi High-Technologies Corp 文字列検索システム及び方法
KR20100037225A (ko) * 2008-10-01 2010-04-09 주식회사 케이티 트라이 구조를 이용한 문자열 저장 방법, 검색 방법, 삭제 방법 및 문자열 저장 장치

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010071841A (ko) * 1998-07-10 2001-07-31 추후 데이터의 검색을 위한 서치 시스템 및 방법
JP2009116559A (ja) * 2007-11-06 2009-05-28 Hitachi Ltd 大量配列の一括検索方法及び検索システム
JP2009244996A (ja) 2008-03-28 2009-10-22 Hitachi High-Technologies Corp 文字列検索システム及び方法
KR20100037225A (ko) * 2008-10-01 2010-04-09 주식회사 케이티 트라이 구조를 이용한 문자열 저장 방법, 검색 방법, 삭제 방법 및 문자열 저장 장치

Similar Documents

Publication Publication Date Title
Egidi et al. External memory BWT and LCP computation for sequence collections with applications
Ajwani et al. A computational study of external-memory BFS algorithms
Huynh et al. An efficient parallel method for mining frequent closed sequential patterns
Apiletti et al. Pampa-HD: A parallel MapReduce-based frequent pattern miner for high-dimensional data
Hakak et al. Partition-based pattern matching approach for efficient retrieval of Arabic text
Sahli et al. ACME: A scalable parallel system for extracting frequent patterns from a very long sequence
Arefin et al. Clustering nodes in large-scale biological networks using external memory algorithms
JP5964781B2 (ja) 検索装置、検索方法および検索プログラム
Arge et al. Multiway simple cycle separators and I/O-efficient algorithms for planar graphs
Arge et al. I/O-efficient topological sorting of planar DAGs
Tang et al. Scaling similarity joins over tree-structured data
Purohit et al. Application-specific graph sampling for frequent subgraph mining and community detection
KR101355254B1 (ko) 접미사 트리의 병렬 생성을 위한 트라이 자료구조 기반 접미사 병렬 분할 방법
Ediger et al. Computational graph analytics for massive streaming data
Karim et al. An efficient approach to mining maximal contiguous frequent patterns from large DNA sequence databases
Li et al. Graph compression with stars
JP6005583B2 (ja) 検索装置、検索方法および検索プログラム
Hamedanian et al. An efficient prefix tree for incremental frequent pattern mining
He et al. Using graphics processors for high performance SimRank computation
Akritidis et al. Computing scientometrics in large-scale academic search engines with mapreduce
Mane A comparative study of Spam and PrefixSpan sequential pattern mining algorithm for protein sequences
Yang et al. Br-index: An indexing structure for subgraph matching in very large dynamic graphs
JP7422367B2 (ja) 近似文字列照合方法及び該方法を実現するためのコンピュータプログラム
Bhaskar et al. Top-k closed sequential graph pattern mining
Li et al. A distributed approach for constructing generalized suffix tree on spark by using optimized elastic range algorithm

Legal Events

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

Payment date: 20161220

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20171213

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20181121

Year of fee payment: 6