研究概要 |
run長符号化された2つの文字列の最長共通部分列を求める問題に関して、この問題を解くこれまでに知られたアルゴリズムよりも高速なアルゴリズムを提案した。2つの文字列の長さがそれぞれM、Nであり、runの個数がそれぞれm、nであるとき、従来のアルゴリズムでは漸近的にO(mn loglog(max(m, n))時間で動作するものとO(mn min(M/m, N/n))時間で動作するものが知られていた。提案したアルゴリズムは、この漸近的な動作時間をO(mn loglog min(m, n, M/m, N/n, X))に改良した。ただし、Xは2つの文字列からのrunからなる対におけるrunの長さの差の平均であり、runの長さが均一であるほど小さな値をとる。 1つの文字列における特定の文字の分布に関して、各長さの区間においてその特定文字が現れる最大の回数を索引として求める単純なアルゴリズムを提案した。文字列の長さがnであるとき、複雑な再帰手法に基づいて何度も畳み込み計算をすることでこの索引を構築するO(n^2/log n)時間アルゴリズムがこれまでに知られていた。これに対し、提案したアルゴリズムは漸近的に同じ実行時間で再帰を用いることなしに1回の畳み込み計算により索引を構築する。また、このアルゴリズムを用いると、文字列に現れる特定文字の個数がkであるとき、O(n + \min(k^2/log k, (n - k)^2/log(n - k))時間で索引を構築可能である。また、特定文字一つ一つに任意の自然数重みが与えられている場合にO(n + k^2/log k)時間、負の値を含む任意の整数重みが与えられている場合にO(n + k loglog n)時間で索引を構築するアルゴリズムもそれぞれ提案した。これらのアルゴリズムは文字列に特定文字が疎にしか現れない場合に非常に高速に動作する。
|