JP2020123035A - ソート方法、ソートプログラム及びソート装置 - Google Patents

ソート方法、ソートプログラム及びソート装置 Download PDF

Info

Publication number
JP2020123035A
JP2020123035A JP2019013199A JP2019013199A JP2020123035A JP 2020123035 A JP2020123035 A JP 2020123035A JP 2019013199 A JP2019013199 A JP 2019013199A JP 2019013199 A JP2019013199 A JP 2019013199A JP 2020123035 A JP2020123035 A JP 2020123035A
Authority
JP
Japan
Prior art keywords
sorting
data
bucket
sort
elements
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
JP2019013199A
Other languages
English (en)
Other versions
JP7151515B2 (ja
Inventor
啓介 後藤
Keisuke Goto
啓介 後藤
孝 河東
Takashi Kato
孝 河東
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2019013199A priority Critical patent/JP7151515B2/ja
Publication of JP2020123035A publication Critical patent/JP2020123035A/ja
Application granted granted Critical
Publication of JP7151515B2 publication Critical patent/JP7151515B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】データに偏りがある場合に、ソートを高速化すること。【解決手段】サンプリング部が、入力データからランダムにデータをサンプリングしてサンプリングデータとする。そして、ブロックソート部が、各サンプリングデータからブロック幅tの範囲をブロックとして、ブロックに含まれるブロックデータをバケツソート部を用いてバケツソートする。そして、入力データからブロックデータを除いた残データを残データソート部がマージソート部を用いてマージソートする。【選択図】図13

Description

本発明は、ソート方法、ソートプログラム及びソート装置に関する。
整数をソートする技術としてバケツソート、マージソート等がある。図16は、ソートの例を示す図である。図16では、n=8としてn個の整数x1、x2、...、xnが昇順にソートされる。各整数の値は、1以上N以下である。ソート装置は、8個の整数90、93、84、87、86、1、8、92を入力し、昇順にソートして、1、8、84、86、87、90、92、93を出力する。
図17は、バケツソートを説明するための図である。図17に示すように、バケツソートでは、ソート装置は、長さNの配列Aを用意し、各配列要素A[i](i=1〜N)を0で初期化する。そして、ソート装置は、入力の各xiを読み、対応する配列要素でxiの数をカウントする。すなわち、ソート装置は、A[xi]+=1(A[xi]=A[xi]+1)とする。そして、ソート装置は、配列Aの先頭から順にA[i]>0となるiをA[i]回出力する。
図17では、90が読み込まれてA[90]=1となり、93が読み込まれてA[93]=1となり、84が読み込まれてA[84]=1となり、87が読み込まれてA[87]=1となる。同様に、86が読み込まれてA[86]=1となり、1が読み込まれてA[1]=1となり、8が読み込まれてA[8]=1となり、92が読み込まれてA[92]=1となる。
そして、ソート装置は、1をA[1]=1回出力し、8をA[8]=1回出力し、84をA[84]=1回出力し、86をA[86]=1回出力する。さらに、ソート装置は、87をA[87]=1回出力し、90をA[90]=1回出力し、92をA[92]=1回出力し、93をA[93]=1回出力する。このように、ソート装置は、配列Aの先頭から順にA[i]>0となるiをA[i]回出力することで、ソート結果として、1、8、84、86、87、90、92、93を出力する。
バケツソートの計算時間は、A[1]〜A[N]を読むため、O(N)である。ここで、「O」はオーダーを示す。値域Nが個数nに比べて大きくない場合、すなわち、データxiがAに占める密度が大きい場合には、バケツソートは高速である。逆に、値域Nが個数nに比べて大きい場合、すなわち、データxiがAに占める密度が小さい場合には、バケツソートは低速である。
図18は、マージソートを説明するための図である。図18に示すように、マージソートでは、ソート装置は、要素数i個の隣接する2つのソート済み要素を結合して、要素数2i個の新しいソート済み要素を作成する操作をi=1からlogn回繰り返す。
図18では、ソート装置は、i=1とし、(90)と(93)を結合して(90,93)を作成し、(84)と(87)を結合して(84,87)を作成し、(86)と(1)を結合して(1,86)を作成し、(8)と(92)を結合して(8,92)を作成する。そして、ソート装置は、i=2とし、(90,93)と(84,87)を結合して(84,87,90,93)を作成し、(1,86)と(8,92)を結合して(1,8,86,92)を作成する。そして、ソート装置は、i=4とし、(84,87,90,93)と(1,8,86,92)を結合して(1,8,84,86,87,90,92,93)を作成する。
マージソートの計算時間は、O(n)かかるマージをO(logn)回繰り返すので、計算時間はO(nlogn)である。したがって、マージソートの計算時間はNに依存しない。Nが小さい場合は、マージソートよりバケツソートの方が速い。
データxiがAに占める密度が大きい場合には、バケツソートが高速であるため、入力の偏りがある範囲のみバケツソートを行い、他の範囲をマージソートすることで、ソートを高速化することができる。図19は、バケツソートとマージソートを単純に組み合わせた単純組み合わせソートを説明するための図である。
単純組み合わせソートでは、ソート装置は、ブロック幅tと閾値を設定する。そして、ソート装置は、図19に示すように、値域をN/t個のブロックに分割し、各ブロックが含む入力値の頻度を計算して、頻度が閾値以上であればバケツソートを行い、頻度が閾値以上でなければマージソートを行う。
頻度大のブロック数をmとすると、単純組み合わせソートの計算時間は、O(n+N/t+mt+(n−m)log(n−m))である。ここで、(n+N/t)の部分は前処理としての頻度の計算に基づき、(mt)の部分はバケツソートに基づき、((n−m)log(n−m))の部分はマージソートに基づく。単純組み合わせソートでは、ブロック幅tがデータが密な分布幅より小さい場合には、前処理時間を含めてもソートは高速になる。一方、ブロック幅tがデータが密な分布幅より大きい場合には、前処理時間の分だけソートは低速になる。
なお、ソートに関する従来技術としては、ソート対象のデータ列を検索してソート処理不要な部分集合を抽出し、抽出した部分集合をソート済み並びとして併合する所定のマージ処理を行って、該データ列をソートすることで、ソートを高速化する技術がある。
また、共有メモリ上に、正の整数データが格納された第1の配列と該正の整数データの最大値と同一の数だけの要素を有する第2の配列とを備え、ベクトル演算プロセッサが第1及び第2の配列を用いて正の整数データのバケツソートを行う技術がある。この技術によれば、バケツソートを高速化することができる。
その他、映像や音楽等の各種データの内容に対応させて高精度な分類を行う従来技術がある。この従来技術では、データ分類装置は、入力データに関連する学習データを入力して復元抽出でランダムサンプルすることにより1又は複数のクラスに分類し、分類されたクラスに対して予め設定された数のデータ集合を生成する。そして、データ分類装置は、生成したデータ集合を決定木により学習し、学習結果を用いて、入力データの入力に対して、複数の異なる分類のうち何れか1つに分類分けする。
特開平8−221254号公報 特開平9−190336号公報 特開2010−44674号公報
図19に示した単純組み合わせソートは、頻度分布において頻度大の部分の分布幅がブロック幅に比較して小さいと、ブロック単位では頻度大でなくなり、バケツソートするブロックがなくなるので、全体をマージソートするのと同じになる。図20は、頻度分布において頻度大の部分の分布幅がブロック幅に比較して小さい場合を示す図である。図20に示すように、頻度分布において頻度大で分布が密である部分9の分布幅がブロック幅に比較して小さいと、ブロック全体では頻度小と判断される。
分布が密である部分9の分布幅がブロック幅に比較して小さくなるのを避けるためブロック幅を小さくすると、ブロック数(N/t)が多くなり、高速化することができない。ブロック幅を小さくすると、全体をバケツソートすることと同じになる。
分布が密である部分を事前に特定することができれば、分布が密である部分だけバケツソートを行い、他の部分をマージソートすることで高速化することが可能だが、分布が密である部分を事前に特定することはできない。
このように、図19に示した単純組み合わせソートには、データに偏りがあり、頻度が閾値以上のブロックが少なく、mが小さい場合には、計算時間≒O(nlogn)となり、マージソートとほぼ同じになるという問題がある。
本発明は、1つの側面では、偏りのあるデータを高速にソートすることを目的とする。
1つの態様では、ソート方法は、複数の整数データを含むデータ集合をソートする。前記ソート方法では、前記データ集合からランダムに選択した要素それぞれについて、要素から所定の数値範囲の要素についてバケツソートを実行する処理をコンピュータが実行する。そして、前記ソート方法では、バケツソートした要素以外の要素についてバケツソート以外のソートを実行する処理を前記コンピュータが実行する。
1つの側面では、本発明は、偏りのあるデータを高速にソートすることができる。
図1は、実施例に係るソート装置によるソート方法を説明するための図である。 図2は、実施例に係るソート装置の機能構成を示す図である。 図3は、ソート装置によるソート処理のフローを示すフローチャートである。 図4は、入力されるデータとソートに用いられる配列の初期状態を示す図である。 図5は、データを入力してデータ数をカウントする状態を示す図である。 図6は、データの入力が完了した状態を示す図である。 図7は、サンプリングデータのマージソートを示す図である。 図8は、ブロックデータのバケツソートを示す図である。 図9は、y1=8をTから削除した状態を示す図である。 図10は、配列Y2に含まれるデータをTから削除した状態を示す図である。 図11は、Zの作成を示す図である。 図12は、YとZのマージソートを示す図である。 図13は、ソート装置の効果を示す図である。 図14は、範囲の拡張を説明するための図である。 図15は、実施例に係るソートプログラムを実行するコンピュータのハードウェア構成を示す図である。 図16は、ソートの例を示す図である。 図17は、バケツソートを説明するための図である。 図18は、マージソートを説明するための図である。 図19は、バケツソートとマージソートを単純に組み合わせた単純組み合わせソートを説明するための図である。 図20は、頻度分布において頻度大の部分の分布幅がブロック幅に比較して小さい場合を示す図である。
以下に、本願の開示するソート方法、ソートプログラム及びソート装置の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
まず、実施例に係るソート装置によるソート方法について説明する。図1は、実施例に係るソート装置によるソート方法を説明するための図である。実施例に係るソート装置は、入力データからs個のデータをランダムサンプリングし、サンプリングしたデータyi(i=1〜s)から右側にtの範囲のブロック[yi...yi+t]をバケツソートし、残りの範囲のデータをマージソートする。ここで、入力データ数をnとすると、s<<nであり、st<<Nである。また、[yi...yi+t]は、yiから(yi+t)までのブロックを表す。
図1では、3つのブロック[y1...y1+t]、[y2...y2+t]、[y3...y3+t]がバケツソートされ、残りの範囲のデータはマージソートされる。入力データからランダムにデータをサンプリングすると、サンプリングされたデータの近傍はデータの頻度が大である可能性が高い。例えば、y1は頻度がピーク向かっている途中の値であり、[y1...y1+t]にピークがある。また、y2は頻度がピークの値より少し小さい値であり、[y2...y2+t]にピークがある。一方、y3の付近にはピークがないため、[y3...y3+t]にはピークは含まれないが、ランダムにサンプリングすると、y3がサンプリングされる可能性は小さい。
このように、実施例に係るソート装置は、入力データからs個のデータをランダムサンプリングし、サンプリングしたデータyiから右側にtの範囲のブロックをバケツソートの対象とすることで、頻度大である可能性が高いブロックをバケツソートする。したがって、実施例に係るソート装置は、頻度に偏りがあるデータを高速にソートすることができる。
なお、実施例に係るソート装置は、例えば、データベースシステムにおいて、データを検索する場合に用いられる。あるいは、実施例に係るソート装置は、売上の集計を行う売上集計装置やバッチ処理を行うバッチ処理装置の一部として用いられる。
次に、実施例に係るソート装置の機能構成について説明する。図2は、実施例に係るソート装置の機能構成を示す図である。図2に示すように、実施例に係るソート装置10は、記憶部11と、入力部12と、マージソート部13と、バケツソート部14と、サンプリング部15と、ブロックソート部16と、残データソート部17と、全体マージ部18と、出力部19とを有する。
記憶部11は、ソート処理で用いられるデータを記憶する。記憶部11は、入力データ記憶部21と、サンプリング数記憶部22と、サンプリングデータ記憶部23と、ブロック幅記憶部24と、ブロックデータ記憶部25と、残データ記憶部26と、ソート済データ記憶部27とを有する。
入力データ記憶部21は、ソートされるデータを入力データとして記憶する。サンプリング数記憶部22は、入力データからサンプリングされるデータの数sを記憶する。サンプリングデータ記憶部23は、入力データからサンプリングされたs個のサンプリングデータを記憶する。
ブロック幅記憶部24は、バケツソートされるブロックの幅を記憶する。ブロックデータ記憶部25は、バケツソートされるs個のブロックのデータをブロックデータとして記憶する。残データ記憶部26は、バケツソートされないデータを残データとして記憶する。残データは、入力データからブロックデータを除いた残りのデータである。ソート済データ記憶部27は、入力データがソート装置10によりソートされたソート済データを記憶する。
ソート装置10は、例えば、ユーザがキーボードを用いて入力したサンプリング数とブロック幅を受け付けてそれぞれサンプリング数記憶部22とブロック幅記憶部24に格納する。
入力部12は、ソートされるデータを入力して入力データ記憶部21に格納する。入力部12は、例えば、ソートされるデータをファイルから読み込んで入力データ記憶部21に格納する。入力部12は、例えば、ユーザがキーボードから入力したファイル名を受け付けて、ソートされるデータをファイルから読み込む。
マージソート部13は、マージソートを行う。バケツソート部14は、バケツソートを行う。
サンプリング部15は、入力データからランダムにサンプリング数のデータをサンプリングし、マージソート部13を用いてソートし、サンプリングデータ記憶部23にy1、y2、...、ysで表されるサンプリングデータとして格納する。
ブロックソート部16は、ブロックデータを作成し、バケツソート部14を用いてブロックデータをバケツソートする。すなわち、ブロックソート部16は、サンプリングデータのそれぞれのデータyiについて、ブロック幅を用いて入力データからブロック[yi...yi+t]に含まれるデータを抽出し、バケツソートしてブロックデータ記憶部25に格納する。
残データソート部17は、入力データからブロックデータを除いて残データを作成し、マージソート部13を用いて残データをマージソートして残データ記憶部26に格納する。
全体マージ部18は、バケツソートされたブロックデータとマージソートされた残データをマージソートしてソート済データを作成し、ソート済データ記憶部27に格納する。
出力部19は、ソート済データをソート済データ記憶部27から読み出して出力する。出力部19は、例えば、ソート済データをファイルに書き込む。
次に、ソート装置10によるソート処理のフローについて説明する。図3は、ソート装置10によるソート処理のフローを示すフローチャートである。図3に示すように、ソート装置10は、ソートの対象となるデータを入力する(ステップS1)。ここでは、入力データをX=x1,...,xnで表す。
そして、ソート装置10は、入力データからランダムにデータをs個サンプリングし(ステップS2)、s個のサンプリングデータをマージソートする(ステップS3)。ここでは、マージソートされたs個のサンプリングデータをy=y1,...,ysで表す。
そして、ソート装置10は、ブロック[yi...yi+t]をバケツソートする(ステップS4)処理をi=1からi=sまで繰り返す。そして、ソート装置10は、その他のデータZ=X\Yをマージソートする(ステップS5)。ここで、「X\Y」は、XからYを取り除くことを表す。また、Yは、ブロックデータである。
そして、ソート装置10は、ソート済みのYとソート済みのZをマージし、ソート済みのXを作成する(ステップS6)。そして、ソート装置10は、ソート済みのXを出力する(ステップS7)。
このように、ソート装置10は、入力データからs個のデータをランダムサンプリングし、サンプリングしたそれぞれのデータの値から右側にtの範囲のs個のブロックをバケツソートの対象とするので、ソートを高速に行うことができる。
次に、ソート装置10によるソート例を図4〜図12を用いて説明する。図4は、入力されるデータとソートに用いられる配列の初期状態を示す図である。このソート例では、s=4、t=10、n=8、N=93である。入力されるデータは、90、93、84、87、86、1、8、92である。
A、F、T、B、Cは長さNの配列である。Aは、データの数を格納する。Aの初期値は全て0である。FとTは、バケツソートされるデータとマージソートされるデータを振り分けるために用いられる。FとTの初期値は全て#である。ここで、#は、xi、iで使用されない記号であり、例えばN+1である。BはバケツソートでソートしたデータYを格納する。CはマージソートでソートしたデータZを格納する。B及びCもFやTと同様に初期値は全て#である。
図5は、データを入力してデータ数をカウントする状態を示す図である。図5に示すように、ソート装置10は、データxiをA[xi]+=1でカウントし、b+=1、F[xi]=b、T[b]=xiとする。bは、入力したデータの数を示す。x1=90を入力した状態では、A[90]=1、b=1、F[90]=1、T[1]=90となる。
そして、ソート装置10は、93、84、...、92を入力し、b、F、Tを更新する。図6は、データの入力が完了した状態を示す図である。図6に示すように、入力したデータに対応するA[1]、A[8]、A[84]、A[86]、A[87]、A[90]、A[92]、A[93]の値が1になる。また、T[1]〜T[8]に入力データが格納される。また、Tにおいてxiが格納された位置がF[xi]に格納される。すなわち、F[90]=1、F[93]=2、F[84]=3、F[87]=4、F[86]=5、F[1]=6、F[8]=7、F[92]=8である。
そして、ソート装置10は、入力したデータから4個のデータをランダムにサンプリングし、Bの先頭に格納する。そして、ソート装置10は、サンプリングデータをマージソートする。図7は、サンプリングデータのマージソートを示す図である。図7に示すように、サンプリングデータB[1]=87、B[2]=86、B[3]=92、B[4]=8がマージソートされてB[1]=8、B[2]=86、B[3]=87、B[4]=92となる。
そして、ソート装置10は、ブロックデータを作成してバケツソートする。図8は、ブロックデータのバケツソートを示す図である。ソート装置10は、y1=8を選び、ブロック[8...8+10]のデータのソート済み配列Y1をAを線形探索することで作成する。ブロック[8...8+10]には8しか含まれないので、8が探索され、Y1[1]=8となる。
そして、ソート装置10は、8+10の次に大きなy2=86を選び、ブロック[86...86+10]のデータのソート済み配列Y2をAを線形探索することで作成する。ブロック[86...86+10]には、86、87、90、92、93が含まれるので、Y2[1]=86、Y2[2]=87、Y2[3]=90、Y2[4]=92、Y2[5]=93となる。そして、ソート装置10は、Y1とY2からYを作成してCに一時的に格納する。
そして、ソート装置10は、ブロックデータ以外の残データを抽出するため、Tからブロックデータを削除する。すなわち、ソート装置10は、T[F[yi]]=#とする。図9は、y1=8をTから削除した状態を示す図である。y1=8のTにおける位置はF[8]に格納されているので、T[F[8]]=T[7]=#とする。なお、図8においてCに一時的に格納されたブロックデータは、図9ではBに移されている。
同様に、ソート装置10は、配列Y2に含まれるデータをTから削除する。図10は、配列Y2に含まれるデータをTから削除した状態を示す図である。図10に示すように、ソート装置10は、T[F[86]]=T[5]=#、T[F[87]]=T[4]=#、T[F[90]]=T[1]=#、T[F[92]]=T[8]=#、T[F[93]]=T[2]=#とする。
そして、ソート装置10は、Tを線形探索して#以外の数字を左詰めし、TをマージソートしてZを作成してCに格納する。図11は、Zの作成を示す図である。図11に示すように、T[3]=84とT[6]=1が左詰めされ、TがマージソートされてZが作成され、Cに保存される。
そして、ソート装置10は、YとZをマージソートしてソート済データを作成する。図12は、YとZのマージソートを示す図である。図12に示すように、Cに格納されたZとBに格納されたYがマージされてソート済データが作成され、Cに格納される。
次に、ソート装置10の効果について説明する。ソート装置10の計算時間は、O(n+st+(n−k)log(n−k))である。ここで、kはバケツソートしたデータの数であり、nの部分は前処理としてのランダムサンプリングに基づき、stの部分はバケツソートに基づき、(n−k)log(n−k)の部分はマージソートに基づく。
図13は、ソート装置10の効果を示す図である。図13に示すように、s,tが大である場合には、ブロック範囲が大きくなり、s,tが小である場合には、ブロック範囲が小さくなる。また、データに偏りがある場合には、ブロック範囲にデータが沢山含まれ、ソート装置10によるソートは高速化する傾向にある。一方、データに偏りがない場合には、ブロック範囲にデータが含まれにくく、ソート装置10によるソートは低速化する傾向にある。
したがって、データに偏りがある場合には、ソート装置10は、ブロック範囲大のとき、ソートを超高速化する傾向にあり、ブロック範囲小のとき、ソートを高速化する傾向にある。一方、データに偏りがない場合には、ソート装置10は、ブロック範囲大のとき、ソートを超低速化する傾向にあり、ブロック範囲小のとき、ソートを低速化する傾向にある。
このように、ソート装置10は、偏りがあるデータのソートを高速に行うことができる。なお、データに偏りがない場合、ランダムサンプリングに基づくバケツソートの無駄処理が発生するが、計算時間の上限はO(st)であり、計算時間を見積もることは可能である。
上述してきたように、実施例では、サンプリング部15が、入力データからランダムにデータをサンプリングしてマージソートする。そして、ブロックソート部16が、マージソートされた各サンプリングデータから右にtの範囲をブロックとして、ブロックに含まれるブロックデータをバケツソート部14を用いてバケツソートする。そして、残データソート部17がマージソート部13を用いて残データをマージソートする。したがって、ソート装置10は、データに偏りがある場合に、頻度分布において頻度が大きい範囲をバケツソートすることができ、ソートを高速化することができる。
また、実施例では、全体マージ部18が、バケツソートされたブロックデータとマージソートされた残データをマージソートしてソート済データを作成する。したがって、ソート装置10は、入力データをソートすることができる。
また、実施例では、s<<nであり、st<<Nである。したがって、ソート装置10は、データに偏りがある場合に、頻度分布において頻度が大きい範囲を高い可能性で特定してバケツソートすることができる。
なお、実施例では、バケツソートとマージソートを用いる場合について説明したが、ソート装置10は、マージソートの代わりに例えばクイックソート等他のソートアルゴリズムを用いてもよい。また、実施例では、サンプリングした値から右側にtの範囲をバケツソートしたが、ソート装置10は、サンプリングした値から左側にtの範囲をバケツソートしてもよい。あるいは、ソート装置10は、サンプリングした値から左右に(1/2)tの範囲をバケツソートしてもよい。
また、ソート装置10は、サンプリングした値から右側にtの範囲をデータが見つからなくなるまで拡張してもよい。図14は、範囲の拡張を説明するための図である。図14に示すように、ソート装置10は、サンプリングしたデータyiから右側にtの範囲を探索し、最後のデータの出現からさらにt以内にデータが見つかると、見つかったデータのうち最も大きなデータから右側にtだけ探索範囲を拡張する。そして、ソート装置10は、このような探索範囲の拡張を、拡張範囲にデータが見つからなくなるまで繰り返す。
このように、ソート装置10は、データの分布幅がブロック幅tよりも大きい場合に、ブロック幅を自動で拡張することで、密な分布のより多くのデータをバケツソートし、ソートをより高速化することができる。あるいは、ソート装置10は、拡張範囲に見つかるデータの数がユーザ設定の閾値を下回るまで探索範囲の拡張を繰り返してもよい。閾値を設定することで、ソート装置10は、t毎にデータが現れる場合等、広範囲で密でないデータをバケツソートすることを防ぎ、ソートを高速化できる。
なお、実施例では、ソート装置10について説明したが、ソート装置10が有する構成をソフトウェアによって実現することで、同様の機能を有するソートプログラムを得ることができる。そこで、ソートプログラムを実行するコンピュータについて説明する。
図15は、実施例に係るソートプログラムを実行するコンピュータのハードウェア構成を示す図である。図15に示すように、コンピュータ50は、メインメモリ51と、CPU(Central Processing Unit)52と、LAN(Local Area Network)インタフェース53と、HDD(Hard Disk Drive)54とを有する。また、コンピュータ50は、スーパーIO(Input Output)55と、DVI(Digital Visual Interface)56と、ODD(Optical Disk Drive)57とを有する。
メインメモリ51は、プログラムやプログラムの実行途中結果等を記憶するメモリである。CPU52は、メインメモリ51からプログラムを読み出して実行する中央処理装置である。CPU52は、メモリコントローラを有するチップセットを含む。
LANインタフェース53は、コンピュータ50をLAN経由で他のコンピュータに接続するためのインタフェースである。HDD54は、プログラムやデータを格納するディスク装置であり、スーパーIO55は、マウスやキーボード等の入力装置を接続するためのインタフェースである。DVI56は、液晶表示装置を接続するインタフェースであり、ODD57は、DVDの読み書きを行う装置である。
LANインタフェース53は、PCIエクスプレス(PCIe)によりCPU52に接続され、HDD54及びODD57は、SATA(Serial Advanced Technology Attachment)によりCPU52に接続される。スーパーIO55は、LPC(Low Pin Count)によりCPU52に接続される。
そして、コンピュータ50において実行されるソートプログラムは、コンピュータ50により読み出し可能な記録媒体の一例であるDVDに記憶され、ODD57によってDVDから読み出されてコンピュータ50にインストールされる。あるいは、ソートプログラムは、LANインタフェース53を介して接続された他のコンピュータシステムのデータベース等に記憶され、これらのデータベースから読み出されてコンピュータ50にインストールされる。そして、インストールされたソートプログラムは、HDD54に記憶され、メインメモリ51に読み出されてCPU52によって実行される。
9 分布が密である部分
10 ソート装置
11 記憶部
12 入力部
13 マージソート部
14 バケツソート部
15 サンプリング部
16 ブロックソート部
17 残データソート部
18 全体マージ部
19 出力部
21 入力データ記憶部
22 サンプリング数記憶部
23 サンプリングデータ記憶部
24 ブロック幅記憶部
25 ブロックデータ記憶部
26 残データ記憶部
27 ソート済データ記憶部
50 コンピュータ
51 メインメモリ
52 CPU
53 LANインタフェース
54 HDD
55 スーパーIO
56 DVI
57 ODD

Claims (8)

  1. 複数の整数データを含むデータ集合のソート方法であって、
    前記データ集合からランダムに選択した要素それぞれについて、要素から所定の数値範囲の要素についてバケツソートを実行し、
    バケツソートした要素以外の要素についてバケツソート以外のソートを実行する
    処理をコンピュータが実行することを特徴とするソート方法。
  2. バケツソートした要素とバケツソート以外でソートした要素をバケツソート以外でソートする処理を前記コンピュータにさらに実行させることを特徴とする請求項1に記載のソート方法。
  3. ランダムに選択した要素の数は、前記データ集合に含まれる要素の数と比較して十分に小さく、ランダムに選択した要素の数と前記所定の数値範囲との積は前記データ集合に含まれる要素の値域範囲と比較して十分に小さいことを特徴とする請求項1又は2に記載のソート方法。
  4. 前記バケツソートを実行する処理は、ランダムに選択した要素から該要素に所定の正数を加えた値までのブロック範囲に含まれる要素についてバケツソートを実行することを特徴とする請求項1、2又は3に記載のソート方法。
  5. 前記バケツソートを実行する処理は、ランダムに選択した要素から該要素に所定の正数を加えた値までのブロック範囲に含まれる最も大きな要素である最大数から該最大数に前記正数を加えた値までの拡張範囲に要素が閾値個数以上ある場合には、前記ブロック範囲を前記拡張範囲まで拡張し、拡張したブロック範囲の拡張範囲の要素数が前記閾値個数未満になるまでブロック範囲を拡張することを特徴とする請求項4に記載のソート方法。
  6. 前記バケツソート以外のソートはマージソートであることを特徴とする請求項1〜5のいずれか1つに記載のソート方法。
  7. 複数の整数データを含むデータ集合をソートするソートプログラムであって、
    前記データ集合からランダムに選択した要素それぞれについて、要素から所定の数値範囲の要素についてバケツソートを実行し、
    バケツソートした要素以外の要素についてバケツソート以外のソートを実行する
    処理をコンピュータに実行させることを特徴とするソートプログラム。
  8. 複数の整数データを含むデータ集合をソートするソート装置であって、
    前記データ集合からランダムに選択した要素それぞれについて、要素から所定の数値範囲の要素についてバケツソートを実行する第1ソート部と、
    前記第1ソート部によりバケツソートされた要素以外の要素についてバケツソート以外のソートを実行する第2ソート部と
    を有することを特徴とするソート装置。
JP2019013199A 2019-01-29 2019-01-29 ソート方法、ソートプログラム及びソート装置 Active JP7151515B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2019013199A JP7151515B2 (ja) 2019-01-29 2019-01-29 ソート方法、ソートプログラム及びソート装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019013199A JP7151515B2 (ja) 2019-01-29 2019-01-29 ソート方法、ソートプログラム及びソート装置

Publications (2)

Publication Number Publication Date
JP2020123035A true JP2020123035A (ja) 2020-08-13
JP7151515B2 JP7151515B2 (ja) 2022-10-12

Family

ID=71992700

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019013199A Active JP7151515B2 (ja) 2019-01-29 2019-01-29 ソート方法、ソートプログラム及びソート装置

Country Status (1)

Country Link
JP (1) JP7151515B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113900622A (zh) * 2021-09-22 2022-01-07 中国科学院国家空间科学中心 一种基于fpga的数据信息快速排序方法、系统、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06103028A (ja) * 1992-09-18 1994-04-15 Pfu Ltd データソート処理システム
JPH086761A (ja) * 1994-06-21 1996-01-12 Fujitsu Ltd ソート処理装置及びソート処理方法
JP2002091757A (ja) * 2000-09-11 2002-03-29 Takashi Sawayama ソート処理方法
US20140324890A1 (en) * 2013-04-28 2014-10-30 International Business Machines Corporation Data Driven Parallel Sorting System and Method

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6103028B2 (ja) 2014-12-26 2017-03-29 ダイキン工業株式会社 放電ユニット

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06103028A (ja) * 1992-09-18 1994-04-15 Pfu Ltd データソート処理システム
JPH086761A (ja) * 1994-06-21 1996-01-12 Fujitsu Ltd ソート処理装置及びソート処理方法
JP2002091757A (ja) * 2000-09-11 2002-03-29 Takashi Sawayama ソート処理方法
US20140324890A1 (en) * 2013-04-28 2014-10-30 International Business Machines Corporation Data Driven Parallel Sorting System and Method

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
仲田善満 外2名: "GPUを用いた状態可到達性解析の高速化 Accelerating State Reachability Analysis with a GPU", 電子情報通信学会技術研究報告 VOL.110 NO.229 IEICE TECHNICAL REPORT, vol. 第110巻, JPN6022035788, 7 October 2010 (2010-10-07), JP, pages 25 - 29, ISSN: 0004861465 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113900622A (zh) * 2021-09-22 2022-01-07 中国科学院国家空间科学中心 一种基于fpga的数据信息快速排序方法、系统、设备及存储介质

Also Published As

Publication number Publication date
JP7151515B2 (ja) 2022-10-12

Similar Documents

Publication Publication Date Title
JP6051212B2 (ja) 反復データの処理
US9727308B2 (en) Sorting multiple records of data using ranges of key values
CN112579155B (zh) 代码相似性检测方法、装置以及存储介质
US9208278B2 (en) Clustering using N-dimensional placement
JP2019512127A (ja) 文字列距離計算方法及び装置
JP2009129323A (ja) 同義語抽出装置
Han et al. SlimML: Removing non-critical input data in large-scale iterative machine learning
JP2019086979A (ja) 情報処理装置、情報処理方法及びプログラム
JP7151515B2 (ja) ソート方法、ソートプログラム及びソート装置
Pashaei et al. A novel method for splice sites prediction using sequence component and hidden Markov model
CN113918807A (zh) 数据推荐方法、装置、计算设备及计算机可读存储介质
JP5716966B2 (ja) データ分析装置、データ分析方法及びプログラム
CN112148359B (zh) 一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质
Rahmawati et al. Document clustering using sequential pattern (SP): Maximal frequent sequences (MFS) as SP representation
JP5143797B2 (ja) ビット列データソート装置、ソート方法及びプログラム
US20140232726A1 (en) Space-filling curve processing system, space-filling curve processing method, and program
Thiel et al. Improving graphchi for large graph processing: Fast radix sort in pre-processing
JP7068085B2 (ja) 特徴量生成装置および特徴量生成方法
US11775515B2 (en) Dataset optimization framework
JP5387371B2 (ja) トライ木分類プログラムおよびトライ木分類方法
WO2022269843A1 (ja) 検知期間設定装置、検知期間設定方法、及びプログラム
WO2023152923A1 (ja) 情報処理プログラム、情報処理装置および情報処理方法
Ahn et al. RN+: A Novel Biclustering Algorithm for Analysis of Gene Expression Data Using Protein–Protein Interaction Network
Pimentel et al. Redblock: a tool for online deduplication on large datasets
Sun et al. SN-RNSP: Mining self-adaptive nonoverlapping repetitive negative sequential patterns in transaction sequences

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20211007

TRDD Decision of grant or rejection written
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220823

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220830

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220912

R150 Certificate of patent or registration of utility model

Ref document number: 7151515

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150