(57)【特許請求の範囲】
【請求項１】
それぞれ複数のワードからなる第１データ列および第２データ列を比較するデータ比較装置であって、
前記第１データ列に含まれる前記ワードを所定の第１選択間隔（第１選択間隔は１以上の整数）の分ずつ飛ばして得られる第１一致箇所検索対象ワードと、前記第２データ列に含まれる前記ワードを所定の第２選択間隔（第２選択間隔は１以上の整数）の分ずつ飛ばして得られる第２一致箇所検索対象ワードとを、順次比較して両者が一致する箇所を探す一致箇所検索部と、
前記一致箇所検索部が検出した一致箇所のワードを基に前記第１データ列および前記第２データ列のそれぞれ前および後に連なるワードについて、前記第１データ列と前記第２データ列との間で比較を行ない、両者が一致する範囲を共通部分の範囲として検出する共通部分検索部と、
前記共通部分検索部によって検出された共通部分の範囲の情報に基づき、前記第１データ列と前記第２データ列との間の差分情報を出力する差分情報出力部と、
を具備することを特徴とするデータ比較装置。
【請求項２】
請求項１に記載のデータ比較装置において、
前記第１選択間隔と前記第２選択間隔との最大公約数は１である、
ことを特徴とするデータ比較装置。
【請求項３】
請求項１または請求項２に記載のデータ比較装置において、
前記第１一致箇所検索対象ワードの値をソートし、その結果得られる順序情報を順序情報記憶部に書き込む順序付処理部をさらに具備し、
前記一致箇所検索部は、前記順序情報記憶部から前記順序情報を読み出すことにより、ある前記第２一致箇所検索対象ワードを、比較する必要のある前記第１一致箇所検索対象ワードのみと比較し、両者が一致する箇所を探す、
ことを特徴とするデータ比較装置。
【請求項４】
請求項１から３までのいずれか一項に記載のデータ比較装置において、
前記第１データ列および前記第２データ列に含まれる前記ワードは、これら各データ列の元となる比較対象データを所定サイズに分割したブロックのデータにハッシュ関数を適用して得られたハッシュ値を有するものである、
ことを特徴とするデータ比較装置。
【請求項５】
それぞれ複数のワードからなる第１データ列および第２データ列を比較する処理をコンピュータに実行させるプログラムであって、
前記第１データ列に含まれる前記ワードを所定の第１選択間隔（第１選択間隔は１以上の整数）の分ずつ飛ばして得られる第１一致箇所検索対象ワードと、前記第２データ列に含まれる前記ワードを所定の第２選択間隔（第２選択間隔は１以上の整数）の分ずつ飛ばして得られる第２一致箇所検索対象ワードとを、順次比較して両者が一致する箇所を探す一致箇所検索過程と、
前記一致箇所検索過程で検出した一致箇所のワードを基に前記第１データ列および前記第２データ列のそれぞれ前および後に連なるワードについて、前記第１データ列と前記第２データ列との間で比較を行ない、両者が一致する範囲を共通部分の範囲として検出する共通部分検索過程と、
前記共通部分検索過程において検出された共通部分の範囲の情報に基づき、前記第１データ列と前記第２データ列との間の差分情報を出力する差分情報出力過程と、
の処理をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ同士を比較し差分情報を出力するデータ比較装置およびそのプログラムに関する。
【背景技術】
【０００２】
ソフトウェア開発段階では、機能向上やバグ修正などのファイル編集が頻繁に発生する。このとき、あるファイルを編集して新しいファイルができたとき、編集箇所を知るために、ＵＮＩＸ（登録商標）のｄｉｆｆに代表される、新旧２つのファイルを比較して差分を出力するツールが用いられる。このようなファイル編集による変更の場合は、一般的には変更箇所が少ないため、差分のデータサイズは小さい。これら新旧両方のファイルの情報を残す必要がある場合は、それらのファイルを物理的に両方とも残すよりも、変更前のファイルとそれらの差分を表わす差分ファイルを残す方が保存領域の節約になるなどのメリットがあるため、差分ファイルの生成にもこのような差分出力ツールがよく用いられる。
【０００３】
差分ファイルを生成するアルゴリズムとしては、差分データのサイズをできるだけ短くすることが求められていた。そのための代表的なアルゴリズムとして、ＬＣＳ（Longest Common Subsequence：最長共通サブシーケンス）またはＳＥＤ（Shortest Edit Distance：最小編集距離）がある。
【０００４】
また、この考え方をベースにして、高速化を図ったアルゴリズムが非特許文献１に記載されている。また、差分検索アルゴリズムとしてＬＣＳやＳＥＤの代わりに、サフィックス・ツリー（suffix tree）を用い、同時にデータ圧縮を行うことで差分データサイズを小さくするｂｄｉｆｆが非特許文献２に記載されている。
【０００５】
特許文献１に記載されている発明は、ｒｓｙｎｃアルゴリズム（非特許文献３）とほぼ同様に、片方のファイルをあるブロックサイズに分割し、それぞれのブロックのチェックサムを求める。もう片方のファイルの先頭から同じブロックサイズのブロックのチェックサムを求め、相方のファイルの中でチェックサムが同じになるブロックがあるかどうか検索する。同じブロックが見つからない場合は、ブロックを後方に１バイトずらしてチェックサムを求め、同様の検索を行う。以降、これを繰り返す。検索の過程で同じブロックが見つかった場合、両方のファイルともブロックサイズ分だけ後方にずらしたブロック同士でチェックサムを比較し、同一か否かを判定する。このように、文字単位の比較とブロック単位の比較を組み合わせて、高速化を図っている。
【０００６】
特許文献２に記載されている発明は、２つのファイルのＬＣＳを検索し、そのＬＣＳを境に２つのファイルを論理的に前後に分断する。その分断したファイル同士で、同様に、ＬＣＳの検索および分断の作業を行い、ＬＣＳが予め与えられた長さよりも短くなるまで、この作業を階層的に繰り返す。この発明は、ＬＣＳの部分で前後に分断して検索範囲を限定することにより、高速化を図っている。
【非特許文献１】EUGENE W. MYERS，“An O(ND) difference algorithm and its variations”，Algorithmica，１９８６年，Vol.1，No.2，pp.251-266．
【非特許文献２】Walter F. Tichy，“The string-to-string correction problem with block moves”，ACM Transactions on Computer Systems，１９８４年，volume 2，issue４，pp.309-321．
【非特許文献３】Andrew Tridgell，Paul Mackerras，“The rsync algorithm”，［平成２０年４月５日検索］，インターネット＜URL： http://rsync.samba.org/tech_report/＞
【特許文献１】特開２００５−１７３７２６
【特許文献２】特表２００５−５２５６４１
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、背景技術に属する上記のどの方法も、比較する２つのファイルの差分が少ないことを前提としたアルゴリズムであった。従って、差分が非常に少ない場合は短時間で結果を出力できるが、差分が大きくなると比較的時間がかかるという問題があった。特に、サイズの大きいファイル同士の比較の場合はこの時間の問題が顕著であった。
【０００８】
また、背景技術に属する方法では、ファイルを比較して差分を得るための処理時間がファイルのサイズや差分のサイズに依存しており、所望の時間内に処理を終えるようにすることはできなかった。
【０００９】
本発明は、上記の課題認識に基づいて行なわれたものであり、比較的短時間でファイルを比較して差分情報を出力するためのデータ比較装置およびプログラムを提供することを目的とする。また、それらのデータ比較装置およびプログラムが、ファイルのサイズに関わらず、所望時間内で処理を終えるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
［１］上記の課題を解決するための本発明の一態様は、それぞれ複数のワードからなる第１データ列および第２データ列を比較するデータ比較装置であって、前記第１データ列に含まれる前記ワードを所定の第１選択間隔（第１選択間隔は１以上の整数）の分ずつ飛ばして得られる第１一致箇所検索対象ワードと、前記第２データ列に含まれる前記ワードを所定の第２選択間隔（第２選択間隔は１以上の整数）の分ずつ飛ばして得られる第２一致箇所検索対象ワードとを、順次比較して両者が一致する箇所を探す一致箇所検索部と、前記一致箇所検索部が検出した一致箇所のワードを基に前記第１データ列および前記第２データ列のそれぞれ前および後に連なるワードについて、前記第１データ列と前記第２データ列との間で比較を行ない、両者が一致する範囲を共通部分の範囲として検出する共通部分検索部と、前記共通部分検索部によって検出された共通部分の範囲の情報に基づき、前記第１データ列と前記第２データ列との間の差分情報を出力する差分情報出力部とを具備することを特徴とする。
【００１１】
この構成によれば、一致箇所検索部は、第１データ列中のワードのうち所定の第１選択間隔の分ずつ飛ばして得られる第１一致箇所検索対象ワードのみを比較対象とする。また同様に、第２データ列中のワードのうち所定の第２選択間隔の分ずつ飛ばして得られる第２一致箇所検索対象ワードのみを比較対象とする。従って、全ワードを比較対象とする場合に比べて、比較回数が少なくて済む。つまり、処理時間が短くて済む。また、共通部分検索部は、一致箇所検索部によって検出された一致箇所を基に、その前後に連なるワードについて第１データ列と第２データ列との間の値の比較を行うため、一致箇所を含む共通部分の範囲を求められる。共通部分検索部が求めた共通部分の範囲の情報に従い、差分情報出力部は、第１データ列と第２データ列の差分情報を出力できる。なお、共通部分の範囲の情報と差分情報とは、情報として互いに等価である。
また、この構成によれば、第１選択間隔と第２選択間隔を、適宜設定することが出来る。一致箇所検索対象ワードの数は、各々のデータ列の長さ（ワード数）をこの選択間隔で除した数にほぼ等しいため、第１選択間隔と第２選択間隔の設定により、ワードの値の比較回数を変化させることができる。つまり、たとえ第１データ列や第２データ列のサイズが膨大なものであっても、所望の比較回数（ひいては、所望の処理時間）となるように、第１選択間隔と第２選択間隔を設定でき、その代償は、一致箇所の検出機会の部分的損失に過ぎない。
なお、第１選択間隔および第２選択間隔は１以上の任意の整数として良いが、これらの数値を比較的大きくするほうが、処理時間を短くするという本発明の効果がより大きい。例えば、第１選択間隔および第２選択間隔の少なくともいずれか一方を２以上とすると処理時間の短縮が図れる。第１選択間隔および第２選択間隔をそれぞれ１０以上とするとさらに処理時間の短縮が図れる。第１選択間隔および第２選択間隔をそれぞれ１００以上とするとより一層処理時間の短縮が図れる。これらの値が大きな値であればあるほど処理時間の短縮が図れるが、検出が保証される共通部分の長さが長くなる。（それより短い共通部分は検出できなくなる可能性がある）。これらの間隔の設定の仕方については、後で述べる。
【００１２】
［２］また、本発明の一態様は、上記のデータ比較装置において、前記第１選択間隔と前記第２選択間隔との最大公約数は１であることを特徴とするものである。
【００１３】
この構成により、第１一致箇所検索対象ワードと第２一致箇所検索対象ワードが徐々にずれていく。従って、共通部分の位置（各々のデータ列の先頭位置からのワード数）が第１データ列内と第２データ列内でずれていても、共通部分が大きければ、一致箇所検索対象ワードが重なる箇所が存在する可能性が高くなる。つまり、一致箇所検出の可能性が高くなる。また、共通部分のワード数が前記第１選択間隔と前記第２選択間隔の最小公倍数以上の場合は、一致箇所が必ず検出できる。
【００１４】
［３］また、本発明の一態様は、上記のデータ比較装置において、前記第１一致箇所検索対象ワードの値をソートし、その結果得られる順序情報を順序情報記憶部に書き込む順序付処理部をさらに具備し、前記一致箇所検索部は、前記順序情報記憶部から前記順序情報を読み出すことにより、ある前記第２一致箇所検索対象ワードを、比較する必要のある前記第１一致箇所検索対象ワードのみと比較し、両者が一致する箇所を探すことを特徴とするものである。
【００１５】
この構成により、一致箇所検索部が順序情報を利用できることによって、ある第２一致箇所検索対象ワードについて、すべての第１一致箇所検索対象ワードとの比較を行なう必要がなく、例えば二分木的に大小比較をすることにより、限定された数の第１一致箇所検索対象ワードとの比較をすれば充分である。つまり、第１一致箇所検索対象ワードとの比較を効率的に行える。よって、トータルでの比較回数が少なくて済み、従って全体の処理時間が短くて済む。
また、原理的に、第１一致箇所検索対象ワードの数について対数オーダーの比較回数で済む。つまり、第１一致箇所検索対象ワードの数が多いほど（第１データ列のワード数が多いほど）、この構成による時間短縮の効果が大きく得られる。
【００１６】
［４］また、本発明の一態様は、上記のデータ比較装置において、前記第１データ列および前記第２データ列に含まれる前記ワードは、これらデータ列の元となる比較対象データを所定サイズに分割したブロックのデータにハッシュ関数を適用して得られたハッシュ値を有するものであることを特徴とする。
【００１７】
この構成により、元データにおけるブロックのデータが一致してない限り、第１データ列と第２データ列に含まれるワードの値が偶然に一致する可能性は非常に小さくなる。つまり、本来共通部分ではないのに偶々第１および第２の一致箇所検索対象ワードの値が同じになってしまう可能性は非常に小さくなる。つまり、元データそのものを比較することなく、データ比較における高い精度が得られることとなる。
【００１８】
［５］また、本発明の一態様は、それぞれ複数のワードからなる第１データ列および第２データ列を比較する処理をコンピュータに実行させるプログラムであって、前記第１データ列に含まれる前記ワードを所定の第１選択間隔（第１選択間隔は１以上の整数）の分ずつ飛ばして得られる第１一致箇所検索対象ワードと、前記第２データ列に含まれる前記ワードを所定の第２選択間隔（第２選択間隔は１以上の整数）の分ずつ飛ばして得られる第２一致箇所検索対象ワードとを、順次比較して両者が一致する箇所を探す一致箇所検索過程と、前記一致箇所検索過程で検出した一致箇所のワードを基に前記第１データ列および前記第２データ列のそれぞれ前および後に連なるワードについて、前記第１データ列と前記第２データ列との間で比較を行ない、両者が一致する範囲を共通部分の範囲として検出する共通部分検索過程と、前記共通部分検索過程において検出された共通部分の範囲の情報に基づき、前記第１データ列と前記第２データ列との間の差分情報を出力する差分情報出力過程との処理をコンピュータに実行させることを特徴とするものである。
【発明の効果】
【００１９】
本発明によれば、２つのデータ列の共通部分を高速に検出することができる。つまり、２つのデータ列の差分を出力する処理を高速化できる。また、パラメータ（第１選択間隔および第２選択間隔）を適宜設定することにより、ワード間の比較処理の回数を制御することができる。つまり、データ列のサイズがたとえ大きい場合にも、処理時間を所望の程度に抑えることが可能となる。つまり、全く異なる２つのデータ列について、予め設定された時間内に、それらが互いに全く異なるものであることを判定できる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の実施形態について図面を参照しながら説明する。
差分データを得るための処理としては、背景技術で述べた手法と同様に、データ比較装置が、与えられた２つのデータ列の間の共通部分（共通部分が複数箇所ある場合は、複数箇所の共通部分）を見つけ、共通部分を除外した部分を差分データとする。したがって、以下で説明する実施形態では、２つのデータ列の共通部分を探す処理を高速に行なえるようにする。
【００２１】
従来の手法では、できるだけ多くの共通部分を見つけることによって差分データ量を小さくすることに主眼を置いていた。これに対し、本発明の実施形態では、ワード数の非常に多い２つのデータ列に対し、これらを比較しその差分を高速に出力することを目的とする。また、まったく異なるデータ列同士の比較を行った場合、共通部分がないと判断するのも高速に行えるようにする。代わりに、差分のデータ量は必ずしも最小である必要はなく、短い共通部分は見逃しても良いという戦略を基本とする。ここで、ワードとはデータ１個分である。ワードの長さは１バイト（＝８ビット）程度であっても良いが、本実施形態では、典型的には４バイトから６４バイト程度の長さを有するワードを想定する。また、６４バイトを超える長さのワードであっても良い。
【００２２】
また、データ列を構成する各ワードは、一例としてはハッシュ関数が返す値である。良好なハッシュ関数を使えば、ハッシュ関数が適用される元のデータが全く同一でない限り、返されるハッシュ値が偶然に一致する可能性は非常に小さい。
【００２３】
［第１の実施の形態］
図１は、本発明の第１の実施形態によるデータ比較装置の機能構成を示すブロック図である。図示するように、データ比較装置１は、共通部分検索部３と、一致箇所検索部４と、差分情報出力部５と、制御部６と、データファイル１０Ａと１０Ｂと２０Ａと２０Ｂと、ハッシュデータ生成部１５とを含んで構成される。
【００２４】
一致箇所検索部４は、制御部６の指示で、制御部６から受け取ったデータ列ＡとＢの比較用ポインタが指す位置以降のデータ列を対象とし、後述するデータ列Ａに含まれるワードを所定の第１選択間隔（ｎＡ）の分ずつ飛ばして得られる一致箇所検索対象ワードと、データ列Ｂに含まれるワードを所定の第２選択間隔（ｎＢ）の分ずつ飛ばして得られる一致箇所検索対象ワードとを、順次比較して両者が一致する箇所を探す機能を有する。得られた一致箇所のデータ列ＡとＢの比較用ポインタを制御部６に返す。一致箇所がない場合は、データ列Ｂの比較用ポインタをデータ列Ｂの末尾に設定して、データ列ＡとＢの比較用ポインタを制御部６に返す。
【００２５】
共通部分検索部３は、制御部６の指示で、制御部６から受け取ったデータ列ＡとＢの比較用ポインタを起点とし、一致箇所検索部４が検出した一致箇所のワードを基にデータ列Ａおよびデータ列Ｂのそれぞれ前および後に連なるワードについて、データ列Ａとデータ列Ｂとの間の比較を行ない、両者が一致する範囲を共通部分の範囲として検出する機能を有する。共通部分のデータ列ＡとＢの比較用ポインタの範囲を差分情報出力部５に出力し、共通部分の範囲の直後のデータ列ＡとＢの比較用ポインタを制御部６に返す。
【００２６】
差分情報出力部５は、共通部分検索部３によって検出された共通部分の範囲の情報に基づき、制御部６の指示で、データ列Ａとデータ列Ｂとの間の差分情報を出力する機能を有する。
【００２７】
また、制御部６は、一致箇所検索部４、共通部分検索部３、差分情報出力部５の実行を制御する。具体的には、データ列Ａおよびデータ列Ｂそれぞれの比較用ポインタを初期化し、現在の比較用ポインタの位置を用いて共通部分検索部３に処理を実行させ、共通部分の直後のデータ列ＡとＢの比較用ポインタを受け取り、比較用ポインタがデータ列の末尾を指しているかどうかを判断し、ポインタが末尾まで行っていなければ現在の比較用ポインタの位置を用いて一致箇所検索部４に処理を実行させ、一致箇所のデータ列ＡとＢの比較用ポインタを受け取り、また比較用ポインタがデータ列の末尾を指しているかどうかを判断することにより、順次、共通部分３と一致箇所検索部４が処理を行なえるように制御する。また、ポインタが末尾を指すと（つまり、一致箇所検索および共通部分検索がすべて終了すると）、差分情報出力部５に処理を実行させる。
【００２８】
データファイル２０Ａおよび２０Ｂは、このデータ比較装置１が比較処理を行なう対象である２つのデータファイルである。また、データファイル１０Ａおよび１０Ｂ（比較対象データ）は、別の、２つのデータファイルである。
ハッシュデータ生成部１５は、所定のハッシュ関数の計算を行なう機能を有しており、データファイル１０Ａを基にそのハッシュ関数を適用してデータファイル２０Ａを生成するとともに、データファイル１０Ｂを基に同じハッシュ関数を適用してデータファイル２０Ｂを生成する。使用するハッシュ関数は、適宜選択すれば良いが、例えば、ＭＤ５やＳＨＡやＨＡＶＡＬやチェックサムやＣＲＣ（巡回冗長符号）などを用いることができる。
なお、データファイル１０Ａと１０Ｂと２０Ａと２０Ｂは、半導体メモリやハードディスク装置（ＨＤＤ）などの記録媒体に格納されている。
【００２９】
図２は、データファイル１０Ａと２０Ａとの関係を示す概略図である。図示するように、データファイル１０Ａと２０Ａは、いずれもシーケンシャルファイルである。
【００３０】
データファイル１０Ａは、所定の長さを有するブロックをＭＡ個含んでいる。一例としては、ブロックサイズは４ｋバイト（１ｋバイトは、１０２４バイト）とする。この例の場合、データファイル１０Ａ全体の長さは、４ｋ×ＭＡ（バイト）である。この図では、各ブロックのデータの値を、先頭ブロックから順に、Ｂ（０），Ｂ（１），Ｂ（２），・・・・・・，Ｂ（ＭＡ−１）と表わしている。ＭＡの値はいかなる値であっても良いが、例えば、ＭＡ＝１０４８５７６（＝２＾２０）とすると、データファイル１０Ａ全体の長さは４ＧＢ（ギガバイト）である。なお、ブロック長は、４ｋバイトに限らず、任意のサイズであって良い。
【００３１】
データファイル２０Ａは、ハッシュデータ生成部１５によってデータファイル１０Ａを基に生成されるデータである。データファイル２０Ａは、ワード（ここでは、１ワードは１６バイトとする）をＭＡ個含んでいる。つまり、データファイル２０Ａ全体の長さは、１６×ＭＡ（バイト）である。各々のワードは、上記のデータファイル１０Ａのブロックに対応しており、その順序も保存されている。例えば、データファイル１０Ａの先頭のブロックＢ（０）を基に、ハッシュデータ生成部１５がハッシュ関数を適用し、その結果得られる値ｈ（Ｂ（０））がデータファイル２０Ａの先頭のワードに格納されている。データファイル１０Ａの次のブロックＢ（１）には、データファイル２０Ａの次のワードの値ｈ（Ｂ（１））が対応している。以下同様に続き、データファイル１０Ａの最後のブロックＢ（ＭＡ−１）には、データファイル２０Ａの最後のワードの値ｈ（Ｂ（ＭＡ−１））が対応している。なお、ワード長は、１６バイトに限らず任意のサイズであって良いが、現在一般によく使われるハッシュ関数が返す値は、１６バイト（＝１２８ビット）、２０バイト（＝１６０ビット）、２８バイト（＝２２４ビット）、３２バイト（＝２５６ビット）、４８バイト（＝３８４ビット）、６４バイト（＝５１２ビット）などである。データファイル２０Ａのワード長などを基に、適宜使用するハッシュ関数を選択して用いるようにする。
【００３２】
以上、図を参照しながらデータファイル１０Ａと２０Ａの関係について説明したが、データファイル１０Ｂと２０Ｂの関係についても同様である。但し、データファイル１０Ａの長さとデータファイル１０Ｂの長さとが異なっていても良い。
【００３３】
次に、データ比較装置１がデータファイル２０Ａと２０Ｂとを比較する処理の方法および手順について説明する。
【００３４】
図３は、データ比較装置１において、主として共通部分検索部３および一致箇所検索部４の機能によりデータファイル２０Ａと２０Ｂとの間の共通部分を発見するための、処理の概要を示す概略図である。この図において、データ列Ａ（第１データ列）は、データファイル２０Ａのデータを表わしており、データ列Ａが含むワード数はＮＡワード（ＮＡは１以上の整数）である。データ列Ａのうち、先頭からｎＡワード（ｎＡは１以上の整数，第１選択間隔）毎に、一致箇所検索部４によって検索される一致箇所検索対象ワード５１Ａまたは５２Ａ（第１一致箇所検索対象ワード）が存在している。これらの一致箇所検索対象ワード５１Ａまたは５２Ａは、図中において、それぞれ固有のハッチングパターンで示している。つまり、データ列Ａには、ＮＡ／ｎＡ個（但し、この場合の除算の剰余は切り上げ）の一致箇所検索対象ワードが含まれている。また同様に、データ列Ｂ（第２データ列）は、データファイル２０Ｂのデータを表わしており、データ列Ｂが含むワード数はＮＢワード（ＮＢは１以上の整数）である。データ列Ｂのうち、先頭からｎＢワード（ｎＢは１以上の整数，第２選択間隔）毎に、一致箇所検索部４によって検索される一致箇所検索対象ワード５１Ｂまたは５２Ｂ（第２一致箇所検索対象ワード）が存在している。これらの一致箇所検索対象ワード５１Ｂまたは５２Ｂは、図中において、それぞれ固有のハッチングパターンで示している。つまり、データ列Ｂには、ＮＢ／ｎＢ個（但し、この場合の除算の剰余は切り上げ）の一致箇所検索対象ワードが含まれている。
なお、ｎＡとｎＢ個の少なくともいずれか一方を、２以上とすることにより、処理の高速化が図れる。
【００３５】
図示するデータ列の例において、データ列ＡとＢの共通部分として示している範囲は、その範囲に含まれるすべてのワードの値が、データ列ＡとＢとの間で完全に一致する範囲である。つまり、この共通部分が、共通部分検索部３によって検出されるべき範囲である。従って、上述した一致箇所検索対象ワードのうち、この共通部分に含まれる一致箇所検索対象ワード５２Ａと５２Ｂとは、互いに値が一致する。なお、データ列Ａにおける当該共通部分のワード位置（データ列Ａの先頭から当該共通部分の直前までのワード数）と、データ列Ｂにおける当該共通部分のワード位置（同様）とは、必ずしも一致する必要はない。
【００３６】
共通部分検索部３と一致箇所検索部４とは協調しながら、制御部６の制御に従い、後述する手順によって、データ列ＡとＢとの共通部分を検出する。そのとき、一致箇所検索部４は、データ列Ａに含まれる一致箇所検索対象ワード（５１Ａ，５２Ａ）と、データ列Ｂに含まれる一致箇所検索対象ワード（５１Ｂ，５２Ｂ）のみを互いに比較する対象とする。また、一致箇所検索部４は、一致箇所検索対象ワード以外のワード（この図において、ハッチングがない部分のワード）は、比較対象とせずに読み飛ばす。
【００３７】
なお、このとき、ｎＡとｎＢの最大公約数が１になるように設定し、それに従って一致箇所検索ワードを決定することが好適である。ｎＡとｎＢの最大公約数が１になるようにすることにより、下で説明する処理においてデータ列Ａとデータ列Ｂの一致箇所検索対象ワードが少しずつずれていくため、一致箇所を検出できる可能性が高まる。また、共通部分のワード数がｎＡとｎＢの最小公倍数以上の場合は、一致箇所が必ず検出できる。
なお、ｎＡとｎＢとの最大公約数が１になるように設定することは必須ではないが、そうしない場合には一致箇所を検出できなくなる可能性もある。例えば、最も簡単な例で、ｎＡ＝ｎＢ＝２とした場合、仮にデータ列Ａの０ワード目から９ワード目までとデータ列Ｂの１ワード目から１０ワード目までが共通部分であったとしても（つまり両者が１ワード分ずれている状態）、データ列Ａもデータ列Ｂとも、一致箇所検索対象ワードは偶数ワード目（０ワード目、２ワード目、４ワード目、・・・）のみとなってしまい、この共通部分に含まれる一致箇所を検出できない。
【００３８】
一致箇所検索部４は、データ列Ｂに含まれる一致箇所検索対象ワードの各々について、データ列Ａに含まれる一致箇所検索対象ワードの各々との比較を行う。この比較の結果、一致箇所検索部４が一致するワードを見つけた場合には、共通部分検索部３が、その場所から前方向（データ列全体の先頭に向かう方向）と後方向（データ列全体の末尾に向かう方向）に、１ワードずつスキャンし、両データ列の値が同じである範囲（共通部分）の先頭と末尾を探す。このようにして、一致箇所検索部４によって見つけられた一致ワードを含む共通部分の範囲が決定される。
【００３９】
共通部分検索部３によって共通部分の範囲が決定されたあとは、その共通部分の次のワードから、上記の作業をデータ列の最後まで繰り返す。ｎＡとｎＢの最大公約数が１のときは、（ｎＡ×ｎＢ）ワード以上のサイズを有する共通部分の中のどこかには必ず、データ列ＡおよびデータＢの両方の一致箇所検索対象ワードであるワードが含まれるため、上記のような処理手順により、（ｎＡ×ｎＢ）ワード以上のサイズの共通部分を必ず見つけることができる。
【００４０】
また、上記のような処理手順をとる場合、データ列Ａとデータ列Ｂとが全く異なる場合など、双方の一致箇所検索対象ワードが一つも一致しない場合であっても、一致箇所検索部４は、最大でも、（ＮＡ／ｎＡ）×（ＮＢ／ｎＢ）回の比較処理を行えば良い。つまり、サイズの大きなデータ列同士を比較する場合であっても、ｎＡおよびｎＢの値を適宜設定することにより、一致個所の検出の機会を犠牲にすることになるものの、比較処理の回数を抑えることができ、つまりデータ列同士の比較処理にかかる処理時間を所定範囲内に抑えるようにすることができる。
【００４１】
この場合、言い換えれば、データ列のサイズＮＡおよびＮＢが与えられたとき、見つけるべき共通部分の長さの最小値（（ｎＡ×ｎＢ）ワード）と検索回数（つまり、一致箇所検索部４による比較処理の回数（ＮＡ／ｎＡ）×（ＮＢ／ｎＢ）、即ち、（ＮＡ×ＮＢ）／（ｎＡ×ｎＢ））は反比例の関係になっている。つまり、検出すべき共通部分の長さの最小値が一定値である場合は、ｎＡとｎＢの個別の値に関係なく、最大検索回数はほぼ同じである。ｎＡとｎＢを比較的大きな値にすれば（ｎＡ×ｎＢを比較的大きな値にすれば）、比較回数を少なくすることができるが、共通部分を見逃す確率（検出できない可能性）が増える。逆に、ｎＡとｎＢとを比較的小さな値にすれば（ｎＡ×ｎＢを比較的小さな値にすれば）、共通部分を見逃す確率は減るが、比較回数が増える。従って、本実施形態の方法によれば、最大検索時間や見つけるべき共通部分の長さの最小値といった要求条件に従って、ｎＡとｎＢを適切に設定することができる。
【００４２】
図４は、データ比較装置１による差分出力のための処理手順を示すフローチャートである。以下、このフローチャートに沿って、データ比較装置１の詳細な処理手順について説明する。
【００４３】
まずステップＳ６１において、データ比較装置１は、初期化処理を行う。この初期化処理では、データファイル２０Ａおよび２０Ｂをオープンするとともに、比較するワードのポインタ（比較用ポインタ）をデータ列ＡおよびＢのそれぞれの先頭にセットする。
【００４４】
また、この初期化処理は、パラメータｎＡとｎＢを適切な値に設定する処理を含む。このパラメータは、実施条件により設定の手順が異なる。
【００４５】
見つけるべき共通部分の最小値Ｌを基準に設定する場合は、ｎＡは、Ｌを超えない任意の正整数値と設定する。ｎＢは、ｎＡと互いに素であり且つＬ／ｎＡを超えない最大の正整数と設定する。このように設定した場合、ｎＡ×ｎＢ≦Ｌとなるので、Ｌワード以上のサイズを有する共通部分を必ず検出することができる。
【００４６】
一方、比較回数の上限Ｃを基準にｎＡとｎＢの値を設定する場合は、（ＮＡ／ｎＡ）×（ＮＢ／ｎＢ）≦Ｃを満たすようにｎＡとｎＢの値を選択する。これは、データ列ＡとＢとが全く異なるものである場合であっても、両者の一致箇所検索対象ワードを総当り的に比較する回数がせいぜい（ＮＡ／ｎＡ）×（ＮＢ／ｎＢ）であるためである。
【００４７】
具体的な一例として、ｎＡは、（ＮＡ／Ｃ）を下回らない正整数値とする。また、ｎＢは、ｎＡと互いに素であり、且つ、（ＮＡ×ＮＢ）／（ｎＡ×Ｃ）を下回らない最小の正整数値とする。このとき、（ＮＡ／ｎＡ）×（ＮＢ／ｎＢ）≦Ｃとなる。つまり総比較回数はＣ以下となる。
【００４８】
次にステップＳ６２において、共通部分検索部３が、共通部分の範囲を検索する。具体的には、まず、それぞれのデータ列上にある比較用ポインタが示すワードの値を比較し、一致するかどうか判定する。このとき、比較用ポインタは、それぞれのデータ列の現在の一致箇所検索対象ワードを指している。上記判定の結果、一致しない場合には、このステップの処理を終了して次のステップへ進む。上記判定の結果、一致する場合には、両方の比較用ポインタをそれぞれデータ列の前方向に１つずつずらしながら、順次、両方の比較用ポインタが指すワードの値を比較していく。そして、どちらかの比較用ポインタがデータ列の先頭に到達するか、ワードの値が一致しなくなるまで比較用ポインタを前方向に進める。このようにして、共通部分の先頭位置を検索する。次に、比較用ポインタを最初の位置（現在の一致箇所検索対象ワードの位置）に戻し、同様にして、比較用ポインタを後ろ方向に１つずつずらしながら両方のデータ列のワードの値を比較していくことにより、共通部分の末尾の位置を検索する。現在の一致箇所検索対象ワードの位置が共通部分の一部であった場合には、このようにして、その共通部分の先頭位置と末尾位置が求まる。つまり、その共通部分の範囲が決まる。共通部分検索部３は、その共通部分の先頭位置と末尾位置の情報を、制御部６に渡す。
【００４９】
次にステップＳ６３において、制御部６は、ＡおよびＢの両方のデータ列の比較用ポインタがファイルの末尾（ここで、ファイルの末尾とは、データ列が有する最後のワードのさらに後ろである）にあるかどうかを判定する。少なくとも片方の比較用ポインタがファイルの末尾にある場合は（比較すべき一致箇所検索対象ワードの比較をすべて終えた場合）（ステップＳ６３：ＹＥＳ）、ステップＳ６２からＳ６５までのループを抜け出し、ステップＳ６６に進む。判定の結果、比較用ポインタが末尾にない場合（まだ、比較すべき一致箇所検索対象ワードの組み合わせが残っている場合）（ステップＳ６３：ＮＯ）、次のステップＳ６４に進む。
【００５０】
次のステップＳ６４に進んだ時点では、ＡおよびＢの両方のデータ列の比較用ポインタは、直前に検索し範囲を確定した共通部分の次のワードを指している。つまり、比較用ポインタは、直前に検索した共通部分の外の位置を指している。このステップでは、必要に応じて比較用ポインタを各データ列の次の一致箇所検索対象ワードの位置に進めた上で、一致箇所検索部４が、そこから、データ列ＡおよびＢの一致箇所検索対象ワードを検索し、一致する箇所を探す。本実施形態では、一致箇所検索部４は、データ列Ｂの比較用ポインタを固定して、データ列ＡおよびＢの比較用ポインタが指す一致箇所検索対象ワードを比較しながら、一致するワードの組が見つかるまで、データ列Ａの比較用ポインタが指す位置をｎＡワードずつ順次進めていく。データ列Ａの比較用ポインタが末尾まで行くと、データ列Ａの比較用ポインタを一旦は元に戻し（戻す先は、直前に検索された共通部分がある場合はその共通部分より後ろであって且つその中で最初の一致箇所検索対象ワードの位置、あるいは、直前に検索された共通部分がない場合はデータ列Ａの最初の一致箇所検索対象ワードの位置）、そしてデータ列Ｂ用の比較用ポインタを指す位置をｎＢワード分進め（つまり、データ列Ｂの次の一致箇所検索対象ワードを指すようにする）、そのデータ列Ｂの一致箇所検索ワードについて、上と同様に、データ列Ａの比較用ポインタを順次進めながら、比較を繰り返していく。このステップの処理が終了するのは、残っていた一致箇所検索対象ワードの比較を全ての組について終えた場合か、或いは、順次比較する途中で一致するワードが検出された場合である。
【００５１】
次にステップＳ６５において、制御部６は、データ列Ｂのポインタが末尾を指しているか否かを判定する。
データ列Ｂのポインタが末尾を指している場合とは、ステップＳ６４での一致箇所検索処理において、ワードが一致する箇所が発見されなかった場合である。この場合（ステップＳ６５：ＹＥＳ）には、ステップＳ６２からＳ６５までのループを抜け出して、ステップＳ６６に進む。
一方で、データ列Ｂのポインタが末尾を指していない場合とは、ステップＳ６４での一致箇所検索処理において、ワードが一致する箇所が発見された場合であり、この場合にはデータ列ＡおよびＢそれぞれの比較用ポインタは、値の一致した一致箇所検索対象ワードをそれぞれ指している。この場合（ステップＳ６５：ＮＯ）には、ステップＳ６２の処理へ進む。
【００５２】
なお、ステップＳ６５での判断結果が「ＮＯ」であり、ステップＳ６２に進んだ場合には、現在の比較用ポインタが差す位置をもとに、ステップＳ６２の処理として、前述の通りの共通部分の範囲の検索を行なう。
【００５３】
ステップＳ６６に制御が移るのは、前述の通り、ステップＳ６３あるいはＳ６５のいずれかで「ＹＥＳ」と判定された場合、即ち、データ列ＡおよびＢに含まれる一致箇所検索対象ワード同士の比較がすべて完了した場合である。そしてステップＳ６６において、差分情報出力部５は、差分情報出力処理を行なう。このとき出力される差分情報とは、例えば、データ列Ａに含まれていてデータ列Ｂに含まれていないデータ（ワードの並び）の情報およびデータ列Ｂに含まれていてデータ列Ａに含まれていないデータの情報として表現される。このような差分情報は、ステップＳ６２において共通部分検索部３が求めた共通部分の範囲の情報（各々の共通部分の先頭位置と末尾位置の情報）をメモリから読み出し、これに基づいて作成することができる。また、共通部分の範囲の情報そのものも、情報としては差分情報と等価である。共通部分の範囲の情報そのものや、共通部分の範囲の情報とデータ列Ａとデータ列Ｂから作成できる情報は、表現としては様々なパターンがあり得るが、いずれも本質的にはここで言う差分情報である。
【００５４】
図５は、簡単なデータ列の例を用いて、上述した一連の処理の概略を示している概略図である。図示する例は説明のためのものであるので、ＮＡ＝ＮＢ＝１６と、それぞれのデータ列の長さを短くしている。また、データ列ＡについてはｎＡ＝２としているため、一致箇所検索対象ワード（５１Ａまたは５２Ａ）は２ワードおきに存在している。また、データ列ＢについてはｎＢ＝３としているため、一致箇所検索対象ワード（５１Ｂまたは５２Ｂ）は３ワードおきに存在している。また、この例では、データ列Ａの６ワード目〜１１ワード目までとデータ列Ｂの８ワード目〜１３ワード目までを共通部分とが共通部分であり、この共通部分のサイズは６ワードである。従って、図示する一致箇所検索対象ワードのうち、データ列Ａの１０ワード目の一致箇所検索対象ワード５２Ａとデータ列Ｂの１２ワード目の一致箇所検索対象ワード５２Ｂは、互いに値が一致する。
【００５５】
以下、図４のフローチャートと図５の概略図を参照しながら説明する。
まずステップＳ６１の初期化処理において、データ列ＡおよびＢの比較用ポインタを、各々のデータ列の０ワード目に設定する。また、ｎＡ＝２、ｎＢ＝３と、パラメータを設定する。
次にステップＳ６２の共通部分の範囲を検索する処理において、それぞれの比較用ポインタが指す一致箇所検索対象ワードの値同士を比較する。この場合、現在の比較用ポインタが指しているデータ列Ａの０ワード目とデータ列Ｂの０ワード目の値は同一でないため、比較しても一致せず、このステップの処理はここで終了する。
そしてステップＳ６３の判定において、比較用ポインタはデータ列ＡとＢのいずれも、データ列の末尾にはないので（ステップＳ６３：ＮＯ）、ステップＳ６４に移る。
【００５６】
次の、ステップＳ６４においては、データ列Ｂの比較用ポインタの現在位置（０ワード目を指す）から、３ワード（ｎＢワード）ごとに、一致箇所検索対象ワードを選び、それらそれぞれの一致箇所検索対象ワードを順次、データ列Ａ内の一致箇所検索対象ワード（０ワード目から、２ワード（ｎＡワード）ごと）と比較する。データ列Ｂの０ワード目、３ワード目、６ワード目、９ワード目について順次比較するところまでは、データ列Ａの一致箇所検索対象ワードとの一致はない。さらに比較を続けると、データ列Ｂの１２ワード目（一致箇所検索対象ワード５２Ｂ）の値がデータ列Ａの１０ワード目（一致箇所検索対象ワード５２Ａ）の値と一致する。一致箇所が検出されたため、これでステップＳ６４の処理を終える。
【００５７】
ステップＳ６５において、この時点で、データ列Ａの比較用ポインタは１０ワード目の位置を指し、データ列Ｂの比較用ポインタは１２ワード目の位置を指している。つまり、データ列Ｂの比較用ポインタはデータ列の末尾ではないため（ステップＳ６５：ＮＯ）、ステップＳ６２に戻る。
【００５８】
次のステップＳ６２の処理において、データ列Ａの１０ワード目とデータ列Ｂの１２ワード目とを基点として、前方向および後方向にそれぞれ１ワードずつポインタをずらしながら、両者が一致するワードを検索する。その結果、当該共通部分の先頭位置はデータ列Ａの６ワード目、即ちデータ列Ｂの８ワード目であり、当該共通部分の末尾位置はデータ列Ａの１１ワード目、即ちデータ列Ｂの１３ワード目であることがわかる。
次のステップＳ６３の判定では、この時点では、データ列Ａの比較用ポインタは１２ワード目の位置を指し、データ列Ｂの比較用ポインタは１４ワード目の位置を指しているため、即ちデータ列Ｂの比較用ポインタはデータ列の末尾ではないため（ステップＳ６３：ＮＯ）、次のステップＳ６４に進む。
【００５９】
再び、ステップＳ６４では、ワードが一致する箇所の検索を行なう。このとき、データ列Ｂの比較用ポインタは１４ワード目の位置を指しているが、この比較用ポインタの現在の位置（１４ワード目）から３ワードごとに一致箇所検索対象ワードを選んでいく。なお、比較用ポインタの位置を、直前の共通部分（データ列Ｂの８ワード目から１３ワード目まで）より後の、当初予定していた一致箇所検索対象ワードのうちの最初のワード（１５ワード目）の位置に移してから、３ワードごとに一致箇所検索対象ワードを選んでいくようにしても良い。いずれにしても図示する例では、データ列ＡとＢとの間での一致箇所検索対象ワードの一致は検出されない。そして、データ列Ｂの比較用ポインタがデータの末尾に達すると、このステップの処理を終える。
【００６０】
次のステップＳ６５の判定においては、データ列Ｂのポインタは末尾に達しているため（ステップＳ６５：ＹＥＳ）、ループを抜けて、ステップＳ６６に進む。
そして、ステップＳ６６において、差分情報を出力し、このフローチャート全体の処理を終了する。
【００６１】
［第２の実施の形態］
図６は、本発明の第２の実施形態によるデータ比較装置２の機能構成を示すブロック図である。図示するように、データ比較装置２は、共通部分検索部３と、一致箇所検索部２４と、順序付処理部３１と、順序情報記憶部３２と、差分情報出力部５と、制御部６と、データファイル１０Ａと１０Ｂと２０Ａと２０Ｂと、ハッシュデータ生成部１５とを含んで構成される。
この第２の実施形態は、より一層処理を高速化することを目的としている。以下では、第１の実施形態と同様の部分については説明を省略し、本実施形態特有の構成や処理手順等を中心に説明する。
【００６２】
本実施形態において、処理をさらに高速化する手段は、次の通りである。即ち、本実施形態では、２つのデータ列のうちの片方のデータ列（ここでは説明の都合上、データ列Ａとする）の一致箇所検索対象ワードをその値の順（昇順または降順）でソート（順序付け）し、ソート結果として得られる順序情報を利用しながら一致箇所の検索を行なうようにする。
【００６３】
より具体的に言うと、順序付処理部３１は、データ列Ａに含まれる一致箇所検索対象ワードの値によるソートを行ない、その結果得られるデータ列Ａに関する一致箇所検索対象ワードの順序情報を順序情報記憶部３２に書き込む機能を有する。
【００６４】
また、順序情報記憶部３２は、データ列Ａに含まれる一致箇所検索対象ワードの値に関する順序情報を保持する。これは具体的には、例えば、Ｂ−Ｔｒｅｅ（バランス木）構造によりデータ列Ａに対するインデックス情報を保持する。これにより、データ列Ａ自体の順序を変更せずにその順序情報を保持できるため、データ列Ａの一致箇所検索対象ワードと一致するワードがあるかどうかを高速に判定できるようになる。
【００６５】
一致箇所検索部２４は、順序情報記憶部３２から前記の順序情報を読み出すことによりデータ列Ａに含まれる一致箇所検索対象ワードの値の順序を得られるため、これを用いて、データ列Ｂに含まれるある一致箇所検索対象ワードを、データ列Ａに含まれる一致箇所検索対象ワードのうちの比較する必要のあるワードのみと比較し、両者が一致する箇所を探す機能を有する。つまり、本実施形態の一致箇所検索部２４は、データ列ＡとＢの一致箇所検索対象ワードを総当り的に比較する必要がなく、データ列Ｂに含まれるある一致箇所検索対象ワードについて、例えば二分木的にデータ列Ａに含まれる一致箇所検索対象ワードとの比較を行なっていけば良い。
【００６６】
データ列Ａを１度だけソートするために、最大で（ＮＡ／ｎＡ）ｌｏｇ２（ＮＡ／ｎＡ）回のワードの比較を行うことが必要である。また、一旦ソートされた後は、データ列Ｂの１つあたりの一致箇所検索対象ワードにつき、およそｌｏｇ２（ＮＡ／ｎＡ）回の比較により、データ列Ａの一致箇所検索対象ワードとの一致を検出できるか、あるいはデータ列Ａのいずれの一致箇所検索対象ワードとも一致しないことを確認できる。つまり、データ列Ｂには（ＮＢ／ｎＢ）個の一致箇所検索対象ワードがあるため、比較回数の合計は（ＮＢ／ｎＢ）ｌｏｇ２（ＮＡ／ｎＡ）である。従ってこれら両者を合わせると、本実施形態の場合には、データ列Ａとデータ列Ｂとが全く異なるデータ列である場合にも、最大で（（ＮＡ／ｎＡ）＋（ＮＢ／ｎＢ））×ｌｏｇ２（ＮＡ／ｎＡ）回の比較処理を行えば良い。第１の実施形態の場合と異なり、本実施形態の場合、見つけるべき共通部分の長さの最小値が一定値であっても、最大比較回数はｎＡとｎＢの値に依存する。相加・相乗平均の定理により、計算上は、ＮＡ／ｎＡとＮＢ／ｎＢの値が同じぐらいの値になるｎＡとｎＢを選択すれば、最大比較回数を最小とすることができる。
【００６７】
図７は、本実施形態のデータ比較装置２によるデータ比較処理の手順を示すフローチャートである。以下、このフローチャートに沿って説明する。
【００６８】
まずステップＳ８１の初期化処理は、第１の実施形態で説明したステップＳ６１の処理と同様である。但し、比較回数の上限Ｃを基準にｎＡとｎＢの値を設定する場合の値の決め方は、次の通りである。つまり、（（ＮＡ／ｎＡ）＋（ＮＢ／ｎＢ））×ｌｏｇ２（ＮＡ／ｎＡ）≦Ｃを満たし、且つ、上述した通りＮＡ／ｎＡとＮＢ／ｎＢの値が同じぐらいの値になるようにｎＡとｎＢの値を選択する。
具体的な一例として、ｎＡは、２×（ＮＡ／ｎＡ）×ｌｏｇ２（ＮＡ／ｎＡ）≦Ｃを満たす最小の正整数値とする。また、ｎＢは、ｎＡと互いに素であり、且つ、ｎＢ≧ＮＢ／ＮＡ×ｎＡを満たす正整数とする。なお、このような条件を満たすｎＢのうち最小の整数数を選択することにより、所定の比較回数の制約の中で、共通部分を検出できる可能性を高めることができる。
【００６９】
ステップＳ８２における共通部分の範囲を検索する処理は、第１の実施形態のステップＳ６２の処理と同様である。
ステップＳ８３における判定処理は、第１の実施形態のステップＳ６３の処理と同様である。
【００７０】
次に、ステップＳ８４において、一致箇所検索部２４は、データ列Ａがソート済であるか否か（つまり、順序情報記憶部３２に既にデータ列Ａの順序情報が書き込まれているか否か）を判定する。ソート済である場合は（ステップＳ８４：ＹＥＳ）、ソート処理をさらに行なう必要はないので、ステップＳ８５をスキップしてステップＳ８６へ直接進む。ソート済でない場合は（ステップＳ８４：ＮＯ）、ソート処理を行なうためにステップＳ８５へ進む。
【００７１】
ステップＳ８５では、順序付処理部３１が、上で決定されたパラメータｎＡに基づき、データ列Ａの一致箇所検索対象ワードを、その値の昇順に（降順でも良い）ソートする（順序付けする）処理を行なう。ソート処理自体は既存技術による手順で行なう。そして、順序付け処理部３１は、その結果得られた順序情報（例えば、Ｂ−Ｔｒｅｅ構造で表現された、データ列Ａの一致箇所検索対象ワードへのインデックス情報（このインデックス値としては、例えば、データ列Ａにおけるワード位置を用いる））を順序情報記憶部３２に書き込む。
なお、このソート処理は、この部分で実行する代わりに、例えばステップＳ８１の初期化処理で行なっておくようにしても良い。
いずれの部分でソート処理を行なうにしても、ステップＳ８２からＳ８７までのループ部分の処理を２回目以降には、再度ソート処理を行なう必要はなく、順序情報記憶部３２から順序情報を読み出して利用すれば良い。
【００７２】
ステップＳ８６では、一致箇所検索部２４が、データ列ＡおよびＢの一致箇所検索対象ワードの比較を行い、一致箇所を探す。このとき、本実施形態では、一致箇所検索部２４は、順序情報記憶部３２から順序情報を読み出して利用しながら、データ列Ｂのひとつの一致箇所検索対象ワードに対して、ｌｏｇ２（ＮＡ／ｎＡ）回程度の比較処理を行なう。つまり、Ｂ−Ｔｒｅｅ構造の根ノードから順次、値の大小比較をしながら枝を選択していき、データ列Ａの一致箇所検索対象ワードの中で値の一致するものを探す。
つまり、一致箇所検索部２４は、その時点でのデータ列Ｂの比較用ポインタ以降のデータ列からｎＢワードごとに比較対象ワードを選択し、すべての比較対象ワードについて、ソートされたデータ列Ａの比較対象ワードとの比較を行い、一致するワードがあるかどうかを判定する。
一致するワードが見つかるまで検索処理を行なう点などは、第１の実施形態のステップＳ６４と同様である。
【００７３】
ステップＳ８７における判定処理は、第１の実施形態のステップＳ６５の処理と同様である。
そして、ステップＳ８８における差分情報の出力処理は、第１の実施形態のステップＳ６６の処理と同様である。
【００７４】
［第３の実施の形態］
図８は、本発明の第３の実施形態によるデータ比較装置１Ａの機能構成を示すブロック図である。第１の実施形態では、データ比較装置１は、データファイル１０Ａおよび１０Ｂと、ハッシュデータ生成部１５を含んでいた。本実施形態によるデータ比較装置１Ａはこれらを有さず、図８に示すように、共通部分検索部３と、一致箇所検索部４と、差分情報出力部５と、制御部６と、データファイル２０Ａと２０Ｂとで構成される。データファイル２０Ａおよび２０Ｂが所定の長さのワードからなるデータ列である点は第１の実施形態と同様である。データファイル２０Ａおよび２０Ｂは、外部から与えられるデータ列を有するファイルである。共通部分検索部３と、一致箇所検索部４と、差分情報出力部５と、制御部６の動作等は、第１の実施形態と同様である。
【００７５】
［第４の実施の形態］
図９は、本発明の第４の実施形態によるデータ比較装置２Ａの機能構成を示すブロック図である。第２の実施形態では、データ比較装置２は、データファイル１０Ａおよび１０Ｂと、ハッシュデータ生成部１５を含んでいた。本実施形態によるデータ比較装置２Ａはこれらを有さず、図９に示すように、共通部分検索部３と、一致箇所検索部２４と、順序付処理部３１と、順序情報記憶部３２と、差分情報出力部５と、制御部６と、データファイル２０Ａと２０Ｂとで構成される。データファイル２０Ａおよび２０Ｂが所定の長さのワードからなるデータ列である点は第２の実施形態と同様である。データファイル２０Ａおよび２０Ｂは、外部から与えられるデータ列を有するファイルである。共通部分検索部３と、一致箇所検索部２４と、順序付処理部３１と、順序情報記憶部３２と、差分情報出力部５と、制御部６の動作等は、第２の実施形態と同様である。
【００７６】
＜＜応用例＞＞
ここでは、上記各実施形態の応用例について、代表として第１実施形態の構成を示す図１を参照しながら、説明する。
【００７７】
本応用例において、データファイル１０Ａおよび１０Ｂは、それぞれ数ギガバイトから数十ギガバイト程度のサイズを有する動画コンテンツファイルである。データファイル１０Ａおよび１０Ｂは、ファイルシステムによってブロック単位で管理されており、１ブロックのサイズは、例えば、４ｋバイト（４０９６バイト）である。つまり、データファイル１０Ａおよび１０Ｂは、それぞれ、数百万個から数千万個程度のブロックから成る。
【００７８】
データファイル１０Ａや１０Ｂは、ブロック単位で編集される。つまり、データファイル１０Ａや１０Ｂに対する編集操作としては、ブロックの挿入と、ブロックの削除と、ブロック内に閉じた値の変更である。本発明の発明者らが別途開発したファイルシステムは、ブロックサイズの整数倍のサイズを有するデータを挿入したり削除したりするためのアプリケーションプログラムインタフェース（ＡＰＩ）を提供する。なお、そのようなファイルシステムを用いる場合に、例えばアプリケーションプログラム側で工夫をすることによって、ブロック境界ではない途中の位置に挿入したり削除したりする際にも、挿入／削除に伴うデータのズレがブロック境界をまたがって波及することのないようすることができる。なお、そのファイルシステム自体の詳細な説明は、ここでは省略する。
【００７９】
データファイル２０Ａは、データファイル１０Ａのハッシュ値を保持するファイルである。ハッシュデータ生成部１５は、データファイル１０Ａが有する各ブロックのデータ（長さ４ｋバイト）の値を基に、所定のハッシュ関数を適用することにより、所定の長さ（例えば１６バイト（＝１２８ビット））のハッシュ値を得る。そのハッシュ値が、データファイル２０Ａの各ワードに相当する。
データファイル２０Ｂと１０Ｂの関係も、上述したデータファイル２０Ａと１０Ａの関係と同様である。
つまり、データファイル２０Ａおよび２０Ｂのサイズは、これに限定されないが典型的には数百万ワードから数千万ワードである。つまり、１ワード＝１６バイトのとき、データファイル２０Ａおよび２０Ｂのサイズは、それぞれ数十メガバイトから数百メガバイト程度である。このような大きなサイズのファイル同士を、従来の技術により比較して共通部分を見つけることは、非常に時間がかかり、効率が悪い。
【００８０】
ところで、ハッシュ関数の性質により、元データが全く一致していない限り、そのハッシュ値が偶々一致する確率は非常に小さい。例えば、ハッシュ値の長さが１２８ビットであり、ハッシュ関数が十分良好である場合、元データの異なる２つのハッシュ値が偶然一致する確率は２−１２８である。つまり、データファイル２０Ａおよび２０Ｂがそれぞれ数百万ワードから数千万ワードのサイズを有するとはいえ、元データ（データファイル１０Ａおよび１０Ｂに含まれるブロックのデータ）が異なっている限り、そのハッシュ値が偶然に一致する可能性は無視できるほどに、その確率は充分小さい。逆に言えば、ハッシュ値が一致するとき、元データも一致する可能性は充分大きい。
【００８１】
本応用例の目的は、データファイル２０Ａと２０Ｂとの間の差分情報を短時間で得ることであるが、その更なる目的は、データファイル１０Ａと１０Ｂとの間で、どのあたりのブロックに差があるのかを短時間の比較処理で把握することである。上述したファイルシステムによって管理されている動画コンテンツファイルを編集し、その結果として複数の版の動画コンテンツファイルを保存した際に、それら複数の版の間の違いを把握するのは大変で時間のかかる作業であるが、本応用例を用いることにより、共通部分検出の精度をやや犠牲にする代わりに、短時間で（あるいは望みの範囲の時間内に）、版間の差分を把握することができるという大きなメリットが得られる。
なお、データファイル１０Ａおよび１０Ｂを元に、データファイル２０Ａおよび２０Ｂをそれぞれ生成する処理は、ファイル保存時に予め行なっておく。
【００８２】
なお、上述した実施形態におけるデータ比較装置の機能の全部または一部をコンピュータで実現するようにしても良い。その場合、上記実施形態で説明した各機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現しても良い。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、フラッシュメモリ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時刻の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時刻プログラムを保持しているものも含んでも良い。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
【００８３】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【００８４】
例えば、第２実施形態の順序情報記憶部３２は、Ｂ−Ｔｒｅｅ構造のデータを用いて順序情報を記憶するようにしたが、用いるデータ構造はＢ−Ｔｒｅｅに限らず、一般の木構造を用いても良い。また、各ワードのデータの値とデータ列Ａへのインデックス（データ列Ａの何ワード目のワードかを示す値）の組を要素とし、各ワードの値によってソートされた配列をデータ構造として用いても良い。いずれの場合にも、順序情報を利用することにより、総当り的な比較に比べて比較回数を削減することができる。
【産業上の利用可能性】
【００８５】
本発明は、サイズの大きいデータファイルの管理に利用することができる。例えば、動画像コンテンツのファイルの版管理などに利用することができる。
【図面の簡単な説明】
【００８６】
【図１】本発明の第１の実施形態によるデータ比較装置の機能構成を示したブロック図である。
【図２】同実施形態おいて、データファイル１０Ａ（元データ）とデータファイル２０Ａ（ハッシュ値のデータ）との関係を示す概略図である。
【図３】同実施形態によるデータ比較装置における、一致箇所検索および共通部分検索の処理の概要を示す概略図である。
【図４】同実施形態による共通部分範囲の決定および差分情報出力のための処理の手順を示すフローチャートである。
【図５】同実施形態によるデータ比較の実例を説明するための概略図である。
【図６】本発明の第２の実施形態によるデータ比較装置の機能構成を示したブロック図である。
【図７】同実施形態によるデータ比較の処理手順を示したフローチャートである。
【図８】本発明の第３の実施形態によるデータ比較装置の機能構成を示したブロック図である。
【図９】本発明の第４の実施形態によるデータ比較装置の機能構成を示したブロック図である。
【符号の説明】
【００８７】
１，１Ａ，２，２Ａ  データ比較装置
３  共通部分検索部（共通部分検索過程）
４  一致箇所検索部（一致箇所検索過程）
５  差分情報出力部（差分情報出力過程）
６  制御部
１０Ａ，１０Ｂ  データファイル（比較対象データ）
１５  ハッシュデータ生成部
２０Ａ，２０Ｂ  データファイル
２４  一致箇所検索部
３１  順序付処理部（順序付処理過程）
３２  順序情報記憶部
【図１】
0005149063.tif 000002
【図２】
0005149063.tif 000003
【図３】
0005149063.tif 000004
【図４】
0005149063.tif 000005
【図５】
0005149063.tif 000006
【図６】
0005149063.tif 000007
【図７】
0005149063.tif 000008
【図８】
0005149063.tif 000009
【図９】
0005149063.tif 000010