JP2009244996A - 文字列検索システム及び方法 - Google Patents

文字列検索システム及び方法 Download PDF

Info

Publication number
JP2009244996A
JP2009244996A JP2008088322A JP2008088322A JP2009244996A JP 2009244996 A JP2009244996 A JP 2009244996A JP 2008088322 A JP2008088322 A JP 2008088322A JP 2008088322 A JP2008088322 A JP 2008088322A JP 2009244996 A JP2009244996 A JP 2009244996A
Authority
JP
Japan
Prior art keywords
character
character string
digit
data
value
Prior art date
Legal status (The legal status 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 status listed.)
Granted
Application number
JP2008088322A
Other languages
English (en)
Other versions
JP5171346B2 (ja
Inventor
Koichi Kimura
宏一 木村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi High Tech Corp
Original Assignee
Hitachi High Technologies Corp
Hitachi High Tech Corp
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 Hitachi High Technologies Corp, Hitachi High Tech Corp filed Critical Hitachi High Technologies Corp
Priority to JP2008088322A priority Critical patent/JP5171346B2/ja
Publication of JP2009244996A publication Critical patent/JP2009244996A/ja
Application granted granted Critical
Publication of JP5171346B2 publication Critical patent/JP5171346B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】計算機上で文字列検索を高速に行うための補助情報を、メモリ効率良く記憶するためのデータ構造を提供し、また、その補助情報を用いてランク関数とセレクト関数を高速に計算する方法を提供し、それらを応用してメモリ効率が良い高速な文字列検索方法を提供する。
【解決手段】バイナリ文字列に対する大量の部分和の情報を、2冪進法の桁ごとのデータに分割し、文字位置(文字列先頭からの文字数)の各桁において、部分和の該当桁のみの情報を記憶させることにより、桁ごとのデータ量が上位桁に1つ上がるたびに基数分の1に減少させ、また、各桁において基数個ごとの部分和の情報を一つの累積値と多数の差分値に分けて記憶させることにより、メモリ使用の効率化を図る。また、補助情報の最上位桁から最下位桁までの階層構造に沿って、ランク関数とセレクト関数の値を桁ごとに順次高速に決定する。多種の文字を含む場合は、バイナリ文字列の場合に帰着させて扱う。
【選択図】図1

Description

本発明は、計算機を利用して、大量の遺伝子配列データやゲノム配列データ、又は大量の一般の文書データに対して、高速に文字列検索を行うための方法に関する。
近年、従来型のキャピラリー型DNAシーケンサとは全く異なる、新しい原理に基づいた超並列DNAシーケンサが出現した(非特許文献1)。超並列DNAシーケンサの一回のランでは、一度に数千万本にも及ぶ大量の配列を読み取ることができる。但し、読取り配列長は数十塩基長程度と短い。このような大量の配列データを解析するためには、シーケンスされた各々の配列に対して、既知の遺伝子配列又はゲノム配列の中に一致又は類似した部分配列としてどこに現れるか否かを調べることが重要である。
そのような配列検索のための手法として、サフィックス・アレイ(非特許文献2)やバローズ・ホィーラー変換(非特許文献3)を利用する方法がある。これらの方法は、大規模な既知配列データに対して、大量の短い配列の検索を高速・高精度に行えるという特徴がある。
バローズ・ホィーラー変換を利用して配列検索を行うためには、ランク関数とセレクト関数の計算が必要となる(非特許文献4)。与えられた文字列データに対して、ランク関数は、文字列先頭より指定した文字位置までの範囲に、指定した種類の文字の出現回数を答える関数である。また、セレクト関数は、与えられた文字列データに対して、指定した自然数kに対して、指定した種類の文字がk回目に現れる文字位置を答える関数である。
原理的には、これらの関数は、全て事前に計算して表に纏めて主記憶装置などに記憶しておけば、その表を引くことにより、極めて高速に計算できる。しかし、実際には、そのために必要な記憶容量が文字列の長さと文字列長のワード長の積に比例し、特に、元の文字列データの記憶容量よりも大きくなることから、そのような方法は記憶容量の観点からは極めて非効率的である。例えば、0と1からなる1Gビット(約10億ビット)のバイナリ文字列に対して、その全ての文字位置でのランク値を記憶しようとすると、ランク値のワード長は4バイト(32ビット)必要なため、総計で4Gバイト(約320億ビット)の記憶容量が必要となる。
そこで、記憶容量の観点から効率的で、高速に計算を行えるような補助情報のデータ構造が知られている(非特許文献5)。文字列データ内の文字の種類数は、一般的には任意でよいが、特に2種類の場合に対する方法が基礎となる。具体的には、2種類の文字0と1とからなるバイナリ文字列に対して、文字1に対するランク関数とセレクト関数の計算法が基礎となる。この場合、ランク関数は、文字列先頭から指定した文字位置までの0と1の並びの和(文字列中の部分和)の値となる。ランク関数を高速に計算するための補助情報としては、文字列データ全体を、スーパー・ブロック、ブロックの2階層に分割し、スーパー・ブロック境界での部分和の値と、ブロック境界でのスーパー・ブロック内に限定した部分和の値と、ブロック内の全てのビットパターンに対する部分和の情報である。ランク関数は、これら3種類の部分和の和として高速に計算できる。文字列の長さに応じてスーパー・ブロックとブロックの長さを調整することにより、これら3種類の部分和の記憶容量の総和を抑制することができる。例えば、1Gビット(約10億ビット)のバイナリ文字列データの場合は、このような調整により、そのような補助情報に必要な記憶容量は、文字列データに必要な記憶容量よりも小さく、その66.85%程度に抑えることができる(非特許文献5)。
Service RF. "Gene sequencing. The race for the $1000 genome." Science. 2006 Mar 17;311(5767):1544-6. Manber, U. and Myers, G.: Suffix arrays: A new method for on-line string searches, in 1st ACM-SIAM, Symposium on Discrete Algorithms, pp. 319-327 (1990). Burrows M and Wheeler D, A block sorting lossless data compression algorithm, Technical Report 124, Digital Equipment Corporation, 1994. Ross Lippert, Space-efficient whole genome comparisons with Burrows-Wheeler transforms, Journal of Computational Biology, 12(4), pp. 407-415, 2005. R. Gonzalez, S. Grabowski, V. Makinen, and G. Navarro. Practical Implementation of Rank and Select Queries. In Proc. WEA'05, pages 27-38, 2005. N. J. Larsson and K. Sadakane. Faster Suffix Sorting, Technical report LU-CS-TR:99-214, 1999.
しかし、このような調整を行ったとしても、これらの大量の部分和の値の中には、上位の桁の値が互いに共通なものが多数含まれており、記憶容量の観点からは非効率な冗長性が残されている。
そこで、本発明の目的は、部分和の上位桁の情報が冗長に記憶されることを防ぎ、記憶容量の観点から効率的な補助情報の記憶方法(データ構造)を提供することと、そのようなデータ構造を用いて高速にランク関数とセレクト関数を計算する方法を提供することにある。また、これらを応用して、文字列データの高速検索方法を提供することにある。
本発明では、大量の部分和の情報を記憶する際、上位桁の情報が冗長に記憶されることを防ぐために、部分和の値の2進表記を、指定したビット幅wの桁に分割し、2のw乗進法による桁ごとの情報に分けた桁データの集まりとして記憶する。同様に、文字位置も、文字列先頭からの文字数で指定して、2のw乗進法による桁に分割する。各桁データは、上位桁を共有して、該当桁を0から2のw乗マイナス1まで変化させた文字位置に対する、部分和の該当桁の値を要約した要素データの繰り返し構造とする。各要素データは、文字位置の該当桁の値が2のw乗マイナス1のときの累積値データとして、その位置における部分和の該当桁の値と、文字位置の該当桁の値がそれ以外のときに対する差分データとして、その位置と該当桁の値が1少ない位置とにおける部分和の該当桁での変化分の値からなる。
本発明によると、以下のような、ランク値を高速に求めるための補助情報の記憶方法、ランク値の計算方法、セレクト値の計算方法、0と1からなる文字列に対する配列検索方法、塩基配列データに対する配列検索方法、多種の文字を含むデータに対する配列検索方法、ランク関数とセレクト関数の計算を高速化する方法が実現される。
(1)0と1からなる文字列に対して、文字列先頭から任意の文字位置までの1の数(以後、これをその文字位置におけるランク値とよぶ)を高速に求めるための補助情報を、記憶容量の観点から効率良く記憶することを目的として、
ランク値及び文字位置(文字列先頭から数えた文字数)を表す整数値を、それらの2進表記を指定したビット幅(w)に区切ることにより、2のw乗進法の桁に分割し、
補助情報全体を、桁ごとの情報に分割した桁データの集まりとして記憶し、
各々の桁データは、文字位置の該当桁の2のw乗個の値に対する補助情報を要素データとして、それらの繰り返しとして記憶し、
各々の要素データは、文字位置の該当桁の2のw乗個の値に対して、
その最後の値(2のw乗マイナス1)に対しては、累積値データとして、対応する文字位置でのランク値の該当桁を記憶し、
それ以外の値(0から2のw乗マイナス2まで)では、差分データとして、対応する文字位置と該当桁の値が1だけ小さい文字位置での、ランク値の該当桁での変化分を記憶することにより、
上位の桁に上がる毎に、桁データのデータ量を繰り返し2のw乗分の1に減少させて、
前記目的を達する補助情報の記憶方法。
(2)0と1からなる文字列に対して、任意の文字位置(これを対象文字位置とよぶ)におけるランク値を高速に求めることを目的として、最下位桁から最上位桁までの各桁において、前記(1)の補助情報の桁データを参照して、
対象文字位置の直前の要素データ内の累積値データと、
対象文字位置を含む要素データ内での、対象文字位置までの差分データの総和と、
の和を求め、さらに、それと下位の桁からの繰上り(最下位桁では0)の和を求め、その値をwビット幅の下位桁と上位桁に分割し、その下位桁の値をランク値の該当桁の値とし、その上位桁の値を該当桁から上位の桁への繰り上がりとして計算し、
これを、最下位桁から最上位桁までの各桁に対して順次繰り返すことにより、前記目的を達するランク値の計算方法。
(3)0と1からなる文字列に対して、任意に指定した番号kに対して、k番目に1が現れる文字位置(これを探索文字位置とよび、また、文字列先頭から探索文字位置までの文字数をkに対するセレクト値とよぶ)を高速に求めることを目的として、最上位桁から最下位桁までの各桁において、前記(1)の補助情報の桁データを参照して、
探索文字位置の直前の要素データ内の累積値データと、
対象文字位置を含む要素データ内での、対象文字位置までの差分データの総和と、
の和として、探索文字位置のランク値の該当桁の値を求め、その値がkの該当桁の値(繰上りが必要な場合は、2のw乗を加えた値)以上となり、かつ、
ランク値の該当桁以下の未定の桁の値を、探索文字位置における該当桁より下位の桁の要素データの累積値データとしたときの仮の値がk以上となる、
ような最小の値として、探索文字位置の該当桁の値を決め、そのときランク値の該当桁がkの該当桁の値を越えるときは、一つ下位の桁においては繰上りが必要として、
これを、最上位桁から最下位桁まで順次繰り返すことにより、前記目的を達するセレクト値の計算方法。
(4)0と1からなる文字列に対して、そのバローズ・ホィーラー変換に対する前記(1)の補助情報を計算機主記憶上に構築し、前記(2)の計算方法によるランク関数の計算を繰り返すことにより、検索文字列が現れるサフィックス・アレイ内の順位の範囲を計算し、前記(3)の計算方法によるセレクト関数の計算を繰り返すことにより、検索文字列の出現位置を計算する、0と1からなる文字列に対する配列検索方法。
(5)塩基配列データに対して、各塩基を表す文字種ごとに、その文字を1、他の文字を0に置き換えた0と1からなる文字列を作成し、
それらに対する検索を高速化するための桁データを、最下位を除く上位の桁では、前記(1)の方法を用いて独立に作成し、
また、最下位の桁については、文字列先頭より2のw乗個ごとの文字位置では、文字種ごとのランク値の最下位桁を記憶し、それ以外の文字位置では、現れる文字種を2進符号化して記憶することにより、最下位の桁データを作成し、
塩基配列に対する各文字に関するランク関数とセレクト関数の計算を、それらの桁データからなる補助情報を備えた0と1からなるそれらの文字列に対するランク関数とセレクト関数の計算に帰着させることにより、塩基配列データに対して前記(4)と同様の計算を行う、塩基配列データに対する配列検索方法。
(6)アミノ酸配列データ、又は、全てのアルファベットを含む一般の文書データなどのような、多種の文字を含む文字列に対して、
全文字種を2種類に分類して、文字列の各文字がどちらの種類に属するかを0又は1で指定することにより、0と1からなるバイナリ文字列を作成し、また、
2種類の分類のそれぞれに対して、一方の分類のみの文字からなる部分列を抜き出すことにより、文字種が減少した文字列を2つ作り、
後者の2つの文字列に対して、同様の処理を、文字種が2種に減少するまで再帰的に繰り返し、
元の多種の文字を含む文字列に対するランク関数とセレクト関数の計算を、再帰的に得られたバイナリ文字列に対するランク関数とセレクト関数の計算に帰着させる、多種の文字を含むデータに対する配列検索方法。
(7)前記(1)において、ビット幅wを1とすることにより、補助情報を1ビットの累積値データを保持するメモリセルのみから構成される桁データから構成し、また、
前記補助情報を利用するランク関数の前記(2)の計算方法と前記(3)のセレクト関数の計算方法を、ビット演算に還元して論理ゲート回路により構成し、
それらのメモリセルと論理ゲート回路とを近接して配置した専用ハードウェアを利用することにより、ランク関数とセレクト関数の計算を高速化する方法。
(8)0と1からなる文字列に対して、そのバローズ・ホィーラー変換に対する前記(1)の補助情報を専用ハードウェア上に構築して、前記(7)のランク関数とセレクト関数の高速化された計算方法を用いることにより高速な検索を行う、0と1からなる文字列に対する配列検索方法。
本発明による補助情報のデータ構造により、桁データのデータ量は、上位桁に上がるたびに繰り返し2のw乗分の1に減少し、上位桁の情報が冗長に記憶されることが回避される。また、併せて、要素データを累積値データと差分データに分けることにより、要素データのデータ量の圧縮が行われ、記憶容量の効率化が達成される。
以下、本発明の実施例を、図面を用いて詳細に説明する。
本実施例では、2種類の文字0と1とからなるバイナリ文字列に対して、文字1に対するランク関数とセレクト関数の高速な計算を可能にするための補助情報のデータ構造とその構築方法を説明する。また、本発明の効果を示すために、この補助情報のデータ構造が、記憶容量の観点から効率が良いことを示す。また、その補助情報を用いて、ランク関数とセレクト関数を高速に計算する方法を説明する。さらに、これらのデータ構造と計算方法を用いた、バイナリ文字列データ内の文字列の高速検索を行うシステムの例を示す。
(構成の説明)
図1は、本発明の特徴を最も良く現している、ランク関数とセレクト関数の高速計算のための補助情報のデータ構造を表した説明図である。このデータ構造は、計算機主記憶上に構築される。
与えたれたバイナリ文字列をs = s[0] s[1]…s[n-1]とし、その長さをnとする。s[i]は、文字列sのi番目の文字を表し、その値は0又は1である。文字列の長さnの2進表記に必要なビット数をbとする。整数値データは、その2進表記を指定したビット幅(w)に区切ることにより、2のw乗進法の“桁”に分割する。文字位置は、文字列先頭を0として、文字列先頭より数えた文字数で表現する。文字位置kにおけるランク関数の、下からd番目の桁をB[i, d]と表す。
図1において、1は補助情報の全体を現す。この中には、最下位から最上位までの各桁に対する桁データ2が並んでいる。桁データ2の数はbをwで割った値(切り上げ)より1だけ大きい値である。最下位よりd番目の桁データは、全てのiに対するB[i, d]の情報を要約したものである。桁データ2は、要素データ3の繰り返しである。
要素データ3は、上位の桁を共有してd番目の桁を0から2のw乗マイナス1まで変化させたときの文字位置iに対するB[i, d]の情報を要約したものである。最下位の桁では、桁データ2はnを2のw乗で割った値(切り上げ)の数だけの要素データ3からなる。上位の桁に一つ上がるごとに、桁データ2に含まれる要素データ3の個数は2のw乗分の1(切り上げ)に繰り返し減少し、最上位の桁では桁データに含まれる要素データの数は1となる。このようにして、上位桁を冗長に記憶することが回避される。
要素データ3は、d番目の桁が2のw乗マイナス1のときのiに対するB[i, d]の値である累積値データ5と、それ以外のiに対するB[i, d] - B[j - 1, d]の値である差分データ4からなる。ここで、jは、i+1以下の2のw乗の倍数の最大値である。累積値データ5はwビット必要だが、差分データは1ビットで十分なため、これにより記憶容量の圧縮を図ることができる。
(動作の説明)
図2に、このような補助情報を構築するための処理手順を示す。また、図3に、桁のビット幅がw=2のときの構築過程の例を示す。図3において、31は与えられたバイナリ文字列を上から下に向かって縦方向に表記したものである。文字列31を入力し(S20)、その各文字位置で、文字列先頭からの0又は1の並びの累積値を計算することにより(S21)、各文字位置で図3の32のような値を得る。これらの値は2進表記している。次に、これらの2進表記をwビット幅の桁に分割し(S22)、分割後得られたものをセルと呼ぶ。これにより図3の33のような結果を得る。次に、最下位の桁から1桁上がるごとに繰り返し、上位桁のセルを2のw乗分の1に間引く(S23)。即ち、上から数えて2のw乗の倍数番目の位置にあるセルを残して、他のセルを削除する。これにより、図3の34に示すような結果を得る。次に、各列で上から数えて2のw乗の倍数番目以外の位置にあるセルの値を、直前のセルの値との差に変更する(S24)。これにより、図3の35に示すような結果を得る。ここで、その各列を桁データ2とし、その内部の2のw乗個ごとのセルを纏めて要素データ3とする。要素データ3の最後のセルを累積値データ5とし、それ以外のセルを差分データ4とする(S25)。
(効果の説明)
図3の31と35を比較することにより、入力文字列を記憶するために必要な記憶容量と、補助情報を記憶するために必要となる記憶容量とを比較することができる。補助情報では、バイナリ入力文字列内の2のw乗個の文字(2のw乗ビット)ごとに、累積値データとして、部分和の該当桁(wビット)の情報を余分に記憶する必要がある。さらに、補助情報では、バイナリ入力文字列内の2のw乗個の文字(2のw乗ビット)ごとに、上位1セル(1ビット)を記憶する必要がある。上位の桁においても同様に、2のw乗個のセル(2のw乗ビット)ごとに、累積値データとして、部分和の該当桁(wビット)をさらに記憶する必要がある。また、上位セルが複数あれば、さらに上位方向に同様のセルのための記憶容量が繰り返し必要となる。従って、入力文字列を記憶するために必要な記憶容量を基準として、補助情報を記憶するために必要となる記憶容量の割合は、累積値データのために、1+w/(2のw乗)であり、また、上位桁方向のために、公比r=1/(2のw乗)の無限級数和として1/(1−r)以下となり、最終的には、これらを合成して、(1+wr)/(1−r)以下となる。この値は、例えば、桁のビット幅がw=8のとき、約1.035となる。すなわち、補助情報のために余分に必要となる記憶容量の増加は、僅か約3.5%に抑えられる。
(全体の説明)
次に、図1に示した補助情報を用いて、バイナリ文字列データ内の文字列検索を行う方法を示す。図4は、そのシステム全体の構成図であり、図5は全体の動作のフローチャートである。
図4において、計算機43は、外部記憶装置41内に保持された文字列データ42を読み込んで(S51)、そのバローズ・ホィーラー変換を計算してから(S52)、主記憶44内に図1に示した補助情報のデータ構造を構築する。また、計算機43は、入力装置46を介して検索配列データ45を読み込み、各検索配列が文字列データ内に出現する位置を図5に示す手続きにより求めて、その検索結果48を出力装置47に出力する。
主記憶44上には、公知のバローズ・ホィーラー変換の計算を行うバローズ・ホィーラー変換処理部401、図2を用いて説明した補助情報の構築処理を行う補助情報構築処理部402、公知のサフィックス・アレイを計算するサフィックス・アレイ構築処理部404、サフィックス・アレイの要素を一定間隔に間引く処理をする部分配列抽出処理部405、ランク関数を計算するランク関数計算処理部408、セレクト関数を計算するセレクト関数計算処理部409、公知の方法でランク関数とセレクト関数を繰り返し用いて、バローズ・ホィーラー変換とサフィックス・アレイの情報から、検索文字列の出現位置を特定する文字列検索処理部407が構築される。これらの処理部は、プログラムによって実装される。ランク関数計算処理部408は、図6に示した擬似コードを実装したプログラムによって実現される。セレクト関数計算処理部409は、図7に示した擬似コードを実装したプログラムによって実現される。また、主記憶44上には、データとして、補助情報構築処理部402によって構築された補助情報403、及び部分配列抽出処理部405によって得られたサフィックス・アレイ部分配列406が保持される。
図5において、ステップ51で文字列データ42を入力し、ステップ52でそのバローズ・ホィーラー変換を、バローズ・ホィーラー変換処理部401によって公知の方法を用いて計算する(非特許文献6)。次に、ステップ53では、補助情報構築処理部402において、図2,3で説明した前記の方法を用いて、図1に示したような補助情報403を計算し、計算機主記憶44上に記憶する。また、ステップ57では、与えられた文字列データのサフィックス・アレイを、サフィックス・アレイ構築処理部404において公知の方法で計算する(非特許文献6)。サフィックス・アレイは文字列データ以上に多くの記憶容量を要するため、部分配列抽出処理部405において一定間隔に間引いて、例えば、100要素ごとに1要素を抽出して、主記憶内にサフィックス・アレイ部分配列406として記憶する(S58)。ステップ54では、検索配列45を一配列ずつ入力する。ステップ55では、その入力の終了判定を行い、全ての入力を読み切って新たな入力が得られなかったときは、処理全体を終了する。新たな入力として検索配列が得られたときは、その検索配列に対する、サフィックス・アレイ内での辞書式順位の範囲を計算する。この計算は、公知の方法を用いて、ランク関数を繰り返し計算することにより達成できる(非特許文献4)(S56)。補助情報を用いたランク関数の計算方法は、後述する。ステップ59では、検索配列に対するサフィックス・アレイ内での辞書式順位を、文字列データ内での文字位置に変換することにより、検索配列の出現位置を計算する。この変換は、公知の方法を用いて、セレクト関数を繰り返し計算することにより達成できる(非特許文献4)。補助情報を用いたセレクト関数の計算方法は、後述する。ステップ60では、計算された検索配列の出現位置を出力して、ステップ54の検索配列の入力処理に戻る。ステップ56,59,60の処理は、ランク関数計算処理部408とセレクト関数計算処理部409を用いて、文字列検索処理部407で行われる。
図6に、桁のビット幅がw=8のときに、補助情報を用いてランク関数を計算する関数の擬似コードを示す。ビット幅がw=8の場合は、2のw乗進法の1桁が計算機の1バイトに相当するため、特に高速に計算することが可能であるが、他のビット幅のときにもこの計算方法は有効である。この関数は、文字位置nを変数として、nにおけるランク関数の値rを返す。ここで、heightは補助情報のデータ構造の高さ(桁の数)であり、partial_sum_byte(h, n0)は、最下位の桁を0番目として、最下位より数えてh番目の桁にあるn0番目の部分和の値である。この値は、補助情報のデータ構造の中に累積値データとして記憶されている。何故ならば、n0は、定義式より256の倍数の値をとるからである。また、bit_sum(h, n0, n)は、補助情報のデータ構造において、最下位よりh番目の桁にある、n0+1番目からn番目までの差分データ(ビット値)の総和である。これらは、高々255個以下のビットの総和なので、文字列データの大きさに無関係に、一定の時間で計算できる。また、>>は右ビットシフト、<<は左ビットシフト、&はビットANDを表す。従って、n0はnの直前の256の倍数を表し、s&255はsの最下位バイトを表す。
図7に、桁のビット幅がw=8のときに、補助情報を用いてセレクト関数を計算する関数の擬似コードと、そのサブルーチンとして用いられる関数の擬似コードを示す。ビット幅がw=8の場合は、2のw乗進法の1桁が計算機の1バイトに相当するため、特に高速に計算することが可能であるが、他のビット幅のときにもこの計算は有効である。このセレクト関数は、与えられたnに対して、n番目の1の位置positionを返す。number_of_1sは文字列データ42全体の中に含まれる1の数であり、これを超えるnが与えられた場合は、この関数は−1を返す。外側のwhileループにより、positionの値は、最上位桁から最下位桁まで桁ごとに順次決定される。最上位桁の値は一意で0であり、これをrootで表す。bit_set(position)は、現在のpositionの該当桁の差分データ4の値が1か0かを表す。overshootは、上位の桁が繰上りを要求しているか否かを表すブール値である。position=first_child_of(position)は、該当桁を一つ下に下げ、その桁の値を0とすることを表す。byte_at(n, height_of(position))は、nの該当桁の値を表す。partial_sum_byte(position−1)は、positionの直前の位置に対応する要素データ3の累積値5を表す。shortageは、現在のpositionにおけるランク値とnの値との該当桁における差を表す。内側のwhileループでは、shortageの値が正である限り、positionの値を1ずつ増やして、差分データ4の値を参照して、shortageの値を更新する。こうしてshortageの値が0に等しくなったときは、最下位桁でない場合、即ち、height_of(position)が正の場合、該当桁より下位の桁でpositionのランク値がnの値を越えるか、又は、該当桁の差分データ4にビットが立つまで、positionの値を1ずつ増やしてゆく。ここで、該当桁より下位の桁でのpositionのランク値をnの値の比較のためには、以下に説明する関数compare_lower_bytes(position, n)を用いる。こうして得られたshortageの値が負になるか否かをブール値overshootとする。以上の処理を最下位の桁まで繰り返し、最終的に得られたpositionをセレクト関数の値として返す。
関数compare_lower_bytes(node, n)は、該当桁より下位の桁でのnodeにおけるランク値とnの値を比較し、前者が後者よりも小さければ負の値を返し、前者が後者よりも大きければ正の値を返し、両者が一致すれば0を返す。この関数は、与えられた文字位置の該当桁から最下位の桁に向かって順に、変数descendentでのランク値とnの値との該当桁における差を計算しながら、そのような比較判定を行う。descendant=last_child_of(descendant)は、該当桁を1つ下に下げ、その桁の値を最大化する。そこでの累積値データ5の値とnの該当桁の値との差sを計算して、0との比較判定を行うことにより、結果を返す。
(その他の実施例1)
前記実施例では、2種類の文字0と1とからなるバイナリ文字列データ内の文字列の高速検索を行うシステムの例を示した。本実施例では、文字の種類数を2に限定せずに、一般の複数の文字種に対しても同様に、本発明を用いて文字列の高速検索を行うシステムを実現できることを示す。説明を具体的にするために、超並列DNAシーケンサの配列データ解析で必要となる、A,G,C,T,Nの5種類の文字からなる塩基配列データに対して、高速に配列検索を行うシステムを取り上げる。20種類の文字を必要とするアミノ酸配列、又は、全てのアルファベットを用いる一般文書に対しても、同様な検索システムを実現することが出来る。
前記実施例と同様に、指定したパラメータwにより、整数値の2進表記をwビットごとに分解して、2のw乗進法による“桁”を考える。特に、w=8のときは、この1桁が計算機上の1バイトに相当することから、計算が高速になる。
基本的な考え方は、5種類の文字A,G,C,T,Nからなる文字列sが与えられたとき、これら5種類の各文字に対応するバイナリ文字列s(A), s(C), s(G), s(T), s(N)を作り、例えば、文字Aに対する元の文字列sのランク関数やセレクト関数の計算を、文字1に対するバイナリ文字列s(A)のランク関数やセレクト関数の計算に帰着させることである。バイナリ文字列s(A)は、与えられた文字列にsおいて、文字Aを1に、それ以外の文字を0に置き換えることにより得られる。その他の文字C,G,T,Nについても同様である。
バイナリ文字列s(A), s(C), s(G), s(T), s(N)のランク関数やセレクト関数を高速に計算するために、それらの補助情報を前記実施例と同様に構築する。但し、最下位の桁データでは、文字種類数(この場合は5)に比例してデータ量が増加することを避けるため、最下位の桁データだけは、全文字種を一括したデータ構造とする。一方、上位の桁データのデータ量は大きくない(1桁上がるごとに256分の1に減少)ので、上位の桁データは文字種ごとに独立に構築する。
図8は、5種類の文字A,G,C,T,Nからなる文字列データに対して、各々の文字A,G,C,T,Nに対するランク関数とセレクト関数を高速に計算するために用いる補助情報のデータ構造の説明図である。81は補助情報の全体であり、各文字A,G,C,T,Nに対する桁データ82(但し、最下位の桁を除く)と、それら5種類の文字の間で共有される最下位桁データ83とから構成される。各文字A,G,C,T,Nに対する上位の桁データ82の内部の構成は、バイナリ文字列の1に対する桁データ(図1の桁データ2)と全く同じである。これらの上位の桁データ82は、前記の各バイナリ文字列s(A), s(C), s(G), s(T), s(N)に対して、前記実施例と同一の方法で構築できる。一方、最下位桁データ83の内部は、図9に示す構成をもつ。
図9において、最下位桁データ83は、要素データ91の繰り返しからなる。各要素データ91は、文字列先頭から2のw乗個ごとに区切った文字位置の各グループに対して、A,G,C,T,N各文字に関するランク関数の最下位桁の値を纏めて要約した情報である。その内部は、2のw乗マイナス1個の差分データ92と、1個の累積値データ94とからなる。差分データ92は、対応する文字位置にA,G,C,T,Nのどの文字があるかにより、表93の変換テーブルに従って2進符号化した値をもつ。一方、累積値データ94は、2のw乗個に区切った文字位置のグループの最後の文字位置において、A,G,C,T,Nの各文字に関するランク関数の最下位桁の値を並べたものである。最下位桁データは、上記の定義に基づいて、与えられた文字列データから直接計算できる。
A,G,C,T,Nの5種類の文字からなる塩基配列データに対して、高速に配列検索を行うシステムの構成は、図4において、文字列データ及び検索配列データがバイナリ文字列からA,G,C,T,Nの5種類の文字からなる文字列に置き換えられるだけで、全く同様である。また、その動作のフローチャートも図5と全く同様である。その際、各文字A,G,C,T,Nに対して、塩基文字列sに対するランク関数とセレクト関数の計算が必要になる。ところが、それらの値は、バイナリ文字列s(A), s(C), s(G), s(T), s(N)に対するランク関数とセレクト関数の値に等しい。一方、後者の値は、前記実施例で説明した方法に従って高速に計算できる。従って、前者の値も高速に計算されることになる。
(その他の実施例2)
前記実施例では、文字の種類数を2に限定せずに、一般の複数の文字種に対して、文字列の高速検索を行うための補助情報を、最下位の桁については、全文字種に関する情報を纏めて有する最下位桁データと、それ以外の上位の桁については、文字種ごとに独立に構成した桁データとからなるデータ構造とすることにより、メモリ効率が良い高速な文字列検索が行えることを示した。
本実施例では、さらに、上位の桁データについても、文字種ごとに独立に構成することを避け、文字種が多いときにメモリ効率が改善される、もう一つの実施例を述べる。本実施例は、塩基配列データの場合よりも文字種が多く、20種の文字種をもつアミノ酸配列データや、それ以上の文字種をもつ全アルファベットからなる一般の文書データに対して応用するのに適している。
文字列検索のための全体システムや全体の処理手順は、前記実施例と全く同じである。上位桁のための補助情報のデータ構造と、それを利用するランク関数とセレクト関数の計算方法が異なるだけである。
基本的な考え方は、文字種全体を2つに分類して、多種の文字を含む文字列の各文字がそのどちらの種類に分類されるかに従って0又は1に置き換えたバイナリ文字列を作り、さらに、その2種類の内の一方のみからなる部分文字列を2つ作って、その各々に対して同様な処理を、文字種が2種類に減少するまで再帰的に繰り返す。元の文字列に対するランク関数とセレクト関数の計算は、このようにして得られるバイナリ文字列に対するランク関数とセレクト関数の計算に帰着させる。
図10に、そのようなバイナリ文字列の構成例を示す。101は多種の文字を含む文字列で、102で示すMはその各文字を2進符号化した3ビットの配列である。各文字は、その2進符号化の先頭ビットにより2種類に分類される。103で示すLは、その各々の先頭ビットを並べて得られるバイナリ配列である。104で示すM0とM1は、先頭ビットがそれぞれ0,1である文字と抜き出して、それらの下位の2ビットを並べた配列である。これらは、一方の種類のみの文字からなる101の部分配列に対応する。これらのM0とM1に対して、同様の処理を再帰的に繰り返す。即ち、それらの先頭ビットを並べて得られるバイナリ配列が105で示すL0とL1である。また、その先頭ビットに従って分類して、さらに下位のビットを並べて得られる配列が、M00と106で示すM01、及び、M10とM11である。この例では、ここで文字の種類が2種類まで減少したので、これらは、それらの先頭ビット並べて得られる配列L00とL01、及び、L10とL11と一致する。
図11に、多種の文字を含む文字列を、このようなバイナリ文字列に再帰的に分解するための処理手順を示す。ステップ110は文字列データの入力処理である。文字列データに含まれる文字の種類数は、高々2のb乗以下とする。ステップ111では、文字列データ内の各文字をbビットで2進符号化して、bビットの列を作る。ステップ112でkをbにセットして、ステップ113でkが1より大きいと判定される間、以下の処理を繰り返す。
ステップ115では、全てのkビットの列に対して、以下の処理を繰り返す。
ステップ116では、kビットの列の最上位ビットを用いて、バイナリ文字列を作る。
ステップ117では、kビットの列の最上位ビットにより分類した2つの部分列それぞれに対して、下位のk−1ビットを用いて、k−1ビットの列を作る。
全てのkビット列に対する処理が完了したら、ステップ118でkを1減らして、ステップ113に戻る。ステップ113でkが1に等しいと判断されたら、ステップ114で処理を終了する。
次に、多種の文字を含む文字列に対するランク関数の計算が、こうして得られたバイナリ文字列のランク関数の計算に帰着できることを示す。図12は、多種の文字を含む文字列のn番目の文字位置における文字cに関するランク関数を計算する処理手順を示す。ステップ120で、文字位置nと文字種cを入力する。ステップ121で、文字cのbビットの2進符号化を行い、それをp1 p2 … pbとする。ステップ122でk=1として、ステップ123でkがb以下であると判断される限り、以下の処理を繰り返す。ステップ126でpkの値が1に等しいかどうか判断し、それに従ってステップ127又はステップ128で示す式により、nの値を更新する。ここで、rank(Lp0 p1…p(k-1), n)は、先頭からkビットまでを用いて再帰的に分類して得られた部分文字列の先頭ビットを並べて得られるバイナリ文字列Lp0 p1…p(k-1)に対する文字位置nにおける1に関するランク関数の値である。これにより、pkの値が0か1かに拘わらず、nの値は、バイナリ文字列rank(Lp0 p1…p(k-1), n)のnにおけるpkに関するランク関数の値に更新される。この値は、次の再帰処理において、先頭からk+1ビットまでを用いて再帰的に分類して得られる部分文字列の先頭ビットを並べて得られるバイナリ文字列Lp0 p1…pk内の文字位置を指定することになる。ステップ129でkの値を1増やして、ステップ123に戻り再帰的な処理を続け、ステップ123でkがbを越えた場合は、ステップ124でnをランク値として回答し、ステップ125で処理を終える。
次に、多種の文字を含む文字列に対するセレクト関数の計算が、前記のようにして得られたバイナリ文字列のセレクト関数の計算に帰着できることを示す。図13は、多種の文字を含む文字列において文字cがn番目に現れる文字位置を求めるセレクト関数を計算する処理手順を示す。ステップ131で、文字種cと順位nを入力する。ステップ132で、文字cのbビットの2進符号化を行い、それを p1 p2 … pbとする。ステップ133でk=bとして、ステップ134でkが正であると判断される限り、以下の処理を繰り返す。ステップ135では式に従って、nの値を更新する。ここで、select(Lp0 p1…p(k-1), n, pk)は、先頭からkビットまでを用いて再帰的に分類して得られた部分文字列の先頭ビットを並べて得られるバイナリ文字列 Lp0 p1…p(k-1)において文字1がn番目に現れる文字位置を求めるセレクト関数の値である。pkの値が1に等しいときは、図7を用いて説明したバイナリ文字列の1に関するセレクト関数の計算方法を用いる。pkの値が0に等しいときにも、バイナリ文字列の0に関するセレクト関数を同様な方法で計算できる。この値は、次の再帰処理において、先頭からk−1ビットまでを用いて再帰的に分類して得られる部分文字列の先頭ビットを並べて得られるバイナリ文字列 Lp0 p1…p(k-2)内のp(k-1)の出現順位を指定することになる。ステップ136でkの値を1減らして、134に戻り再帰的な処理を続け、ステップ134でkが0になった場合は、ステップ137でnをセレクト値として回答し、ステップ138で処理を終える。
(その他の実施例3)
前記実施例では、汎用計算機の利用を想定して、ビット幅wを8にして、2のw乗進法の1桁を汎用計算機の1バイトに一致させて、汎用計算機上で効率的に計算できるような方法を説明した。しかし、これまでに説明した方法は、ビット幅wが8以外である場合でも有効である。
配列検索の処理を直接論理ゲートで構成し、ハードウェア化した専用の計算機として実現する場合には、ビット幅wを1にすると、ハードウェアが単純化されて有利となる。この場合、2進法の“桁”とはビットに他ならない。
ビット幅wを1にすることにより、図1に示した、ランク関数とセレクト関数の高速計算のための補助情報のデータ構造は、図14のように単純化される。141は補助情報の全体を現す。この中には、最下位から最上位までの各桁に対する桁データ142が並んでいる。桁データ142の数は、与えられた文字列sの長さnの2進表記に必要なビット数bより1だけ大きい値である。桁データ142は、要素データ143の繰り返しである。
要素データ143は、2つの累積値データ144と145とからなる。これらは、上位の桁(ビット)を共有して、下からd番目の桁(ビット)をそれぞれ0と1にしたときの文字位置におけるランク関数の下からd番目のビットの値である。
従って、最下位の桁データは、全ての文字位置におけるランク関数の値の最下位ビットを並べたものであり、下からd番目の桁データは、全ての文字位置におけるランク関数の値の下からd番目のビットを、1桁上がるごとに繰り返し半分になるように間引いてから、並べたものとなる。図1の4のような差分データは累積値データ144に置き換えられ、不要となる。
ビット幅wを1にすることにより、図6と図7に示したようなランク関数やセレクト関数の計算は全てビット演算に還元され、また、累積値データに差分データを加算するような計算は不要となり、また、ループ処理は展開することにより、繰り返し構造をもつ論理ゲート回路に還元される。このような論理ゲートを図14のデータ構造をもつメモリセルの近くに配置する回路設計を行うことにより、専用ハードウェアにより高速化されたランク関数とセレクト関数の計算が可能になる。
図15に、このような専用ハードウェアを用いた配列検索システムの全体の構成図を示す。計算機153は、外部記憶装置151内に保持された文字列データ152を読み込んで、そのバローズ・ホィーラー変換を計算してから、専用ハードウェア154内に図14に示した補助情報のデータ構造を構築する。また、計算機153は、入力装置156を介して検索配列データ155を読み込み、各検索配列が文字列データ内に出現する位置を図5に示す手続きにより求めて、その検索結果158を出力装置157に出力する。図5に示す手続きは、ビット幅wを1にすることによる変更は受けず、全く同様に行うことができる。
バイナリ文字列に対するランク関数とセレクト関数を高速に計算するための補助情報のデータ構造を表示した説明図である。 バイナリ文字列に対するランク関数とセレクト関数を高速に計算するための補助情報を構築する処理手順を示した説明図である。 バイナリ文字列に対するランク関数とセレクト関数を高速に計算するための補助情報を構築する過程を示した説明図である。 バイナリ文字列データ内の文字列検索を行うシステムを示した説明図である。 バイナリ文字列データ内の文字列検索を行う動作のフローチャートである。 バイナリ文字列に対するランク関数の計算方法の擬似コードを示した説明図である。 バイナリ文字列に対するセレクト関数の計算方法の擬似コードを示した説明図である。 バイナリ文字列に対するランク関数とセレクト関数を高速に計算するための補助情報のデータ構造の全体を表示した説明図である。 バイナリ文字列に対するランク関数とセレクト関数を高速に計算するための補助情報のデータ内部の最下位の桁データの構成を表示した説明図である。 多種の文字からなる文字列を、バイナリ文字列データに再帰的に分解する例を示した説明図である。 多種の文字からなる文字列を、バイナリ文字列データに再帰的に分解する処理のフローチャートである。 多種の文字からなる文字列に対するランク関数の計算を、バイナリ文字列データに対するランク関数の計算に帰着させるための処理のフローチャートである。 多種の文字からなる文字列に対するセレクト関数の計算を、バイナリ文字列データに対するセレクト関数の計算に帰着させるための処理のフローチャートである。 ビット幅wが1のときの、バイナリ文字列に対するランク関数とセレクト関数を高速に計算するための補助情報の単純化されたデータ構造を表示した説明図である。 ビット幅wを1として、バイナリ文字列に対するランク関数とセレクト関数の計算をハードウェアにより高速化した文字列検索システムを示した説明図である。
符号の説明
1 バイナリ文字列に対するランク関数とセレクト関数を高速に計算するための補助情報
2 桁データ
3 要素データ
4 差分データ
5 累積値データ

Claims (7)

  1. バイナリ文字列データを記憶する記憶装置と、
    バイナリ検索文字列を入力する入力装置と、
    前記文字列データ中における前記検索文字列の出現位置を計算する演算装置と、
    前記演算装置による演算結果を出力する出力装置を備え、
    前記演算装置は、
    前記文字列データをバローズ・ホィーラー変換するバローズ・ホィーラー変換処理部と、
    前記バローズ・ホィーラー変換に対する補助情報を構築する補助情報構築処理部と、
    前記補助情報を記憶する領域と、
    前記文字列データからサフィックス・アレイを計算するサフィックス・アレイ構築処理部と、
    前記サフィックス・アレイ構築処理部によって計算されたサフィックス・アレイの要素を一定間隔に間引く処理を行うサフィックス・アレイ部分配列抽出処理部と、
    前記サフィックス・アレイ部分配列抽出処理部によって得られたサフィックス・アレイ部分配列を記憶する領域と、
    前記補助情報を用いて、前記文字列データのバローズ・ホィーラー変換後の文字列において、その文字列先頭から指定文字位置までに出現する1の数を当該文字位置におけるランク値として計算するランク関数計算処理部と、
    指定した自然数kに対して、前記文字列データのバローズ・ホィーラー変換後の文字列において、k番目に1が現れる文字列先頭からの文字位置を探索文字位置とよぶとき、前記補助情報を用いて前記文字列データのバローズ・ホィーラー変換後の文字列における探索文字位置(セレクト値)を計算するセレクト関数計算処理部と、
    ランク関数とセレクト関数を繰り返し用いて前記バローズ・ホィーラー変換された結果と前記サフィックス・アレイの情報から前記文字列データ内での前記検索文字列の出現位置を検索する文字列検索処理部とを有し、
    前記補助情報構築処理部は、
    前記文字列データのバローズ・ホィーラー変換後の文字列に対して、ランク値及び文字列先頭から数えた文字位置を表す整数値を、それらの2進表記を指定したビット幅(w)に区切ることにより、2のw乗進法の桁に分割し、
    補助情報全体を、桁ごとの情報に分割した桁データの集まりとして記憶し、
    各々の桁データは、文字位置の該当桁の2のw乗個の値に対する補助情報を要素データとして、それらの繰り返しとして記憶し、
    各々の要素データは、文字位置の該当桁の2のw乗個の値に対して、
    その最後の値(2のw乗マイナス1)に対しては、累積値データとして、対応する文字位置でのランク値の該当桁を記憶し、
    それ以外の値(0から2のw乗マイナス2まで)では、差分データとして、対応する文字位置と該当桁の値が1だけ小さい文字位置での、ランク値の該当桁での変化分を記憶することにより、
    上位の桁に上がる毎に、桁データのデータ量を繰り返し2のw乗分の1に減少させて記憶し、
    前記ランク関数計算処理部は、
    前記文字列データのバローズ・ホィーラー変換後の文字列の対象文字位置におけるランク値を計算するにあたり、
    最下位桁から最上位桁までの各桁において、前記補助情報の桁データを参照して、
    対象文字位置の直前の要素データ内の累積値データと、
    対象文字位置を含む要素データ内での、対象文字位置までの差分データの総和と、
    の和を求め、さらに、それと下位の桁からの繰上り(最下位桁では0)の和を求め、その値をwビット幅の下位桁と上位桁に分割し、その下位桁の値をランク値の該当桁の値とし、その上位桁の値を該当桁から上位の桁への繰り上がりとして計算し、
    これを、最下位桁から最上位桁までの各桁に対して順次繰り返すことにより、前記対象文字位置におけるランク値を計算し、
    前記セレクト関数計算処理部は、
    最上位桁から最下位桁までの各桁において、前記補助情報の桁データを参照して、
    探索文字位置の直前の要素データ内の累積値データと、
    対象文字位置を含む要素データ内での、対象文字位置までの差分データの総和と、
    の和として、探索文字位置のランク値の該当桁の値を求め、その値がkの該当桁の値(繰上りが必要な場合は、2のw乗を加えた値)以上となり、かつ、
    ランク値の該当桁以下の未定の桁の値を、探索文字位置における該当桁より下位の桁の要素データの累積値データとしたときの仮の値がk以上となる、
    ような最小の値として、探索文字位置の該当桁の値を決め、そのときランク値の該当桁がkの該当桁の値を越えるときは、一つ下位の桁においては繰上りが必要として、
    これを、最上位桁から最下位桁まで順次繰り返すことにより、与えられた自然数kに対する探索文字位置を計算し、
    前記文字列検索処理部は、
    前記ランク関数計算処理部に指示してランク関数の計算を繰り返すことにより、前記検索文字列が現れる前記サフィックス・アレイ内の順位の範囲を計算し、前記セレクト関数計算処理部に指示してセレクト関数の計算を繰り返すことにより、前記文字列データにおける前記検索文字列の出現位置を計算することを特徴とするバイナリ文字列検索システム。
  2. A,G,C,TとNからなる塩基文字列データを記憶する記憶装置と、
    塩基検索文字列を入力する入力装置と、
    前記文字列データ中における前記検索文字列の出現位置を計算する演算装置と、
    前記演算装置による演算結果を出力する出力装置を備え、
    前記演算装置は、
    前記文字列データをバローズ・ホィーラー変換するバローズ・ホィーラー変換処理部と、
    前記バローズ・ホィーラー変換に対する補助情報を構築する補助情報構築処理部と、
    前記補助情報を記憶する領域と、
    前記文字列データからサフィックス・アレイを計算するサフィックス・アレイ構築処理部と、
    前記サフィックス・アレイ構築処理部によって計算されたサフィックス・アレイの要素を一定間隔に間引く処理を行うサフィックス・アレイ部分配列抽出処理部と、
    前記サフィックス・アレイ部分配列抽出処理部によって得られたサフィックス・アレイ部分配列を記憶する領域と、
    前記補助情報を用いて、各塩基を表す文字種(A,G,C,T,N)に対して、前記文字列データのバローズ・ホィーラー変換後の文字列において、その文字列先頭から指定文字位置までに出現するその塩基の数を当該文字位置におけるランク値として計算するランク関数計算処理部と、
    各塩基を表す文字種と指定した自然数kに対して、前記文字列データのバローズ・ホィーラー変換後の文字列において、k番目にその塩基が現れる文字列先頭からの文字位置を探索文字位置とよぶとき、前記補助情報を用いて前記文字列データのバローズ・ホィーラー変換後の文字列における探索文字位置を計算するセレクト関数計算処理部と、
    ランク関数とセレクト関数を繰り返し用いて前記バローズ・ホィーラー変換された結果と前記サフィックス・アレイの情報から前記文字列データ内での前記検索文字列の出現位置を検索する文字列検索処理部とを有し、
    前記補助情報構築処理部は、
    塩基文字列データに対して、各塩基を表す文字種ごとに、その文字を1、他の文字を0に置き換えたバイナリ文字列を作成する手段を有し、
    最下位を除く上位の桁については、各塩基を表す文字種ごとに作成された前記バイナリ文字列のバローズ・ホィーラー変換後の文字列に対し、前記請求項1記載の補助情報構築処理部により文字種ごとに独立に桁データを作成することにより、上位の桁データを構築しこれを記憶する手段を有し、
    また、最下位の桁については、文字列先頭より2のw乗個ごとの文字位置では、文字種ごとのランク値の最下位桁を記憶し、それ以外の文字位置では、現れる文字種を2進符号化して記憶することにより、最下位の桁データを構築しこれを記憶する手段を有し、
    前記ランク関数計算処理部は、
    各塩基を表す文字種に対して、前記文字列データのバローズ・ホィーラー変換後の文字列の対象文字位置におけるランク値の計算を、その文字種に対して作成されたバイナリ配列に対する同一文字位置におけるランク関数の計算に帰着させ、その計算を前記請求項1記載のランク関数計算処理部を用いて計算し、
    前記セレクト関数計算処理部は、
    各塩基を表す文字種と指定した自然数kに対する探索文字位置の計算を、その文字種に対して作成されたバイナリ配列と自然数kに対するセレクト関数の計算に帰着させ、その計算を前記請求項1記載のセレクト関数計算処理部を用いて計算し、
    前記文字列検索処理部は、
    前記ランク関数計算処理部に指示してランク関数の計算を繰り返すことにより、前記検索文字列が現れる前記サフィックス・アレイ内の順位の範囲を計算し、前記セレクト関数計算処理部に指示してセレクト関数の計算を繰り返すことにより、前記文字列データにおける前記検索文字列の出現位置を計算することを特徴とする塩基文字列検索システム。
  3. 多数の文字種からなる多文字種文字列データを記憶する記憶装置と、
    多文字種検索文字列を入力する入力装置と、
    前記文字列データ中における前記検索文字列の出現位置を計算する演算装置と、
    前記演算装置による演算結果を出力する出力装置を備え、
    前記演算装置は、
    前記文字列データをバローズ・ホィーラー変換するバローズ・ホィーラー変換処理部と、
    前記バローズ・ホィーラー変換に対する補助情報を構築する補助情報構築処理部と、
    前記補助情報を記憶する領域と、
    前記文字列データからサフィックス・アレイを計算するサフィックス・アレイ構築処理部と、
    前記サフィックス・アレイ構築処理部によって計算されたサフィックス・アレイの要素を一定間隔に間引く処理を行うサフィックス・アレイ部分配列抽出処理部と、
    前記サフィックス・アレイ部分配列抽出処理部によって得られたサフィックス・アレイ部分配列を記憶する領域と、
    前記補助情報を用いて、各文字種に対して、前記文字列データのバローズ・ホィーラー変換後の文字列において、その文字列先頭から指定文字位置までに出現するその文字種の数を当該文字位置におけるランク値として計算するランク関数計算処理部と、
    各文字種と指定した自然数kに対して、前記文字列データのバローズ・ホィーラー変換後の文字列において、k番目にその文字種が現れる文字列先頭からの文字位置を探索文字位置とよぶとき、前記補助情報を用いて前記文字列データのバローズ・ホィーラー変換後の文字列における探索文字位置を計算するセレクト関数計算処理部と、
    ランク関数とセレクト関数を繰り返し用いて前記バローズ・ホィーラー変換された結果と前記サフィックス・アレイの情報から前記文字列データ内での前記検索文字列の出現位置を検索する文字列検索処理部とを有し、
    前記補助情報構築処理部は、
    多文字種文字列データに対して、全文字種を2種類に分類して、文字列の各文字がどちらの種類に属するかを0又は1で指定することにより、0と1からなるバイナリ文字列を作成し、前記2種類の分類のそれぞれに対して、一方の分類のみの文字からなる部分列を抜き出すことにより文字種が半減した文字列を2つ作り、後者の2つの文字列に対して、同様の処理を、文字種が2種に減少するまで再帰的に繰り返す手段を有し、
    前記の再帰的な繰り返しの過程で得られる全てのバイナリ文字列に対して、前記請求項1記載の補助情報構築処理部を用いて、バイナリ文字列に対する前記請求項1記載の補助情報を構築し、それらの補助情報を全て記憶し、
    前記ランク関数計算処理部は、
    各文字種に対して、前記文字列データのバローズ・ホィーラー変換後の文字列の対象文字位置におけるランク関数の計算を、前記の再帰的な文字種の分類の過程におけるバイナリ文字列に対するランク関数の計算に帰着させ、その計算を前記請求項1記載のランク関数計算処理部を用いて計算し、
    前記セレクト関数計算処理部は、
    各文字種と指定した自然数kに対する探索文字位置の計算を、前記の再帰的な文字種の分類の過程におけるバイナリ文字列に対するセレクト関数の計算に帰着させ、その計算を前記請求項1記載のセレクト関数計算処理部を用いて計算し、
    前記文字列検索処理部は、
    前記ランク関数計算処理部に指示してランク関数の計算を繰り返すことにより、前記検索文字列が現れる前記サフィックス・アレイ内の順位の範囲を計算し、前記セレクト関数計算処理部に指示してセレクト関数の計算を繰り返すことにより、前記文字列データにおける前記検索文字列の出現位置を計算することを特徴とする多文字種文字列検索システム。
  4. 演算装置を用いて、バイナリ文字列データにおけるバイナリ検索文字列の出現位置を計算する文字列検索方法において、
    前記演算装置は、
    入力された文字列データのバローズ・ホィーラー変換を計算し、
    前記バローズ・ホィーラー変換に対する補助情報を計算し、
    前記文字列データからサフィックス・アレイを計算し、
    前記サフィックス・アレイの要素を一定間隔に間引くことによりサフィックス・アレイ部分配列を計算し、
    前記文字列データのバローズ・ホィーラー変換後の文字列において、
    その文字列先頭から指定文字位置までに1が出現する数を当該文字位置におけるランク値として計算する関数をランク関数とよび、また、
    指定した自然数kに対して、1がk番目に現れる文字列先頭からの文字位置を探索文字位置(セレクト値)として計算する関数をセレクト関数とよぶとき、
    前記文字列データのバローズ・ホィーラー変換後の文字列に対して、ランク関数の計算を繰り返すことにより、前記検索文字列が現れる前記サフィックス・アレイ内の順位の範囲を計算し、セレクト関数の計算を繰り返すことにより、前記文字列データにおける前記検索文字列の出現位置を計算し、
    前記補助情報の計算に当たっては、
    前記文字列データのバローズ・ホィーラー変換後の文字列に対して、ランク値及び文字列先頭から数えた文字位置を表す整数値を、それらの2進表記を指定したビット幅(w)に区切ることにより、2のw乗進法の桁に分割し、
    補助情報全体を、桁ごとの情報に分割した桁データの集まりとして記憶し、
    各々の桁データは、文字位置の該当桁の2のw乗個の値に対する補助情報を要素データとして、それらの繰り返しとして記憶し、
    各々の要素データは、文字位置の該当桁の2のw乗個の値に対して、
    その最後の値(2のw乗マイナス1)に対しては、累積値データとして、対応する文字位置でのランク値の該当桁を記憶し、
    それ以外の値(0から2のw乗マイナス2まで)では、差分データとして、対応する文字位置と該当桁の値が1だけ小さい文字位置での、ランク値の該当桁での変化分を記憶することにより、
    上位の桁に上がる毎に、桁データのデータ量を繰り返し2のw乗分の1に減少させて記憶し、
    前記ランク関数の計算に当たっては、対象文字位置におけるランク値を計算するにあたり、
    最下位桁から最上位桁までの各桁において、前記補助情報の桁データを参照して、
    対象文字位置の直前の要素データ内の累積値データと、
    対象文字位置を含む要素データ内での、対象文字位置までの差分データの総和と、
    の和を求め、さらに、それと下位の桁からの繰上り(最下位桁では0)の和を求め、その値をwビット幅の下位桁と上位桁に分割し、その下位桁の値をランク値の該当桁の値とし、その上位桁の値を該当桁から上位の桁への繰り上がりとして計算し、
    これを、最下位桁から最上位桁までの各桁に対して順次繰り返すことにより、前記対象文字位置におけるランク値を計算し、
    前記セレクト関数の計算に当たっては、
    最上位桁から最下位桁までの各桁において、前記補助情報の桁データを参照して、
    探索文字位置の直前の要素データ内の累積値データと、
    対象文字位置を含む要素データ内での、対象文字位置までの差分データの総和と、
    の和として、探索文字位置のランク値の該当桁の値を求め、その値がkの該当桁の値(繰上りが必要な場合は、2のw乗を加えた値)以上となり、かつ、
    ランク値の該当桁以下の未定の桁の値を、探索文字位置における該当桁より下位の桁の要素データの累積値データとしたときの仮の値がk以上となる、
    ような最小の値として、探索文字位置の該当桁の値を決め、そのときランク値の該当桁がkの該当桁の値を越えるときは、一つ下位の桁においては繰上りが必要として、
    これを、最上位桁から最下位桁まで順次繰り返すことにより、与えられた自然数kに対する探索文字位置を計算することを特徴とするバイナリ文字列検索方法。
  5. 演算装置を用いて、A,G,C,TとNからなる塩基文字列データにおける塩基検索文字列の出現位置を計算する文字列検索方法において、
    前記演算装置は、
    入力された文字列データのバローズ・ホィーラー変換を計算し、
    前記バローズ・ホィーラー変換に対する補助情報を計算し、
    前記文字列データからサフィックス・アレイを計算し、
    前記サフィックス・アレイの要素を一定間隔に間引くことによりサフィックス・アレイ部分配列を計算し、
    前記文字列データのバローズ・ホィーラー変換後の文字列において、
    各塩基に対して、その文字列先頭から指定文字位置までに出現するその塩基の数を当該文字位置におけるランク値として計算する関数をランク関数とよび、また、
    各塩基と指定した自然数kに対して、k番目にその塩基が現れる文字列先頭からの文字位置を探索文字位置(セレクト値)として計算する関数をセレクト関数とよぶとき、
    前記文字列データのバローズ・ホィーラー変換後の文字列において、ランク関数の計算を繰り返すことにより、前記検索文字列が現れる前記サフィックス・アレイ内の順位の範囲を計算し、セレクト関数の計算を繰り返すことにより、前記文字列データにおける前記検索文字列の出現位置を計算し、
    前記補助情報の計算に当たっては、
    塩基文字列データに対して、各塩基を表す文字種ごとに、その文字を1、他の文字を0に置き換えたバイナリ文字列を作成して、
    最下位を除く上位の桁については、各塩基を表す文字種ごとに作成された前記バイナリ文字列のバローズ・ホィーラー変換後の文字列に対し、前記請求項4記載の補助情報の計算法に従い、文字種ごとに独立に桁データを計算し、それらを上位の桁データとして記憶し、
    また、最下位の桁については、文字列先頭より2のw乗個ごとの文字位置では、文字種ごとのランク値の最下位桁を記憶し、それ以外の文字位置では、現れる文字種を2進符号化して記憶することにより、これらを最下位の桁データとして記憶し、
    前記ランク関数の計算に当たっては、
    各塩基を表す文字種に対して、前記文字列データのバローズ・ホィーラー変換後の文字列の対象文字位置におけるランク値の計算を、その文字種に対して作成されたバイナリ配列に対する同一文字位置におけるランク関数の計算に帰着させ、その計算を前記請求項4記載のランク関数計算方法に従って計算し、
    前記セレクト関数の計算に当たっては、
    各塩基を表す文字種と指定した自然数kに対する探索文字位置の計算を、その文字種に対して作成されたバイナリ配列と自然数kに対するセレクト関数の計算に帰着させ、その計算を前記請求項4記載のセレクト関数計算方法に従って計算することを特徴とする塩基文字列検索方法。
  6. 演算装置を用いて、多文字種(多数の文字種からなる)文字列データにおける多文字種検索文字列の出現位置を計算する文字列検索方法において、
    前記演算装置は、
    入力された文字列データのバローズ・ホィーラー変換を計算し、
    前記バローズ・ホィーラー変換に対する補助情報を計算し、
    前記文字列データからサフィックス・アレイを計算し、
    前記サフィックス・アレイの要素を一定間隔に間引くことによりサフィックス・アレイ部分配列を計算し、
    前記文字列データのバローズ・ホィーラー変換後の文字列において、
    各文字種に対して、その文字列先頭から指定文字位置までに出現するその文字種の数を当該文字位置におけるランク値として計算する関数をランク関数とよび、また、
    各文字種と指定した自然数kに対して、k番目にその文字種が現れる文字列先頭からの文字位置を探索文字位置(セレクト値)として計算する関数をセレクト関数とよぶとき、
    前記文字列データのバローズ・ホィーラー変換後の文字列において、ランク関数の計算を繰り返すことにより、前記検索文字列が現れる前記サフィックス・アレイ内の順位の範囲を計算し、セレクト関数の計算を繰り返すことにより、前記文字列データにおける前記検索文字列の出現位置を計算し、
    前記補助情報の計算に当たっては、
    多文字種文字列データに対して、全文字種を2種類に分類して、文字列の各文字がどちらの種類に属するかを0又は1で指定することにより、0と1からなるバイナリ文字列を作成し、前記2種類の分類のそれぞれに対して、一方の分類のみの文字からなる部分列を抜き出すことにより文字種が半減した文字列を2つ作り、後者の2つの文字列に対して、同様の処理を、文字種が2種に減少するまで再帰的に繰り返し、
    前記の再帰的な繰り返しの過程で得られる全てのバイナリ文字列に対して、前記請求項4記載の補助情報構築処理部を用いて、バイナリ文字列に対する前記請求項4記載の補助情報を構築し、それらの補助情報を全て記憶し、
    前記ランク関数の計算に当たっては、
    各文字種に対して、前記文字列データのバローズ・ホィーラー変換後の文字列の対象文字位置におけるランク関数の計算を、前記の再帰的な文字種の分類の過程におけるバイナリ文字列に対するランク関数の計算に帰着させ、その計算を前記請求項4記載のランク関数計算方法に従って計算し、
    前記セレクト関数の計算に当たっては、
    各文字種と指定した自然数kに対する探索文字位置の計算を、前記の再帰的な文字種の分類の過程におけるバイナリ文字列に対するセレクト関数の計算に帰着させ、その計算を前記請求項1記載のセレクト関数計算方法に従って計算することを特徴とする多文字種文字列検索方法。
  7. 請求項1記載の文字列検索システムにおいて、
    ビット幅wを1とすることにより、前記補助情報を1ビットの累積値データを保持するメモリセルのみから構成される桁データから構成し、
    前記ランク関数計算処理部及びセレクト関数計算処理部を、ビット演算に還元して論理ゲート回路により構成し、
    前記メモリセルと前記論理ゲート回路とを近接して配置した専用ハードウェアを備えることを特徴とする文字列検索システム。
JP2008088322A 2008-03-28 2008-03-28 文字列検索システム及び方法 Active JP5171346B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008088322A JP5171346B2 (ja) 2008-03-28 2008-03-28 文字列検索システム及び方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008088322A JP5171346B2 (ja) 2008-03-28 2008-03-28 文字列検索システム及び方法

Publications (2)

Publication Number Publication Date
JP2009244996A true JP2009244996A (ja) 2009-10-22
JP5171346B2 JP5171346B2 (ja) 2013-03-27

Family

ID=41306838

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008088322A Active JP5171346B2 (ja) 2008-03-28 2008-03-28 文字列検索システム及び方法

Country Status (1)

Country Link
JP (1) JP5171346B2 (ja)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012203456A (ja) * 2011-03-23 2012-10-22 Hitachi Ltd 文書検索システム、文書検索方法、及びプログラム
KR101355254B1 (ko) 2012-10-22 2014-01-28 인하대학교 산학협력단 접미사 트리의 병렬 생성을 위한 트라이 자료구조 기반 접미사 병렬 분할 방법
JP2015099458A (ja) * 2013-11-19 2015-05-28 パナソニックIpマネジメント株式会社 圃場環境観測システム
CN110162487A (zh) * 2019-04-15 2019-08-23 深圳壹账通智能科技有限公司 一种快速统计重复次数方法、装置及存储介质
WO2020227718A1 (en) * 2019-05-09 2020-11-12 Catalog Technologies, Inc. Data structures and operations for searching, computing, and indexing in dna-based data storage
CN113095042A (zh) * 2021-03-23 2021-07-09 广州零端科技有限公司 一种字符串加密方法、系统、装置及存储介质
US11227219B2 (en) 2018-05-16 2022-01-18 Catalog Technologies, Inc. Compositions and methods for nucleic acid-based data storage
US11286479B2 (en) 2018-03-16 2022-03-29 Catalog Technologies, Inc. Chemical methods for nucleic acid-based data storage
US11306353B2 (en) 2020-05-11 2022-04-19 Catalog Technologies, Inc. Programs and functions in DNA-based data storage
US11379729B2 (en) 2016-11-16 2022-07-05 Catalog Technologies, Inc. Nucleic acid-based data storage
US11535842B2 (en) 2019-10-11 2022-12-27 Catalog Technologies, Inc. Nucleic acid security and authentication
US11763169B2 (en) 2016-11-16 2023-09-19 Catalog Technologies, Inc. Systems for nucleic acid-based data storage
US12001962B2 (en) 2023-08-04 2024-06-04 Catalog Technologies, Inc. Systems for nucleic acid-based data storage

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001188791A (ja) * 1999-12-24 2001-07-10 Internatl Business Mach Corp <Ibm> 配列の変換方法、構造解析方法、装置、記録媒体及び伝送媒体
JP2003228571A (ja) * 2001-11-28 2003-08-15 Kyoji Umemura 文字列の出現頻度の計数方法およびその方法を利用可能な装置
JP2003256433A (ja) * 2002-02-27 2003-09-12 Japan Science & Technology Corp 遺伝子構造解析方法およびその装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001188791A (ja) * 1999-12-24 2001-07-10 Internatl Business Mach Corp <Ibm> 配列の変換方法、構造解析方法、装置、記録媒体及び伝送媒体
JP2003228571A (ja) * 2001-11-28 2003-08-15 Kyoji Umemura 文字列の出現頻度の計数方法およびその方法を利用可能な装置
JP2003256433A (ja) * 2002-02-27 2003-09-12 Japan Science & Technology Corp 遺伝子構造解析方法およびその装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JPN6012063583; N. J. Larsson and K. Sadakane: 'Faster Suffix Sorting' インターネット , 1999 *
JPN6012063585; R. Gonzalez, S. Grabowski, V. Makinen, and G. Navarro: 'PRACTICAL IMPLEMENTATION OF RANKAND SELECT QUERIES' インターネット , 2005 *

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012203456A (ja) * 2011-03-23 2012-10-22 Hitachi Ltd 文書検索システム、文書検索方法、及びプログラム
KR101355254B1 (ko) 2012-10-22 2014-01-28 인하대학교 산학협력단 접미사 트리의 병렬 생성을 위한 트라이 자료구조 기반 접미사 병렬 분할 방법
JP2015099458A (ja) * 2013-11-19 2015-05-28 パナソニックIpマネジメント株式会社 圃場環境観測システム
US11379729B2 (en) 2016-11-16 2022-07-05 Catalog Technologies, Inc. Nucleic acid-based data storage
US11763169B2 (en) 2016-11-16 2023-09-19 Catalog Technologies, Inc. Systems for nucleic acid-based data storage
US11286479B2 (en) 2018-03-16 2022-03-29 Catalog Technologies, Inc. Chemical methods for nucleic acid-based data storage
US11227219B2 (en) 2018-05-16 2022-01-18 Catalog Technologies, Inc. Compositions and methods for nucleic acid-based data storage
CN110162487A (zh) * 2019-04-15 2019-08-23 深圳壹账通智能科技有限公司 一种快速统计重复次数方法、装置及存储介质
WO2020227718A1 (en) * 2019-05-09 2020-11-12 Catalog Technologies, Inc. Data structures and operations for searching, computing, and indexing in dna-based data storage
US11610651B2 (en) 2019-05-09 2023-03-21 Catalog Technologies, Inc. Data structures and operations for searching, computing, and indexing in DNA-based data storage
US11535842B2 (en) 2019-10-11 2022-12-27 Catalog Technologies, Inc. Nucleic acid security and authentication
US11306353B2 (en) 2020-05-11 2022-04-19 Catalog Technologies, Inc. Programs and functions in DNA-based data storage
CN113095042A (zh) * 2021-03-23 2021-07-09 广州零端科技有限公司 一种字符串加密方法、系统、装置及存储介质
CN113095042B (zh) * 2021-03-23 2023-12-19 广州零端科技有限公司 一种字符串加密方法、系统、装置及存储介质
US12002547B2 (en) 2023-02-09 2024-06-04 Catalog Technologies, Inc. Data structures and operations for searching, computing, and indexing in DNA-based data storage
US12001962B2 (en) 2023-08-04 2024-06-04 Catalog Technologies, Inc. Systems for nucleic acid-based data storage

Also Published As

Publication number Publication date
JP5171346B2 (ja) 2013-03-27

Similar Documents

Publication Publication Date Title
JP5171346B2 (ja) 文字列検索システム及び方法
Munro et al. Space-efficient construction of compressed indexes in deterministic linear time
Apostolico et al. Compression of biological sequences by greedy off-line textual substitution
Claude et al. Grammar-compressed indexes with logarithmic search time
Beller et al. Computing the longest common prefix array based on the Burrows–Wheeler transform
Barbay et al. On compressing permutations and adaptive sorting
CN107066837B (zh) 一种有参考dna序列压缩方法和系统
JP2008299867A (ja) データ構造によるコンピュータ表現及びそれに関連する符号化/復号化方法
Navarro et al. Faster compressed suffix trees for repetitive collections
Belazzougui et al. Representing the suffix tree with the CDAWG
CN111801665A (zh) 用于大数据应用的分层局部敏感哈希(lsh)分区索引
Sirén Burrows-Wheeler transform for terabases
Najam et al. Pattern matching for DNA sequencing data using multiple bloom filters
Grossi et al. More haste, less waste: Lowering the redundancy in fully indexable dictionaries
Korban et al. A Novel Genetic Search Scheme Based on Nature--Inspired Evolutionary Algorithms for Self-Dual Codes
Dhaliwal et al. Practical efficient string mining
Léonard et al. On the number of elements to reorder when updating a suffix array
KR20010086028A (ko) 처리 회로 및 검색 프로세서 회로
Kärkkäinen et al. Full-text indexes in external memory
US11736119B2 (en) Semi-sorting compression with encoding and decoding tables
Hacid et al. Incremental neighborhood graphs construction for multidimensional databases indexing
CN109918659B (zh) 一种基于不保留最优个体遗传算法优化词向量的方法
Hamedanian et al. An efficient prefix tree for incremental frequent pattern mining
Petri et al. Efficient indexing algorithms for approximate pattern matching in text
Policriti et al. Average linear time and compressed space construction of the Burrows-Wheeler transform

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20101018

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121211

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121225

R150 Certificate of patent or registration of utility model

Ref document number: 5171346

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350