JP2004133301A - ソーティング方法及び装置並びにソーティングプログラム - Google Patents
ソーティング方法及び装置並びにソーティングプログラム Download PDFInfo
- Publication number
- JP2004133301A JP2004133301A JP2002299331A JP2002299331A JP2004133301A JP 2004133301 A JP2004133301 A JP 2004133301A JP 2002299331 A JP2002299331 A JP 2002299331A JP 2002299331 A JP2002299331 A JP 2002299331A JP 2004133301 A JP2004133301 A JP 2004133301A
- Authority
- JP
- Japan
- Prior art keywords
- data
- sorting
- index
- loop
- ordered set
- 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.)
- Withdrawn
Links
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
【課題】n個のデータから構成された全順序集合を降順又は昇順に並べ替えたのちの上位のm個のデータを高速に抽出する。
【解決手段】本発明のソーティング方法では、n個のデータから構成された全順序集合の上位からm個のデータに対して、降順又は昇順の並べ替えを行う(第1のソーティングステップS1)。続いて、第1のソーティングステップ(S1)により並べ替えをしたのちの全順序集合のうちの上位から(m+1)個目以降のデータを1つずつ選択していき、選択した1つのデータと全順序集合の上位からm個のデータとにより降順又は昇順の並べ替えを行う(第2のソーティングステップS2)。
【選択図】 図2
【解決手段】本発明のソーティング方法では、n個のデータから構成された全順序集合の上位からm個のデータに対して、降順又は昇順の並べ替えを行う(第1のソーティングステップS1)。続いて、第1のソーティングステップ(S1)により並べ替えをしたのちの全順序集合のうちの上位から(m+1)個目以降のデータを1つずつ選択していき、選択した1つのデータと全順序集合の上位からm個のデータとにより降順又は昇順の並べ替えを行う(第2のソーティングステップS2)。
【選択図】 図2
Description
【0001】
【発明の属する技術分野】
本発明は、全順序集合内の要素の並べ替えを行うソーティング方法及び装置並びにソーティングプログラムに関する。
【0002】
【従来の技術】
MPEG−4では、CELP(Code Excited Liner Predictive Coding)コーダと呼ばれるスピーチコーダが採用されている。MPEG−4 CLEPでは、過去に生成した音声信号を蓄えておくコードブックを備えており、このコードブック内のデータを利用して符号化を行う。
【0003】
MPEG−4 CLEPでは、図5に示すように、コードブック内に256個のデータを有している。MPEG−4 CLEPでは、その256個のデータに対してソーティングを行い、そのうちの上位の32個のデータを抽出する処理が行われる。
【0004】
【発明が解決しようとする課題】
ところで、全順序集合の各要素を昇順又は降順に並べ替えるソーティング方法には、例えば、シェルソート、マージソート並びにクイックソート等、様々な方法がある。これら従来から知られているソーティング方法は、全順序集合の全要素の並べ替えを行うものである。
【0005】
これに対して、上述したMPEG−4 CLEPでは、コードブック内の256個の全データをソーティングした後の上位の32個のデータしか必要としていない。つまり、残りの224個のデータの並び順は、どのようになっていてもかまわない。
【0006】
しかしながら、コードブック内のデータの並べ替えにシェルソート等の従来のソーティング方法を採用した場合、256個全てのデータに対して並べ替えが行われてしまう。つまり、256個の全てのデータが昇順又は降順に並べ替えられてしまう。従って、処理時間が長くなり、また、ソーティング中に必要とするメモリ等も大きくなってしまう。
【0007】
本発明は、このような従来の実状を鑑みて提案されたものであり、n個のデータから構成された全順序集合を降順又は昇順に並べ替えたのちの上位のm個のデータを、高速に抽出することができるソーティング方法及び装置並びにソーティングプログラムを提供することを目的とする。
【0008】
【課題を解決するための手段】
本発明にかかるソーティング方法及び装置、並びにソーティングプログラムでは、n個(nは2以上の整数)のデータから構成された全順序集合の上位からm個(mは(m−1)以下の自然数)のデータに対して、降順又は昇順に並べ替えを行う第1のソーティング処理を行い、第1のソーティング処理により並べ替えをしたのちの上記全順序集合のうちの上位から(m+1)個目以降のデータを1つずつ選択していき、選択した1つのデータと全順序集合の上位からm個のデータとにより降順又は昇順の並べ替えを行う第2のソーティング処理を行う。
【0009】
本発明では、第2のソーティング処理によりデータの並べ替えがされたのちの全順序集合の上位からm個のデータが、全順序集合の全データを昇順又は降順に並べ替えた後の上位からm個のデータと一致している。つまり、本発明では、全順序集合の全データのうち大きい方の値からm個又は小さい方の値からm個のデータを抽出し、抽出したm個のデータを昇順又は降順で並べ替えをして全順序集合の上位から配置している。ただし、本発明では、第2のソーティング処理によりデータの並べ替えがされたのちの全順序集合のm+1個目以降のデータの並び順は保障されていない。
【0010】
【発明の実施の形態】
以下、本発明の実施の形態として、本発明を適用したソーティング装置について説明をする。本発明の実施の形態のソーティング装置は、例えば、MPEG−4のCELPコーダのコードブックのソーティング等に適用することができる。
【0011】
なお、以下の説明で用いる定数等は、次のように定義される。
U:複数のデータから構成される全順序集合
x[i]:全順序集合U内のインデックスiのデータ(実数値)
i:インデックス(iは0以上N以下の整数値)
n:全順序集合U内の総データ数(2以上の整数値)
m:抽出データ数(1以上n未満の任意の整数値)
N:集合Uの最下位のインデックス(N=n−1)
M:抽出データ範囲内の最下位のインデックス(M=m−1)。
【0012】
また、インデックスとは、各データに対する当該全順序集合U内における順序を示す値である。全順序集合U内の各データには、インデックスとして0からNまでの整数値が昇順でユニークに割り当てられる。最上位のインデックスは0であり、最下位のインデックスはNである。従って、例えば全順序集合U内のデータを降順でソーティングした場合、最大値のインデックスは0となり、最小値のインデックスはNとなる。
【0013】
本実施の形態のソーティング装置は、m個のデータから構成される全順序集合Uを昇順(或いは降順)に並べ替えを行う。ただし、本実施の形態のソーティング装置は、処理終了後の全順序集合Uのm個のデータの全てを正確に並べ替えたソーティングを行うのではなく、上位のm個のデータ(インデックス0〜インデックスM)の並びを保障したソーティングを行うものである。つまり、本実施の形態のソーティング装置によりソーティングが行われたのちの全順序集合Uのインデックス0〜インデックスMの各データは、全順序集合U内の全てのデータに対してソーティングをしたのちのインデックス0〜インデックスMのデータと完全一致している。しかしながら、このソーティング装置によりソーティングが行われたのちの全順序集合Uのインデックス(M+1)〜インデックスNの各データは、全順序集合U内の全てのデータを昇順(又は降順)に並べ替えをしたのちのインデックス(M+1)〜インデックスNのデータと一致するとは限らない。
【0014】
本実施の形態のソーティング装置がデータの並べ替え順序を保障するインデックスの範囲を、抽出データ範囲(インデックス0〜インデックスM)と呼び、そのデータ数を抽出データ数mという。
【0015】
図1に本発明の実施の形態のソーティング装置のブロック構成図を示す。
【0016】
ソーティング装置1は、図1に示すように、ソーティング対象となる全順序集合Uを格納するメモリ11と、全順序集合Uを外部からメモリ11へ入力する入力部12と、全順序集合Uをメモリ11から外部へ出力する出力部13と、メモリ11内の任意のインデックスiのデータx[i]の読み出し及び書き込みを行い、全順序集合Uのソーティングを行うデータ処理部14と、データ処理部14の演算用に用いられるレジスタ15とを備えている。
【0017】
このようなソーティング装置1では、外部から入力部12を介して全順序集合Uが入力され、入力された全順序集合Uがメモリ11内に格納される。データ処理部14は、所定のプログラムを起動してメモリ11内に格納されている全順序集合U内のデータのソーティングを行う。データ処理部14によりソーティングがされた後の全順序集合Uは、出力部13を介して外部へと出力される。
【0018】
データ処理部14が行うソーティング処理の内容について、図2〜図4に示すフローチャートを参照して説明をする。
【0019】
なお、ソーティング装置1では、昇順(小さい順)のソーティングにも降順(大きい順)のソーティングにも適用することができるが、以下では、降順のソーティングを行う場合の処理例について説明をする。
【0020】
また、以下の説明で用いる変数は、次のように定義されるものである。これらの変数は、例えば、レジスタ15内に格納されてデータ処理部14によりアクセスがされる。
Pm:メインポインタ:任意のインデックスを指し示す変数
Ps:サブポインタ :任意のインデックスを指し示す変数
α:任意のデータの値を格納する変数
β:任意のデータの値を格納する変数。
【0021】
図2に示すように、データ処理部14は、第1のソーティング処理(S1)を行い、その後に、第2のソーティング処理(S2)を行う。第1のソーティング処理(S1)において、データ処理部14は、全順序集合Uの抽出データ範囲(インデックス0〜M)に対して、降順のソーティングを行う。第2のソーティング処理(S2)において、データ処理部14は、第1のソーティング処理でソーティングがされなかったインデックスM+1〜Nのデータを1つずつ順番に選択していき、選択したデータと全順序集合Uのインデックス0〜Mのデータとで降順の並べ替えを行う。
【0022】
まず、第1のソーティング処理(S1)の処理例を、図3に示すフローチャートを参照して説明をする。
【0023】
第1のソーティング処理(S1)には、シェルソートやマージソート等のどのようなソーティングアルゴリズムを適用してもよいが、本例では、隣り合ったデータを比較して大小の順が逆であればそれらの要素を入れ替えていくという操作を繰り返すバブルソートを利用した処理を行っている。
【0024】
まず、ステップS11において、メインポインタPmに1を代入し、メインポインタPmを初期化する。
【0025】
ステップS11でメインポインタPmを初期化した後は、ステップS12〜ステップS21のメインループ処理を行う。
【0026】
メインループ処理(S12〜S21)では、インデックス1からインデックスMまで1つずつ順番にデータを選択していき、選択したデータ(以下、対象データと呼ぶ。)の移動先となるインデックスを決定し、そのインデックスに挿入する処理を行う。メインループ処理(S12〜S21)では、1つの対象データに対する選択及び挿入の処理を、1回のループ処理で行う。メインポインタPmは、このメインループ(S12〜S21)の処理対象となる1つの対象データのインデックスを特定するポインタとなる。なお、メインポインタPmは、メインループの最終ステップ(S21)で1ずつインクリメントされていくため、対象データは、上位インデックスから下位インデックスへ向かう方向へ、1からMまで選択されていくこととなる。
【0027】
メインループの開始ステップとなるステップS12では、Pm>Mを判断する。Pm>Mが真であれば第1のソーティング処理(S1)を終了する。Pm>Mmが偽であれば、ステップS13に進みメインループの処理を続行する。メインポインタPmは、メインループの終了ステップとなるステップS21で、値が1ずつインクリメントされる。そのため、インデックス1からMまでの全てのデータに対して選択及び挿入という処理を終えた場合には、メインポインタPmの値はMよりも大きくなる。一方、インデックス1からMまでの全てのデータに対して選択及び挿入という処理を終えていない場合には、メインポインタPmの値はM以下となる。従って、メインループの開始ステップとなるこのステップS12でメインポインタPmの値を判断すれば、第2のソーティング処理の終了判断をすることできる。
【0028】
続くステップS13では、αにx[Pm]を代入する。すなわち、メモリ11内のデータx[Pm]を読み出し、変数αに代入する。
【0029】
続くステップS14では、サブポインタPsに(Pm−1)を代入して、サブポインタPsを初期化する。つまり、サブポインタPsに、選択データx[Pm]の1つ上位のインデックスを指定する。
【0030】
ステップS14でサブポインタPsを初期化した後は、ステップS15〜ステップS19のサブループ処理を行う。
【0031】
サブループ処理(S15〜S19)では、インデックス(Pm−1)からインデックス0までのデータを順番に選択していき、選択したデータ(参照データ)と対象データ(x[Pm])との大小比較する処理を行い、対象データの移動位置となるインデックスを決定する処理を行う。サブループ処理(S15〜S19)では、1つの参照データに対する大小比較の処理を、1回のループ処理で行う。サブポインタPsは、このサブループ(S15〜S19)の処理対象となる1つの参照データのインデックスを特定するポインタとなる。なお、サブポインタPsの値は、サブループ処理の最終ステップ(S19)において、1ずつデクリメントされていくため、参照データは、下位インデックスから上位インデックスへ向かう方向へ、(Pm−1)から0まで順番に選択されていくこととなる。つまり、サブループ処理では、選択データx[Pm]より上位のインデックスのデータを、1つずつ上位に向けて選択していくこととなる。
【0032】
サブループの開始ステップとなるステップS15では、Ps≧0を判断する。Ps≧0が偽であればサブループ処理(S15〜S19)を抜けて、ステップS20に進む。Ps≧0が真であれば、サブループ処理(S15〜S19)を抜けずに、続くステップS16に進む。サブポインタPsは、サブループの終了ステップとなるステップS19で、値が1ずつデクリメントされる。そのため、インデックス(Pm−1)から0までの全てのデータを参照データとして選択し終えた場合には、サブポインタPsの値は0よりも小さくなる。一方、インデックス(Pm−1)から0までの全てのデータを参照データとして選択し終えていない場合には、サブポインタPsの値は0以上となる。従って、サブループの開始ステップとなるこのステップS15でサブポインタPsの値を判断すれば、サブループの終了判断をすることができる。
【0033】
続くステップS16では、βにx[Ps]を代入する。すなわち、メモリ11内の参照データx[Ps]の値を読み出し、変数βに代入する。
【0034】
続くステップS17では、α>βを判断する。つまり、選択データx[Pm]と参照データx[Ps]との大小比較を行う。
【0035】
ステップS17で大小比較を行った結果、α>βが真(すなわち、x[Pm]>x[Ps]が真)であれば、サブループ処理(S15〜S19)を抜けずにステップS18に進む。一方、α>βが偽(すなわち、x[Pm]>x[Ps]が偽)であれば、サブループ処理(S15〜S19)を抜けてステップS20に進む。
【0036】
ここで、参照データとして選択されるインデックス(Pm−1)からインデックス(0)までのデータは、当該第1のソーティング処理(S1)が進行していく過程上、必ず降順にデータが並んでいる。このため、このステップS17の判断でα>βが偽となれば、現在の参照データ(x[Ps])を含めてこれより上位のインデックスのデータには、対象データx[Pm]よりも大きいデータは存在しないことが保障される。また、インデックス(Pm−1)からインデックス(0)までのデータのうち、現在の参照データ(x[Ps])を含めずにこれより下位のデータは、すでにα>βが真であることがわかっているので、対象データx[Pm]よりも小さいことが保障される。つまり、α>βが偽となったときに、対象データの挿入位置がインデックス(Ps−1)に決定される。従って、このステップS17でα>βが偽となったときに、サブループ処理(S15〜S19)を抜けることができる。また、上記ステップS15でサブループ処理を抜けた場合には、インデックス(Pm−1)からインデックス(0)までの全てのデータは、対象データx[Pm]よりも小さい、ということとなるので、対象データの挿入位置は、最上位インデックスである0である。
【0037】
続くステップS18では、x[Ps+1]にβを代入する。すなわち、レジスタ15に格納されている変数βの値を、メモリ11内のデータx[Ps+1]に書き込む。つまり、ステップS17でα>βが真と判断された場合には、対象データx[Pm]が、現在の参照データx[Ps]よりも上位のインデックスに挿入されることになる。従って、現在の参照データx[Ps]のインデックスの位置を1つ下位に移動しなければならないため、このステップS18で変数βの値をx[Ps+1]に格納している。なお、サブループ処理を進行していく過程上、データx[Ps+1]の値は必ず変数α又は変数βに退避されているので、このステップS18で、変数βの値をx[Ps+1]に書き込んでも、データが消去されてしまうことはない。
【0038】
続くステップS19では、サブポインタPsの値を1つデクリメントする。つまり、このステップS19では、大小比較をするための参照データを1つ上位に移動させている。このステップS19での処理を終えると、サブループの開始ステップであるステップS15に戻り、次の参照データに対するサブループの処理を行う。
【0039】
以上のようにサブループ処理(S15〜S19)が行われる。サブループ処理が行われた結果、対象データX[Pm]の挿入位置は、インデックス(Ps−1)となることが決定される。
【0040】
続いて、ステップS20では、x[Ps+1]にαの値を代入する。すなわち、レジスタ15に格納されている変数αの値をメモリ11のデータx[Ps+1]に書き込むことによって、対象データx[Pm]をインデックス(Ps+1)に移動している。
【0041】
続いて、ステップS21では、メインポインタPmの値を1つインクリメントする。つまり、このステップS21では、選択データの位置を一つ下位に移動する。
【0042】
そして、このステップS21での処理を終えると、メインループの開始ステップであるステップS12に戻り、次の選択データに対するループ処理を行う。
【0043】
データ処理部14は、以上のステップS11〜S21の処理を行うことによって、第1のソーティング処理を完了することできる。つまり、第1のソーティング処理(S1)において、データ処理部14は、全順序集合Uの抽出データ範囲(インデックス0〜M)に対して、降順のソーティングを行うことができる。
【0044】
つぎに、第2のソーティング処理(S2)の処理例を、図4に示すフローチャートを参照して説明をする。
【0045】
第2のソーティング処理(S2)では、第1のソーティング処理でソーティングがされなかったインデックスM+1〜Nのデータを1つずつ順番に選択していき、選択したデータと、全順序集合Uのインデックス0〜Mのデータとの、全部でM+2個のデータで降順の並べ替えを行う。その並べ替えは、シェルソートやマージソート等のどのようなソーティングアルゴリズムを適用してもよいが、本例では、バブルソートを利用した処理を行っている。
【0046】
まず、ステップS31において、メインポインタPmに(M+1)を代入し、メインポインタPmを初期化する。
【0047】
ステップS11でメインポインタPmを初期化した後は、まず、ステップS32〜ステップS35及びステップS44で形成される第1ループ処理を行う。
【0048】
第1ループ(S31〜S35,S44)では、インデックス(M+1)のデータからインデックスNのデータまで順番に1つずつデータを選択していき、選択した1つのデータ(対象データ)と、抽出データ範囲(インデックス0〜M)内の最下位のデータx[M]とのデータの大小比較をする処理を行う。そして、抽出データ範囲の最下位データx[M]よりも対象データ[Pm]が大きい場合にのみ、続く第2ループ処理(S36〜S44)を行う。第2ループ(S36〜S44)では、対象データの移動先のインデックスを決定し、決定したインデックスに対象データを挿入する処理を行う。
【0049】
すなわち、第2のソーティング処理の過程上、抽出データ範囲(インデックス0〜M)のデータは必ず降順にデータが並んでいる。このため、第2のソーティング処理(S2)では、まず、第1ループで、対象データx[Pm]と、抽出データ範囲の最下位データx[M]との大小判断を行い、対象データx[Pm]が最下位データx[M]よりも大きい場合にのみ、続く第2ループ(S36〜S44)を行うようにしている。
【0050】
第1ループ(S32〜S35,S44)及び第2ループ(S36〜S44)では、1つの対象データに対する大小比較処理を1回のループ処理で行う。メインポインタPmは、第1ループ及び第2ループの処理対象となる1つの対象データのインデックスを特定するポインタとなる。なお、メインポインタPmは、第1ループ及び第2ループの最終ステップ(S44)で1ずつインクリメントされるため、対象データは、上位インデックスから下位インデックスへ向かう方向へ、(M+1)からNまで選択されていくこととなる。
【0051】
第1ループの開始ステップとなるステップS32では、Pm>Nを判断する。Pm>Nが真であれば第2のソーティング処理(S2)を終了する。Pm>Nが偽であれば、ステップS33に進み第1ループの処理を続行する。メインポインタPmは、第1ループ及び第2ループの終了ステップとなるステップS44で、値が1ずつインクリメントされる。そのため、インデックス(M+1)〜Nまでの全てのデータに対して処理を終えた場合には、メインポインタPmの値はNよりも大きくなる。一方、インデックス(M+1)〜Nまでの全てのデータに対して処理を終えていない場合には、メインポインタPmの値はN以下となる。従って、第1ループの開始ステップとなるこのステップS32でメインポインタPmの値を判断すれば、第2のソーティング処理(S2)の終了判断をすることできる。
【0052】
続くステップS33では、αにx[Pm]を代入する。すなわち、メモリ11内の対象データx[Pm]を読み出し、変数αに代入する。
【0053】
続くステップS34では、βにx[M]を代入する。すなわち、メモリ11内の抽出データ範囲の最下位データx[M]を読み出し、変数βに代入する。
【0054】
続くステップS35では、α>βを判断する。つまり、選択データx[Pm]と抽出データ範囲の最下位データx[M]との大小比較を行う。
【0055】
ステップS35で大小比較を行った結果、α>βが真(すなわち、x[Pm]>x[M]が真)であれば、ステップS36以降の第2ループに進む。一方、ステップS35で大小比較を行った結果、α>βが偽(すなわち、x[Pm]>x[M]が偽)であれば、ステップS44でメインポインタPmを1インクリメントし、ステップS32から第1ループの処理を繰り返して行う。
【0056】
第2ループの開始ステップとなるステップS36では、x[Pm]にβの値を代入する。すなわち、レジスタ15に格納されている変数βの値をメモリ11内のデータx[Pm]に書き込む。つまり、ステップS35でα>βが真と判断された場合には、対象データx[Pm]が必ず抽出データ範囲内のいずれかのインデックス位置に挿入されることとなる。従って、抽出データ範囲の最下位データx[N]を、対象データのインデックス位置に移動して、対象データの移動先を確保する。
【0057】
続くステップS37では、サブポインタPsに(M−1)を代入して、サブポインタPsを初期化する。
【0058】
ステップS37でサブポインタPsを初期化した後は、ステップS38〜ステップS42のサブループ処理を行う。
【0059】
サブループ処理(S38〜S42)では、インデックス(M−1)からインデックス0までのデータを順番に選択していき、選択したデータ(参照データ)と対象データ(x[Pm])との大小比較する処理を行い、対象データの移動位置となるインデックスを決定する処理を行う。サブループ処理(S38〜S42)では、1つの参照データに対する大小比較の処理を、1回のループ処理で行う。サブポインタPsは、このサブループ(S38〜S42)の処理対象となる1つの参照データのインデックスを特定するポインタとなる。なお、サブポインタPsは、サブループ処理の最終ステップ(S42)において、1ずつデクリメントされていくため、参照データは、下位インデックスから上位インデックスへ向かう方向へ、(M−1)から0まで選択されていくこととなる。
【0060】
サブループの開始ステップとなるステップS38では、Ps≧0を判断する。Ps≧0が偽であればサブループ処理(S38〜S42)を抜けて、ステップS43に進む。Ps≧0が真であれば、サブループ処理(S38〜S42)を抜けずに、続くステップS39に進む。サブポインタPsは、サブループの終了ステップとなるステップS42で、値が1ずつデクリメントされる。そのため、インデックス(M−1)から0までの全てのデータを参照データとして選択し終えた場合には、サブポインタPsの値は0よりも小さくなる。一方、インデックス(M−1)〜0までの全てのデータを参照データとして選択し終えていない場合には、サブポインタPsの値は0以上となる。従って、サブループの開始ステップとなるこのステップS38でサブポインタPsの値を判断すれば、サブループの終了判断をすることができる。
【0061】
続くステップS39では、βにx[Ps]を代入する。すなわち、メモリ11内の参照データx[Ps]を読み出し、変数βに代入する。
【0062】
続くステップS40では、α>βを判断する。つまり、選択データx[Pm]と参照データx[Ps]との大小比較を行う。
【0063】
ステップS40で大小比較を行った結果、α>βが真(すなわち、x[Pm]>x[Ps]が真)であれば、サブループ処理(S38〜S42)を抜けずにステップS41に進む。一方、α>βが偽(すなわち、x[Pm]>x[Ps]が偽)であれば、サブループ処理(S38〜S42)を抜けてステップS43に進む。
【0064】
続くステップS42では、x[Ps+1]にβを代入する。すなわち、レジスタ15に格納されている変数βの値をメモリ11内のデータx[Ps+1]に書き込む。つまり、ステップS40でα>βが真と判断された場合には、対象データx[Pm]が、現在の参照データx[Ps]よりも上位のインデックスに挿入されることになる。従って、参照データx[Ps]のインデックスの位置を1つ下位に移動しなければならないため、このステップS41で変数βの値をx[Ps+1]に格納している。
【0065】
続くステップS42では、サブポインタPsの値を1つデクリメントさせている。つまり、このステップS42では、大小比較をするための参照データを1つ上位に移動させている。このステップS42での処理を終えると、サブループの開始ステップであるステップS38に戻り、次の参照データに対するサブループの処理を行う。
【0066】
以上のようにサブループ処理(S38〜S42)が行われる。サブループ処理が行われた結果、対象データX[Pm]の挿入位置は、インデックス(Ps−1)となる。
【0067】
続いて、ステップS43では、x[Ps+1]にαの値を代入する。すなわち、レジスタ15に格納されている変数αをメモリ11内のx[Ps+1]に書き込むことによって、対象データx[Pm]をインデックスx[Pm+1]に移動している。
【0068】
続いて、ステップS44では、メインポインタPmの値を1つインクリメントする。つまり、このステップS44では、選択データの位置を一つ下位に移動する。
【0069】
そして、このステップS44での処理を終えると、第1ループの開始ステップであるステップS32に戻り、次の選択データに対するループ処理を行う。
【0070】
データ処理部14は、以上のステップS31〜S44の処理を行うことによって、第2のソーティング処理を完了することできる。つまり、データ処理部14は、第2のソーティング処理(S2)では、全順序集合Uの抽出データ範囲(インデックス0〜M)内のみのデータの保障を行った、降順のソーティングを行うことができる。
【0071】
以上のように本実施の形態のソーティング装置1では、第1のソーティング処理(S1)を行い、続いて、第2のソーティング処理を行うことによって、インデックス0〜インデックスMまでの並びを保障した全順序集合Uのソーティングを行うことができる。
【0072】
なお、図3及び図4のフローチャートでは、降順に並べ替える処理を例にとって説明をしたが、本実施の形態のソーティング装置1では、降順に限らず、昇順のソーティングも行うことができる。昇順のソーティングを行う場合には、ステップS17、ステップS35及びステップS40でα<βの判断を行えばよい。
【0073】
【発明の効果】
本発明にかかるソーティング方法及び装置並びにソーティングプログラムでは、第1のソーティングステップで全順序集合の上位からm個のデータに対して降順又は昇順の並べ替えを行い、第2のソーティングステップで、第1のソーティングステップにより並べ替えをしたのちの上記全順序集合のうちの上位から(m+1)個目以降のデータを1つずつ選択していき、選択した1つのデータと全順序集合の上位からm個のデータとにより降順又は昇順の並べ替えを行う。
【0074】
本発明では、第2のソーティング処理によりデータの並べ替えがされたのちの全順序集合の上位からm個のデータが、全順序集合の全データを昇順又は降順に並べ替えた後の上位からm個のデータと一致している。つまり、本発明では、全順序集合の全データのうち大きい方の値からm個又は小さい方の値からm個のデータを抽出し、抽出したm個のデータを昇順又は降順で並べ替えをして全順序集合の上位から配置している。
【0075】
従って、本発明では、n個のデータから構成された全順序集合を降順又は昇順に並べ替えたのちの上位のm個のデータを、高速に抽出することができる。
【図面の簡単な説明】
【図1】本発明の実施の形態のソーティング装置のブロック構成図である。
【図2】上記ソーティング装置の処理手順を示したフローチャートである。
【図3】第1のソーティング処理の具体的な処理手順を示したフローチャートである。
【図4】第2のソーティング処理の具体的な処理手順を示したフローチャートである。
【図5】MPEG−4のCELPコーダにより行われるソーティング範囲について説明をするための図である。
【符号の説明】
1 ソーティング装置、11 メモリ、12 入力部、13 出力部、14 データ処理部、15 レジスタ
【発明の属する技術分野】
本発明は、全順序集合内の要素の並べ替えを行うソーティング方法及び装置並びにソーティングプログラムに関する。
【0002】
【従来の技術】
MPEG−4では、CELP(Code Excited Liner Predictive Coding)コーダと呼ばれるスピーチコーダが採用されている。MPEG−4 CLEPでは、過去に生成した音声信号を蓄えておくコードブックを備えており、このコードブック内のデータを利用して符号化を行う。
【0003】
MPEG−4 CLEPでは、図5に示すように、コードブック内に256個のデータを有している。MPEG−4 CLEPでは、その256個のデータに対してソーティングを行い、そのうちの上位の32個のデータを抽出する処理が行われる。
【0004】
【発明が解決しようとする課題】
ところで、全順序集合の各要素を昇順又は降順に並べ替えるソーティング方法には、例えば、シェルソート、マージソート並びにクイックソート等、様々な方法がある。これら従来から知られているソーティング方法は、全順序集合の全要素の並べ替えを行うものである。
【0005】
これに対して、上述したMPEG−4 CLEPでは、コードブック内の256個の全データをソーティングした後の上位の32個のデータしか必要としていない。つまり、残りの224個のデータの並び順は、どのようになっていてもかまわない。
【0006】
しかしながら、コードブック内のデータの並べ替えにシェルソート等の従来のソーティング方法を採用した場合、256個全てのデータに対して並べ替えが行われてしまう。つまり、256個の全てのデータが昇順又は降順に並べ替えられてしまう。従って、処理時間が長くなり、また、ソーティング中に必要とするメモリ等も大きくなってしまう。
【0007】
本発明は、このような従来の実状を鑑みて提案されたものであり、n個のデータから構成された全順序集合を降順又は昇順に並べ替えたのちの上位のm個のデータを、高速に抽出することができるソーティング方法及び装置並びにソーティングプログラムを提供することを目的とする。
【0008】
【課題を解決するための手段】
本発明にかかるソーティング方法及び装置、並びにソーティングプログラムでは、n個(nは2以上の整数)のデータから構成された全順序集合の上位からm個(mは(m−1)以下の自然数)のデータに対して、降順又は昇順に並べ替えを行う第1のソーティング処理を行い、第1のソーティング処理により並べ替えをしたのちの上記全順序集合のうちの上位から(m+1)個目以降のデータを1つずつ選択していき、選択した1つのデータと全順序集合の上位からm個のデータとにより降順又は昇順の並べ替えを行う第2のソーティング処理を行う。
【0009】
本発明では、第2のソーティング処理によりデータの並べ替えがされたのちの全順序集合の上位からm個のデータが、全順序集合の全データを昇順又は降順に並べ替えた後の上位からm個のデータと一致している。つまり、本発明では、全順序集合の全データのうち大きい方の値からm個又は小さい方の値からm個のデータを抽出し、抽出したm個のデータを昇順又は降順で並べ替えをして全順序集合の上位から配置している。ただし、本発明では、第2のソーティング処理によりデータの並べ替えがされたのちの全順序集合のm+1個目以降のデータの並び順は保障されていない。
【0010】
【発明の実施の形態】
以下、本発明の実施の形態として、本発明を適用したソーティング装置について説明をする。本発明の実施の形態のソーティング装置は、例えば、MPEG−4のCELPコーダのコードブックのソーティング等に適用することができる。
【0011】
なお、以下の説明で用いる定数等は、次のように定義される。
U:複数のデータから構成される全順序集合
x[i]:全順序集合U内のインデックスiのデータ(実数値)
i:インデックス(iは0以上N以下の整数値)
n:全順序集合U内の総データ数(2以上の整数値)
m:抽出データ数(1以上n未満の任意の整数値)
N:集合Uの最下位のインデックス(N=n−1)
M:抽出データ範囲内の最下位のインデックス(M=m−1)。
【0012】
また、インデックスとは、各データに対する当該全順序集合U内における順序を示す値である。全順序集合U内の各データには、インデックスとして0からNまでの整数値が昇順でユニークに割り当てられる。最上位のインデックスは0であり、最下位のインデックスはNである。従って、例えば全順序集合U内のデータを降順でソーティングした場合、最大値のインデックスは0となり、最小値のインデックスはNとなる。
【0013】
本実施の形態のソーティング装置は、m個のデータから構成される全順序集合Uを昇順(或いは降順)に並べ替えを行う。ただし、本実施の形態のソーティング装置は、処理終了後の全順序集合Uのm個のデータの全てを正確に並べ替えたソーティングを行うのではなく、上位のm個のデータ(インデックス0〜インデックスM)の並びを保障したソーティングを行うものである。つまり、本実施の形態のソーティング装置によりソーティングが行われたのちの全順序集合Uのインデックス0〜インデックスMの各データは、全順序集合U内の全てのデータに対してソーティングをしたのちのインデックス0〜インデックスMのデータと完全一致している。しかしながら、このソーティング装置によりソーティングが行われたのちの全順序集合Uのインデックス(M+1)〜インデックスNの各データは、全順序集合U内の全てのデータを昇順(又は降順)に並べ替えをしたのちのインデックス(M+1)〜インデックスNのデータと一致するとは限らない。
【0014】
本実施の形態のソーティング装置がデータの並べ替え順序を保障するインデックスの範囲を、抽出データ範囲(インデックス0〜インデックスM)と呼び、そのデータ数を抽出データ数mという。
【0015】
図1に本発明の実施の形態のソーティング装置のブロック構成図を示す。
【0016】
ソーティング装置1は、図1に示すように、ソーティング対象となる全順序集合Uを格納するメモリ11と、全順序集合Uを外部からメモリ11へ入力する入力部12と、全順序集合Uをメモリ11から外部へ出力する出力部13と、メモリ11内の任意のインデックスiのデータx[i]の読み出し及び書き込みを行い、全順序集合Uのソーティングを行うデータ処理部14と、データ処理部14の演算用に用いられるレジスタ15とを備えている。
【0017】
このようなソーティング装置1では、外部から入力部12を介して全順序集合Uが入力され、入力された全順序集合Uがメモリ11内に格納される。データ処理部14は、所定のプログラムを起動してメモリ11内に格納されている全順序集合U内のデータのソーティングを行う。データ処理部14によりソーティングがされた後の全順序集合Uは、出力部13を介して外部へと出力される。
【0018】
データ処理部14が行うソーティング処理の内容について、図2〜図4に示すフローチャートを参照して説明をする。
【0019】
なお、ソーティング装置1では、昇順(小さい順)のソーティングにも降順(大きい順)のソーティングにも適用することができるが、以下では、降順のソーティングを行う場合の処理例について説明をする。
【0020】
また、以下の説明で用いる変数は、次のように定義されるものである。これらの変数は、例えば、レジスタ15内に格納されてデータ処理部14によりアクセスがされる。
Pm:メインポインタ:任意のインデックスを指し示す変数
Ps:サブポインタ :任意のインデックスを指し示す変数
α:任意のデータの値を格納する変数
β:任意のデータの値を格納する変数。
【0021】
図2に示すように、データ処理部14は、第1のソーティング処理(S1)を行い、その後に、第2のソーティング処理(S2)を行う。第1のソーティング処理(S1)において、データ処理部14は、全順序集合Uの抽出データ範囲(インデックス0〜M)に対して、降順のソーティングを行う。第2のソーティング処理(S2)において、データ処理部14は、第1のソーティング処理でソーティングがされなかったインデックスM+1〜Nのデータを1つずつ順番に選択していき、選択したデータと全順序集合Uのインデックス0〜Mのデータとで降順の並べ替えを行う。
【0022】
まず、第1のソーティング処理(S1)の処理例を、図3に示すフローチャートを参照して説明をする。
【0023】
第1のソーティング処理(S1)には、シェルソートやマージソート等のどのようなソーティングアルゴリズムを適用してもよいが、本例では、隣り合ったデータを比較して大小の順が逆であればそれらの要素を入れ替えていくという操作を繰り返すバブルソートを利用した処理を行っている。
【0024】
まず、ステップS11において、メインポインタPmに1を代入し、メインポインタPmを初期化する。
【0025】
ステップS11でメインポインタPmを初期化した後は、ステップS12〜ステップS21のメインループ処理を行う。
【0026】
メインループ処理(S12〜S21)では、インデックス1からインデックスMまで1つずつ順番にデータを選択していき、選択したデータ(以下、対象データと呼ぶ。)の移動先となるインデックスを決定し、そのインデックスに挿入する処理を行う。メインループ処理(S12〜S21)では、1つの対象データに対する選択及び挿入の処理を、1回のループ処理で行う。メインポインタPmは、このメインループ(S12〜S21)の処理対象となる1つの対象データのインデックスを特定するポインタとなる。なお、メインポインタPmは、メインループの最終ステップ(S21)で1ずつインクリメントされていくため、対象データは、上位インデックスから下位インデックスへ向かう方向へ、1からMまで選択されていくこととなる。
【0027】
メインループの開始ステップとなるステップS12では、Pm>Mを判断する。Pm>Mが真であれば第1のソーティング処理(S1)を終了する。Pm>Mmが偽であれば、ステップS13に進みメインループの処理を続行する。メインポインタPmは、メインループの終了ステップとなるステップS21で、値が1ずつインクリメントされる。そのため、インデックス1からMまでの全てのデータに対して選択及び挿入という処理を終えた場合には、メインポインタPmの値はMよりも大きくなる。一方、インデックス1からMまでの全てのデータに対して選択及び挿入という処理を終えていない場合には、メインポインタPmの値はM以下となる。従って、メインループの開始ステップとなるこのステップS12でメインポインタPmの値を判断すれば、第2のソーティング処理の終了判断をすることできる。
【0028】
続くステップS13では、αにx[Pm]を代入する。すなわち、メモリ11内のデータx[Pm]を読み出し、変数αに代入する。
【0029】
続くステップS14では、サブポインタPsに(Pm−1)を代入して、サブポインタPsを初期化する。つまり、サブポインタPsに、選択データx[Pm]の1つ上位のインデックスを指定する。
【0030】
ステップS14でサブポインタPsを初期化した後は、ステップS15〜ステップS19のサブループ処理を行う。
【0031】
サブループ処理(S15〜S19)では、インデックス(Pm−1)からインデックス0までのデータを順番に選択していき、選択したデータ(参照データ)と対象データ(x[Pm])との大小比較する処理を行い、対象データの移動位置となるインデックスを決定する処理を行う。サブループ処理(S15〜S19)では、1つの参照データに対する大小比較の処理を、1回のループ処理で行う。サブポインタPsは、このサブループ(S15〜S19)の処理対象となる1つの参照データのインデックスを特定するポインタとなる。なお、サブポインタPsの値は、サブループ処理の最終ステップ(S19)において、1ずつデクリメントされていくため、参照データは、下位インデックスから上位インデックスへ向かう方向へ、(Pm−1)から0まで順番に選択されていくこととなる。つまり、サブループ処理では、選択データx[Pm]より上位のインデックスのデータを、1つずつ上位に向けて選択していくこととなる。
【0032】
サブループの開始ステップとなるステップS15では、Ps≧0を判断する。Ps≧0が偽であればサブループ処理(S15〜S19)を抜けて、ステップS20に進む。Ps≧0が真であれば、サブループ処理(S15〜S19)を抜けずに、続くステップS16に進む。サブポインタPsは、サブループの終了ステップとなるステップS19で、値が1ずつデクリメントされる。そのため、インデックス(Pm−1)から0までの全てのデータを参照データとして選択し終えた場合には、サブポインタPsの値は0よりも小さくなる。一方、インデックス(Pm−1)から0までの全てのデータを参照データとして選択し終えていない場合には、サブポインタPsの値は0以上となる。従って、サブループの開始ステップとなるこのステップS15でサブポインタPsの値を判断すれば、サブループの終了判断をすることができる。
【0033】
続くステップS16では、βにx[Ps]を代入する。すなわち、メモリ11内の参照データx[Ps]の値を読み出し、変数βに代入する。
【0034】
続くステップS17では、α>βを判断する。つまり、選択データx[Pm]と参照データx[Ps]との大小比較を行う。
【0035】
ステップS17で大小比較を行った結果、α>βが真(すなわち、x[Pm]>x[Ps]が真)であれば、サブループ処理(S15〜S19)を抜けずにステップS18に進む。一方、α>βが偽(すなわち、x[Pm]>x[Ps]が偽)であれば、サブループ処理(S15〜S19)を抜けてステップS20に進む。
【0036】
ここで、参照データとして選択されるインデックス(Pm−1)からインデックス(0)までのデータは、当該第1のソーティング処理(S1)が進行していく過程上、必ず降順にデータが並んでいる。このため、このステップS17の判断でα>βが偽となれば、現在の参照データ(x[Ps])を含めてこれより上位のインデックスのデータには、対象データx[Pm]よりも大きいデータは存在しないことが保障される。また、インデックス(Pm−1)からインデックス(0)までのデータのうち、現在の参照データ(x[Ps])を含めずにこれより下位のデータは、すでにα>βが真であることがわかっているので、対象データx[Pm]よりも小さいことが保障される。つまり、α>βが偽となったときに、対象データの挿入位置がインデックス(Ps−1)に決定される。従って、このステップS17でα>βが偽となったときに、サブループ処理(S15〜S19)を抜けることができる。また、上記ステップS15でサブループ処理を抜けた場合には、インデックス(Pm−1)からインデックス(0)までの全てのデータは、対象データx[Pm]よりも小さい、ということとなるので、対象データの挿入位置は、最上位インデックスである0である。
【0037】
続くステップS18では、x[Ps+1]にβを代入する。すなわち、レジスタ15に格納されている変数βの値を、メモリ11内のデータx[Ps+1]に書き込む。つまり、ステップS17でα>βが真と判断された場合には、対象データx[Pm]が、現在の参照データx[Ps]よりも上位のインデックスに挿入されることになる。従って、現在の参照データx[Ps]のインデックスの位置を1つ下位に移動しなければならないため、このステップS18で変数βの値をx[Ps+1]に格納している。なお、サブループ処理を進行していく過程上、データx[Ps+1]の値は必ず変数α又は変数βに退避されているので、このステップS18で、変数βの値をx[Ps+1]に書き込んでも、データが消去されてしまうことはない。
【0038】
続くステップS19では、サブポインタPsの値を1つデクリメントする。つまり、このステップS19では、大小比較をするための参照データを1つ上位に移動させている。このステップS19での処理を終えると、サブループの開始ステップであるステップS15に戻り、次の参照データに対するサブループの処理を行う。
【0039】
以上のようにサブループ処理(S15〜S19)が行われる。サブループ処理が行われた結果、対象データX[Pm]の挿入位置は、インデックス(Ps−1)となることが決定される。
【0040】
続いて、ステップS20では、x[Ps+1]にαの値を代入する。すなわち、レジスタ15に格納されている変数αの値をメモリ11のデータx[Ps+1]に書き込むことによって、対象データx[Pm]をインデックス(Ps+1)に移動している。
【0041】
続いて、ステップS21では、メインポインタPmの値を1つインクリメントする。つまり、このステップS21では、選択データの位置を一つ下位に移動する。
【0042】
そして、このステップS21での処理を終えると、メインループの開始ステップであるステップS12に戻り、次の選択データに対するループ処理を行う。
【0043】
データ処理部14は、以上のステップS11〜S21の処理を行うことによって、第1のソーティング処理を完了することできる。つまり、第1のソーティング処理(S1)において、データ処理部14は、全順序集合Uの抽出データ範囲(インデックス0〜M)に対して、降順のソーティングを行うことができる。
【0044】
つぎに、第2のソーティング処理(S2)の処理例を、図4に示すフローチャートを参照して説明をする。
【0045】
第2のソーティング処理(S2)では、第1のソーティング処理でソーティングがされなかったインデックスM+1〜Nのデータを1つずつ順番に選択していき、選択したデータと、全順序集合Uのインデックス0〜Mのデータとの、全部でM+2個のデータで降順の並べ替えを行う。その並べ替えは、シェルソートやマージソート等のどのようなソーティングアルゴリズムを適用してもよいが、本例では、バブルソートを利用した処理を行っている。
【0046】
まず、ステップS31において、メインポインタPmに(M+1)を代入し、メインポインタPmを初期化する。
【0047】
ステップS11でメインポインタPmを初期化した後は、まず、ステップS32〜ステップS35及びステップS44で形成される第1ループ処理を行う。
【0048】
第1ループ(S31〜S35,S44)では、インデックス(M+1)のデータからインデックスNのデータまで順番に1つずつデータを選択していき、選択した1つのデータ(対象データ)と、抽出データ範囲(インデックス0〜M)内の最下位のデータx[M]とのデータの大小比較をする処理を行う。そして、抽出データ範囲の最下位データx[M]よりも対象データ[Pm]が大きい場合にのみ、続く第2ループ処理(S36〜S44)を行う。第2ループ(S36〜S44)では、対象データの移動先のインデックスを決定し、決定したインデックスに対象データを挿入する処理を行う。
【0049】
すなわち、第2のソーティング処理の過程上、抽出データ範囲(インデックス0〜M)のデータは必ず降順にデータが並んでいる。このため、第2のソーティング処理(S2)では、まず、第1ループで、対象データx[Pm]と、抽出データ範囲の最下位データx[M]との大小判断を行い、対象データx[Pm]が最下位データx[M]よりも大きい場合にのみ、続く第2ループ(S36〜S44)を行うようにしている。
【0050】
第1ループ(S32〜S35,S44)及び第2ループ(S36〜S44)では、1つの対象データに対する大小比較処理を1回のループ処理で行う。メインポインタPmは、第1ループ及び第2ループの処理対象となる1つの対象データのインデックスを特定するポインタとなる。なお、メインポインタPmは、第1ループ及び第2ループの最終ステップ(S44)で1ずつインクリメントされるため、対象データは、上位インデックスから下位インデックスへ向かう方向へ、(M+1)からNまで選択されていくこととなる。
【0051】
第1ループの開始ステップとなるステップS32では、Pm>Nを判断する。Pm>Nが真であれば第2のソーティング処理(S2)を終了する。Pm>Nが偽であれば、ステップS33に進み第1ループの処理を続行する。メインポインタPmは、第1ループ及び第2ループの終了ステップとなるステップS44で、値が1ずつインクリメントされる。そのため、インデックス(M+1)〜Nまでの全てのデータに対して処理を終えた場合には、メインポインタPmの値はNよりも大きくなる。一方、インデックス(M+1)〜Nまでの全てのデータに対して処理を終えていない場合には、メインポインタPmの値はN以下となる。従って、第1ループの開始ステップとなるこのステップS32でメインポインタPmの値を判断すれば、第2のソーティング処理(S2)の終了判断をすることできる。
【0052】
続くステップS33では、αにx[Pm]を代入する。すなわち、メモリ11内の対象データx[Pm]を読み出し、変数αに代入する。
【0053】
続くステップS34では、βにx[M]を代入する。すなわち、メモリ11内の抽出データ範囲の最下位データx[M]を読み出し、変数βに代入する。
【0054】
続くステップS35では、α>βを判断する。つまり、選択データx[Pm]と抽出データ範囲の最下位データx[M]との大小比較を行う。
【0055】
ステップS35で大小比較を行った結果、α>βが真(すなわち、x[Pm]>x[M]が真)であれば、ステップS36以降の第2ループに進む。一方、ステップS35で大小比較を行った結果、α>βが偽(すなわち、x[Pm]>x[M]が偽)であれば、ステップS44でメインポインタPmを1インクリメントし、ステップS32から第1ループの処理を繰り返して行う。
【0056】
第2ループの開始ステップとなるステップS36では、x[Pm]にβの値を代入する。すなわち、レジスタ15に格納されている変数βの値をメモリ11内のデータx[Pm]に書き込む。つまり、ステップS35でα>βが真と判断された場合には、対象データx[Pm]が必ず抽出データ範囲内のいずれかのインデックス位置に挿入されることとなる。従って、抽出データ範囲の最下位データx[N]を、対象データのインデックス位置に移動して、対象データの移動先を確保する。
【0057】
続くステップS37では、サブポインタPsに(M−1)を代入して、サブポインタPsを初期化する。
【0058】
ステップS37でサブポインタPsを初期化した後は、ステップS38〜ステップS42のサブループ処理を行う。
【0059】
サブループ処理(S38〜S42)では、インデックス(M−1)からインデックス0までのデータを順番に選択していき、選択したデータ(参照データ)と対象データ(x[Pm])との大小比較する処理を行い、対象データの移動位置となるインデックスを決定する処理を行う。サブループ処理(S38〜S42)では、1つの参照データに対する大小比較の処理を、1回のループ処理で行う。サブポインタPsは、このサブループ(S38〜S42)の処理対象となる1つの参照データのインデックスを特定するポインタとなる。なお、サブポインタPsは、サブループ処理の最終ステップ(S42)において、1ずつデクリメントされていくため、参照データは、下位インデックスから上位インデックスへ向かう方向へ、(M−1)から0まで選択されていくこととなる。
【0060】
サブループの開始ステップとなるステップS38では、Ps≧0を判断する。Ps≧0が偽であればサブループ処理(S38〜S42)を抜けて、ステップS43に進む。Ps≧0が真であれば、サブループ処理(S38〜S42)を抜けずに、続くステップS39に進む。サブポインタPsは、サブループの終了ステップとなるステップS42で、値が1ずつデクリメントされる。そのため、インデックス(M−1)から0までの全てのデータを参照データとして選択し終えた場合には、サブポインタPsの値は0よりも小さくなる。一方、インデックス(M−1)〜0までの全てのデータを参照データとして選択し終えていない場合には、サブポインタPsの値は0以上となる。従って、サブループの開始ステップとなるこのステップS38でサブポインタPsの値を判断すれば、サブループの終了判断をすることができる。
【0061】
続くステップS39では、βにx[Ps]を代入する。すなわち、メモリ11内の参照データx[Ps]を読み出し、変数βに代入する。
【0062】
続くステップS40では、α>βを判断する。つまり、選択データx[Pm]と参照データx[Ps]との大小比較を行う。
【0063】
ステップS40で大小比較を行った結果、α>βが真(すなわち、x[Pm]>x[Ps]が真)であれば、サブループ処理(S38〜S42)を抜けずにステップS41に進む。一方、α>βが偽(すなわち、x[Pm]>x[Ps]が偽)であれば、サブループ処理(S38〜S42)を抜けてステップS43に進む。
【0064】
続くステップS42では、x[Ps+1]にβを代入する。すなわち、レジスタ15に格納されている変数βの値をメモリ11内のデータx[Ps+1]に書き込む。つまり、ステップS40でα>βが真と判断された場合には、対象データx[Pm]が、現在の参照データx[Ps]よりも上位のインデックスに挿入されることになる。従って、参照データx[Ps]のインデックスの位置を1つ下位に移動しなければならないため、このステップS41で変数βの値をx[Ps+1]に格納している。
【0065】
続くステップS42では、サブポインタPsの値を1つデクリメントさせている。つまり、このステップS42では、大小比較をするための参照データを1つ上位に移動させている。このステップS42での処理を終えると、サブループの開始ステップであるステップS38に戻り、次の参照データに対するサブループの処理を行う。
【0066】
以上のようにサブループ処理(S38〜S42)が行われる。サブループ処理が行われた結果、対象データX[Pm]の挿入位置は、インデックス(Ps−1)となる。
【0067】
続いて、ステップS43では、x[Ps+1]にαの値を代入する。すなわち、レジスタ15に格納されている変数αをメモリ11内のx[Ps+1]に書き込むことによって、対象データx[Pm]をインデックスx[Pm+1]に移動している。
【0068】
続いて、ステップS44では、メインポインタPmの値を1つインクリメントする。つまり、このステップS44では、選択データの位置を一つ下位に移動する。
【0069】
そして、このステップS44での処理を終えると、第1ループの開始ステップであるステップS32に戻り、次の選択データに対するループ処理を行う。
【0070】
データ処理部14は、以上のステップS31〜S44の処理を行うことによって、第2のソーティング処理を完了することできる。つまり、データ処理部14は、第2のソーティング処理(S2)では、全順序集合Uの抽出データ範囲(インデックス0〜M)内のみのデータの保障を行った、降順のソーティングを行うことができる。
【0071】
以上のように本実施の形態のソーティング装置1では、第1のソーティング処理(S1)を行い、続いて、第2のソーティング処理を行うことによって、インデックス0〜インデックスMまでの並びを保障した全順序集合Uのソーティングを行うことができる。
【0072】
なお、図3及び図4のフローチャートでは、降順に並べ替える処理を例にとって説明をしたが、本実施の形態のソーティング装置1では、降順に限らず、昇順のソーティングも行うことができる。昇順のソーティングを行う場合には、ステップS17、ステップS35及びステップS40でα<βの判断を行えばよい。
【0073】
【発明の効果】
本発明にかかるソーティング方法及び装置並びにソーティングプログラムでは、第1のソーティングステップで全順序集合の上位からm個のデータに対して降順又は昇順の並べ替えを行い、第2のソーティングステップで、第1のソーティングステップにより並べ替えをしたのちの上記全順序集合のうちの上位から(m+1)個目以降のデータを1つずつ選択していき、選択した1つのデータと全順序集合の上位からm個のデータとにより降順又は昇順の並べ替えを行う。
【0074】
本発明では、第2のソーティング処理によりデータの並べ替えがされたのちの全順序集合の上位からm個のデータが、全順序集合の全データを昇順又は降順に並べ替えた後の上位からm個のデータと一致している。つまり、本発明では、全順序集合の全データのうち大きい方の値からm個又は小さい方の値からm個のデータを抽出し、抽出したm個のデータを昇順又は降順で並べ替えをして全順序集合の上位から配置している。
【0075】
従って、本発明では、n個のデータから構成された全順序集合を降順又は昇順に並べ替えたのちの上位のm個のデータを、高速に抽出することができる。
【図面の簡単な説明】
【図1】本発明の実施の形態のソーティング装置のブロック構成図である。
【図2】上記ソーティング装置の処理手順を示したフローチャートである。
【図3】第1のソーティング処理の具体的な処理手順を示したフローチャートである。
【図4】第2のソーティング処理の具体的な処理手順を示したフローチャートである。
【図5】MPEG−4のCELPコーダにより行われるソーティング範囲について説明をするための図である。
【符号の説明】
1 ソーティング装置、11 メモリ、12 入力部、13 出力部、14 データ処理部、15 レジスタ
Claims (4)
- n個(nは2以上の整数)のデータから構成された全順序集合の上位からm個(mは(n−1)以下の自然数)のデータに対して、降順又は昇順の並べ替えを行う第1のソーティングステップと、
上記第1のソーティングステップにより並べ替えをしたのちの上記全順序集合のうちの上位から(m+1)個目以降のデータを1つずつ選択していき、選択した1つのデータと全順序集合の上位からm個のデータとにより降順又は昇順の並べ替えを行う第2のソーティングステップと
を有することを特徴とするソーティング方法。 - 上記第2のソーティングステップでは、全順序集合の上位のm個のデータを下位から上位へ1つずつ順番に抽出し、抽出したデータと上記選択した1つのデータとの大小比較を行って、当該データの挿入位置を検出すること
を特徴とする請求項1記載のソーティング方法。 - n個(nは2以上の整数)のデータから構成された全順序集合の各データを格納するメモリと、
上記メモリに格納されたデータに対してデータ処理を行うデータ処理手段とを備え、
上記データ処理手段は、
n個のデータから構成された全順序集合の上位からm個(mは(n−1)以下の自然数)のデータに対して、降順又は昇順の並べ替えを行う第1のソーティング処理と、
上記第1のソーティング処理により並べ替えをしたのちの上記全順序集合のうちの上位から(m+1)個目以降のデータを1つずつ選択していき、選択した1つのデータと全順序集合の上位からm個のデータとで降順又は昇順の並べ替えを行う第2のソーティング処理と
を行うことを特徴とするソーティング装置。 - n個(nは2以上の整数)のデータから構成された全順序集合の上位からm個(mは(n−1)以下の自然数)のデータに対して、降順又は昇順の並べ替えを行う第1のソーティングステップと、
上記第1のソーティングステップにより並べ替えをしたのちの上記全順序集合のうちの上位から(m+1)個目以降のデータを1つずつ選択していき、選択した1つのデータと全順序集合の上位からm個のデータとで降順又は昇順の並べ替えを行う第2のソーティングステップと
を有することを特徴とするソーティングプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002299331A JP2004133301A (ja) | 2002-10-11 | 2002-10-11 | ソーティング方法及び装置並びにソーティングプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002299331A JP2004133301A (ja) | 2002-10-11 | 2002-10-11 | ソーティング方法及び装置並びにソーティングプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004133301A true JP2004133301A (ja) | 2004-04-30 |
Family
ID=32288499
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002299331A Withdrawn JP2004133301A (ja) | 2002-10-11 | 2002-10-11 | ソーティング方法及び装置並びにソーティングプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004133301A (ja) |
-
2002
- 2002-10-11 JP JP2002299331A patent/JP2004133301A/ja not_active Withdrawn
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6215906B1 (en) | Data compression and restoration system for encoding an input character on the basis of a conditional appearance rate obtained in relation to an immediately preceding character string | |
US8095526B2 (en) | Efficient retrieval of variable-length character string data | |
EP0944093A1 (en) | Contents addressable memory circuit for retrieval operation in units of data blocks | |
WO2006070925A1 (en) | Device and data method for selective compression and decompression and data format for compressed data | |
JPH06243009A (ja) | 全テキストインデックスを圧縮する方法 | |
KR19990077006A (ko) | 유전자 프로그래밍방법 및 시스템 | |
JP2011066557A (ja) | データ処理装置およびデータ処理方法 | |
EP3826000B1 (en) | Automatic preparation of a new midi file | |
CN111444076B (zh) | 基于机器学习模型的测试用例步骤的推荐方法和装置 | |
US9372887B2 (en) | Compression ratio improvement by lazy match evaluation on the string search CAM | |
JP4079965B2 (ja) | 復号化システム | |
US7256715B1 (en) | Data compression using dummy codes | |
US6708168B2 (en) | Method and apparatus for searching a data stream for character patterns | |
JP2004133301A (ja) | ソーティング方法及び装置並びにソーティングプログラム | |
JPS61210478A (ja) | ベクトル処理装置 | |
JP3534471B2 (ja) | マージソート方法及びマージソート装置 | |
JP2010092088A (ja) | 順位付け装置、順位付け方法及びプログラム | |
JP4347086B2 (ja) | パターンマッチング装置および方法ならびにプログラム | |
CN117689011B (zh) | 一种模型调整方法、装置、设备及存储介质 | |
KR102308416B1 (ko) | 동영상 코덱 판별 방법 및 장치 | |
JP2007274051A (ja) | バイト列探索器及び探索方法 | |
EP1115056B1 (en) | Method and circuits for performing a quick search of the minimum/maximum value among a set of numbers | |
JP2005175940A (ja) | データ圧縮装置 | |
JPH06326876A (ja) | 予測符号化方式の画情報の処理方法 | |
EP0645697B1 (en) | Minimum shift data arranging method and apparatus |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20060110 |