(57)【要約】【課題】データのマージソート処理における処理時間を短縮できるマージソート処理方法、マージソート処理装置、及びマージソート処理プログラムを提供する。【解決手段】複数のデータよりなるデータ列に含まれるデータの値を大小比較して昇順又は降順に並び替えるマージソート処理方法において、前記マージソート処理の対象となるデータ列に含まれるデータを、当該データ列の先頭から３ずつ取り出して部分的にマージソート処理を行う第１マージソート処理工程と、前記第１マージソート処理工程により前記部分的にマージソート処理されたデータを、更に前記データ列に含まれるデータ全体のマージソート処理を行う第２マージソート処理工程と、を備える。【選択図】図２
2009199439.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータよりなるデータ列に含まれるデータの値を大小比較して昇順又は降順に並び替えるマージソート処理方法において、
前記マージソート処理の対象となるデータ列に含まれるデータを、当該データ列の先頭から３ずつ取り出して部分的にマージソート処理を行う第１マージソート処理工程と、
前記第１マージソート処理工程により前記部分的にマージソート処理されたデータを、更に前記データ列に含まれるデータ全体のマージソート処理を行う第２マージソート処理工程と、
を備えることを特徴とするマージソート処理方法。
【請求項２】
請求項１に記載のマージソート処理方法において、
前記第１マージソート処理工程は、前記データ列の先頭から一番目のデータの値と二番目のデータの値とを大小比較し、更に当該大小比較結果による大きい方のデータの値と三番目のデータの値とを大小比較し、
当該三番目のデータの値が、前記大小比較結果による大きい方のデータの値よりも小さい場合には、更に前記一番目のデータの値と前記二番目のデータの値とを大小比較し、当該大小比較結果による小さい方のデータの値と大小比較して並び替えることを特徴とするマージソート処理方法。
【請求項３】
複数のデータよりなるデータ列に含まれるデータの値を大小比較して昇順又は降順に並び替えるマージソート処理装置において、
前記マージソート処理の対象となるデータ列に含まれるデータを、当該データ列の先頭から３ずつ取り出して部分的にマージソート処理を行う第１マージソート処理手段と、
前記第１マージソート処理手段により前記部分的にマージソート処理されたデータを、更に前記データ列に含まれるデータ全体のマージソート処理を行う第２マージソート処理手段と、
を備えることを特徴とするマージソート処理装置。
【請求項４】
請求項３に記載のマージソート処理装置において、
前記第１マージソート処理手段は、前記データ列の先頭から一番目のデータの値と二番目のデータの値とを大小比較し、更に当該大小比較結果による大きい方のデータの値と三番目のデータの値とを大小比較し、
当該三番目のデータの値が、前記大小比較結果による大きい方のデータの値よりも小さい場合には、更に前記一番目のデータの値と前記二番目のデータの値とを大小比較し、当該大小比較結果による小さい方のデータの値と大小比較して並び替えることを特徴とするマージソート処理装置。
【請求項５】
複数のデータよりなるデータ列に含まれるデータの値を大小比較して昇順又は降順に並び替えるマージソート処理装置に含まれるコンピュータを、
前記マージソート処理の対象となるデータ列に含まれるデータを、当該データ列の先頭から３ずつ取り出して部分的にマージソート処理を行う第１マージソート処理手段、及び
前記第１マージソート処理手段により前記部分的にマージソート処理されたデータを、更に前記データ列に含まれるデータ全体のマージソート処理を行う第２マージソート処理手段、
として機能させることを特徴とするマージソート処理プログラム。
【請求項６】
請求項５に記載のマージソート処理プログラムにおいて、
前記第１マージソート処理手段は、前記データ列の先頭から一番目のデータの値と二番目のデータの値とを大小比較し、更に当該大小比較結果による大きい方のデータの値と三番目のデータの値とを大小比較し、
当該三番目のデータの値が、前記大小比較結果による大きい方のデータの値よりも小さい場合には、更に前記一番目のデータの値と前記二番目のデータの値とを大小比較し、当該大小比較結果による小さい方のデータの値と大小比較して並び替えることを特徴とするマージソート処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データのマージソート処理におけるマージソート処理方法、マージソート処理装置、及びマージソート処理プログラムに関する。
【背景技術】
【０００２】
従来のマージソート処理では、例えば２n個のデータをソートする場合に、最低でも２n-1×ｎ回データの比較を行っており、また、マージ対象の配列を約半分の２つの配列に分割する作業を、各配列が要素数１になるまで再帰的に呼び出してからマージ及びソートを行っていた。
【０００３】
例えば下記特許文献１では、ソート対象のデータ列のデータ値を、グループ定義に従ってグループ化により分割し、グループ単位のデータ列を作成し、グループは対象データ値全範囲を適度な個数（サイズ）で任意に区切ったものであり、構成値により順序付けられ、グループ単位のデータ列に対して、個別にソート処理を行った後、全ての列をグループ順に結合することが開示されている。
【特許文献１】特開２００７−１３３５７６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記従来の技術では、最悪の場合のデータの比較回数が少ない点で優れているが、最善の場合でもデータの比較回数がある程度多くなることや、配列を約半分の２つの配列に分割する作業を再帰的に各配列の要素が１になるまで行う必要があり、データのソート処理における処理時間が掛かるという問題点があった。
【０００５】
そこで、本発明では、上記各問題点に鑑みて為されたもので、その目的の一例は、データのマージソート処理における処理時間を短縮できるマージソート処理方法、マージソート処理装置、及びマージソート処理プログラムを提供することである。
【課題を解決するための手段】
【０００６】
上記の課題を解決するために、請求項１に記載の発明は、複数のデータよりなるデータ列に含まれるデータの値を大小比較して昇順又は降順に並び替えるマージソート処理方法において、前記マージソート処理の対象となるデータ列に含まれるデータを、当該データ列の先頭から３ずつ取り出して部分的にマージソート処理を行う第１マージソート処理工程と、前記第１マージソート処理工程により前記部分的にマージソート処理されたデータを、更に前記データ列に含まれるデータ全体のマージソート処理を行う第２マージソート処理工程と、を備えることを特徴とする。
【０００７】
上記の課題を解決するために、請求項２に記載の発明は、請求項１に記載のマージソート処理方法において、前記第１マージソート処理工程は、前記データ列の先頭から一番目のデータの値と二番目のデータの値とを大小比較し、更に当該大小比較結果による大きい方のデータの値と三番目のデータの値とを大小比較し、当該三番目のデータの値が、前記大小比較結果による大きい方のデータの値よりも小さい場合には、更に前記一番目のデータの値と前記二番目のデータの値とを大小比較し、当該大小比較結果による小さい方のデータの値と大小比較して並び替えることを特徴とする。
【０００８】
上記の課題を解決するために、請求項３に記載の発明は、複数のデータよりなるデータ列に含まれるデータの値を大小比較して昇順又は降順に並び替えるマージソート処理装置において、前記マージソート処理の対象となるデータ列に含まれるデータを、当該データ列の先頭から３ずつ取り出して部分的にマージソート処理を行う第１マージソート処理手段と、前記第１マージソート処理手段により前記部分的にマージソート処理されたデータを、更に前記データ列に含まれるデータ全体のマージソート処理を行う第２マージソート処理手段と、を備えることを特徴とする。
【０００９】
上記の課題を解決するために、請求項４に記載の発明は、請求項３に記載のマージソート処理装置において、前記第１マージソート処理手段は、前記データ列の先頭から一番目のデータの値と二番目のデータの値とを大小比較し、更に当該大小比較結果による大きい方のデータの値と三番目のデータの値とを大小比較し、当該三番目のデータの値が、前記大小比較結果による大きい方のデータの値よりも小さい場合には、更に前記一番目のデータの値と前記二番目のデータの値とを大小比較し、当該大小比較結果による小さい方のデータの値と大小比較して並び替えることを特徴とする。
【００１０】
上記の課題を解決するために、請求項５に記載の発明は、複数のデータよりなるデータ列に含まれるデータの値を大小比較して昇順又は降順に並び替えるマージソート処理装置に含まれるコンピュータを、前記マージソート処理の対象となるデータ列に含まれるデータを、当該データ列の先頭から３ずつ取り出して部分的にマージソート処理を行う第１マージソート処理手段、及び前記第１マージソート処理手段により前記部分的にマージソート処理されたデータを、更に前記データ列に含まれるデータ全体のマージソート処理を行う第２マージソート処理手段、として機能させることを特徴とする。
【００１１】
上記の課題を解決するために、請求項６に記載の発明は、請求項５に記載のマージソート処理プログラムにおいて、前記第１マージソート処理手段は、前記データ列の先頭から一番目のデータの値と二番目のデータの値とを大小比較し、更に当該大小比較結果による大きい方のデータの値と三番目のデータの値とを大小比較し、当該三番目のデータの値が、前記大小比較結果による大きい方のデータの値よりも小さい場合には、更に前記一番目のデータの値と前記二番目のデータの値とを大小比較し、当該大小比較結果による小さい方のデータの値と大小比較して並び替えることを特徴とする。
【発明の効果】
【００１２】
以上説明したように、本発明によれば、第一のマージ処理を２つのデータではなく、３つのデータをマージするため、最善の場合にはマージソート処理によりデータ同士の比較回数が少ないことにある。
【００１３】
また本発明によれば、マージソート処理においてデータ列の先頭から３つずつデータを処理していくため、配列を約半分の２つの配列に分割する作業を再帰的に各配列の要素が１になるまで行うことが不要である。
【発明を実施するための最良の形態】
【００１４】
次に、本発明に好適な実施の形態について、図面に基づいて説明する。
【００１５】
本発明の実施形態に係るマージソート処理装置は、ソート対象のデータを格納した配列１００と、第一のマージ処理装置１１０（第１マージソート処理手段の一例）と、第二のマージ処理装置１２０（第２マージソート処理手段の一例）と、ソートが完了したデータを格納する配列１３０とを備えている。
【００１６】
第一のマージ処理装置１１０は、配列１００の先頭からデータを３つずつ受信し、マージ及びソートを行い、第二のマージ処理装置１２０へ送信する。
【００１７】
第二のマージ処理装置１２０は、第一のマージ処理装置１１０から受信したデータを、一般のマージソートと同様にソート及びマージを繰り返し、その結果を配列１３０へ送信する。
【００１８】
次に、本発明の実施形態の動作について、図１及び図２を参照して説明する。なお、図１は本発明の実施形態に係るマージソート処理方法におけるデータ列のマージソート処理の一例を示すフローチャートの概略図であり、図２は本発明の実施形態に係るマージソート処理方法におけるデータ列のマージソート処理の一例を示すフローチャートである。また、本実施形態は昇順へのソートの場合の実施形態である。
【００１９】
まず、第一のマージ処理装置１１０は、配列１００に格納されているデータを先頭から３つずつ受信する（ステップＡ１）。
【００２０】
次に、第一のマージ処理装置１１０は、受信した一番目のデータと二番目のデータを比較し、二番目のデータが一番目のデータより小さい場合は、一番目のデータと二番目のデータを入れ替える（ステップＡ２）。
【００２１】
更に、二番目のデータと三番目のデータを比較し、三番目のデータが二番目のデータより小さい場合は、二番目のデータと三番目のデータを入れ替え、更に、一番目のデータと入れ替え後の二番目のデータを比較し、二番目のデータが一番目のデータより小さい場合は、一番目のデータと二番目のデータを入れ替える（ステップＡ３）。
【００２２】
最後に、並んだ長さ３の配列データを、第二のマージ処理装置１２０へ送信する。
【００２３】
また、第一のマージ処理装置１１０が配列１００から受信するデータが２つしかない場合には、ステップＡ２の処理の後、第二のマージ処理装置１２０へ送信する。
【００２４】
また、第一のマージ処理装置１１０が配列１００から受信するデータが１つしかない場合には、そのまま第二のマージ処理装置１２０へ送信する。
【００２５】
第二のマージ処理装置１２０は、第一のマージ処理装置１１０から全ての配列データを受信し、一般のマージソート処理と同様に、マージ及びソートを行い（ステップＡ４）、結果を配列１３０に格納する（ステップＡ５）。
【００２６】
次に、本実施形態の動作について、図３を用いて具体的に説明する。
【００２７】
例えば、長さ１２の配列｛３，５，６，８，１１，１，９，７，１２，４，１０，２｝に対して、図３のソート処理装置でソートする場合、｛３，５，６｝、｛８，１１，１｝、｛９，７，１２｝、｛４，１０，２｝と長さ３の配列４つに分け（ステップＢ１）、夫々ソートを行う。
【００２８】
長さ３の配列内でソートされたデータは、｛３，５，６｝、｛１，８，１１｝、｛７，９，１２｝、｛２，４，１０｝となり（ステップＢ２）、以降は、一般のマージソート処理と同様に、ソートを行い、｛１，２，３，４，５，６，７，８，９，１０，１１，１２｝のソート済みのデータを得ることができる（ステップＢ３）。
【００２９】
ここで、本実施形態に係るマージソート処理方法と、上記特許文献１に記載のマージソート処理方法とを比較する。
【００３０】
上記特許文献１に記載のマージソート処理方法では、ソート済みの配列を単純に結合（マージ）する方法、即ち、ソート済みの配列を結合するステップでは、データの比較は行っていない方法であるのに対して、本実施形態に係るマージソート処理方法は、データの比較を行いながら結合をしている。
【００３１】
具体的には、上記特許文献１では、例えば、１２個のデータを並び替える際にサイズ３で考える場合、｛１以上３以下｝、｛４以上６以下｝、｛７以上９以下｝、及び｛１０以上１２以下｝の４領域に分け、分けた領域の中で並び替えを行い、結合（マージ）では、単純に後ろにデータを並べるのみである。
【００３２】
したがって、この方式では、データ中の最小値及び最大値が分からなければソートできない、つまりデータの最小値及び最大値を取得するための作業が余計にかかり、更に、例えば１０２３個のデータをサイズ３の領域３４１グループに分けてソートする場合、上記の最小値及び最大値の取得作業を除いて考えても、少なくとも１７５６１２回のデータ比較が必要となり、非常に効率が悪い。
【００３３】
また、そもそも上記特許文献１は、処理性能をデータ値の個数Ｎ、グループ数Ｍとして、Ｎ×ｌｏｇ（Ｎ／Ｍ）で提示しているが、データ値と同じ個数のグループに分ける場合には、１００×ｌｏｇ（１００／１００）＝１００×ｌｏｇ（１）＝１００×０＝０となり、計算が成立しない。即ち、グループにデータ値を振り分ける処理性能を全く考えていない。
【００３４】
具体的に実際の数値｛３，１，４，５，２，６｝を用いて比較すると、上記特許文献１においてサイズ３の２グループに分ける場合、３は３以下なので（比較１）グループ１へ、１は３以下なので（比較２）グループ１へ、４は３以下ではないので（比較３）グループ２へ、５は３以下ではないので（比較４）グループ２へ、２は３以下なので（比較５）グループ１へ、６は３以下ではないので（比較６）グループ２へ、夫々分けられ、従って、グループ１｛３，１，２｝、及びグループ２｛４，５，６｝に分けられることになる。
【００３５】
次に、グループ１内でのソートは、３と１との比較では１が小さい（比較７）ので３と１を入れ替え、３と２との比較では２が小さい（比較８）ので３と２を入れ替え、１と２との比較では１が小さい（比較９）のでそのままであり、一方、グループ２内でのソートは、４と５との比較では４が小さい（比較１０）のでそのままであり、５と６との比較では５が小さい（比較１１）のでそのままであり、４と６とは比較しないので、グループ１｛１，２，３｝、及びグループ２｛４，５，６｝に並び替えられ、単純結合により、｛１，２，３，４，５，６｝のソートが合計１１回の比較で完了する。
【００３６】
一方、本発明の実施形態に係るマージソート処理方法の場合、先頭から３つずつ値を取り、｛３，１，４｝と｛５，２，６｝の２つのグループができ、｛３，１，４｝のソートにおいて、３と１との比較では１が小さい（比較１）ので３と１を入れ替え、３と４との比較では３が小さい（比較２）のでそのままであり、一方、｛５，２，６｝のソートにおいて、５と２との比較では２が小さい（比較３）ので５と２を入れ替え、５と６との比較では５が小さい（比較４）のでそのままであり、並び替えられた｛１，３，４｝、及び｛２，５，６｝のマージで１と２との比較では１が小さい（比較４）ので｛１｝が確定し、３と２との比較では２が小さい（比較５）ので｛１，２｝が確定し、３と５との比較では３が小さい（比較６）ので｛１，２，３｝が確定し、４と５との比較では４が小さい（比較７）ので｛１，２，３，４，５，６｝が確定し、合計７回の比較によりソートが完了する。
【００３７】
以上から、本実施形態に係るマージソート処理方法は、上記特許文献１に記載のマージソート処理方法と比較して、ソート回数を短縮することが可能である。
【００３８】
本実施形態によれば、ソート対象の配列を３つずつ分割し、分割された３つの値をソートし、ソートは、一番目と二番目の値で大小を比較し、更に大きい値と三番目の値で比較し、三番目の値が大きい場合には、ソートを完了し、三番目の値が小さい場合には、更に一番目と二番目で比較して小さい値と比較して並び替え、得られた３つのソート済みの値で、マージソート処理と同様にデータの値をマージするので、最善の場合にはマージソート処理によりデータ同士の比較回数が少なくなる。例えば、１０２４個のデータの並び替えを行う場合、マージソート処理においてはデータの比較回数が最低５０１２回必要であるのに対し、本実施形態では最低で４７７９回となる。特に、昇順に並び替える場合に、ある程度昇順に並んでいるデータであれば図２のステップ３で比較回数が１回で済ませられる可能性が高く、データの比較回数が少なくなる効果が顕著である。
【００３９】
また、本実施形態によれば、データ列の先頭から３ずつデータを処理していくので、マージソート処理では配列を約半分の２つの配列に分割する作業を再帰的に各配列の要素が１になるまで行う必要がなくなる。
【００４０】
なお、本発明は、上記実施形態に限定されるものではなく、その要旨を逸脱しない範囲において変更することが可能である。例えば、本発明は、データを昇順や降順に並べ替えるランキング作成の用途に適用することができる。また、本発明は、ソートを用いるシステム全般に適用することが可能である。
【図面の簡単な説明】
【００４１】
【図１】本発明の実施形態に係るマージソート処理方法におけるデータ列のマージソート処理の一例を示すフローチャートの概略である。
【図２】本発明の実施形態に係るマージソート処理方法におけるデータ列のマージソート処理の一例を示すフローチャートである。
【図３】本発明の実施形態に係るマージソート処理方法におけるデータ列のマージソート処理の一例を示す図である。
【符号の説明】
【００４２】
１００  配列
１１０  第一のマージ処理装置
１２０  第二のマージ処理装置
１３０  配列
【図１】
2009199439.tif 000003
【図２】
2009199439.tif 000004
【図３】
2009199439.tif 000005