(57)【要約】      （修正有）【課題】複数種類のデータを種類に基づきソートした結果を格納する処理を、データ格納領域の使用量を抑えつつ実行する。【解決手段】本格納方法は、複数種類のデータを含む対象データにおける、複数種類それぞれのデータの数と、複数種類の順序とに基づき、複数種類それぞれについて、格納位置の情報をデータ格納領域内の管理領域に格納し、対象データに含まれるデータの入力に応じ、入力データの格納位置を、入力データの種類に基づき管理領域から特定し、特定された格納位置に他のデータが格納されていない場合、特定された格納位置に入力データを格納し、特定された格納位置に他のデータが格納されている場合、他のデータの種類の順番と入力データの種類の順番との比較に基づき、入力データを、管理領域のうち入力データの種類に対応する格納位置の情報が格納された位置、または、特定された格納位置に格納する処理を含む。【選択図】図１３
2018132900.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
複数種類のデータを含む対象データにおける、前記複数種類それぞれのデータの数と、前記複数種類の順序とに基づき、前記複数種類それぞれについて、格納位置の情報をデータ格納領域内の管理領域に格納し、
前記対象データに含まれるデータの入力に応じ、入力データの格納位置を、前記入力データの種類に基づき前記管理領域から特定し、
特定された前記格納位置に他のデータが格納されていない場合、特定された前記格納位置に前記入力データを格納し、
特定された前記格納位置に他のデータが格納されている場合、前記他のデータの種類の順番と前記入力データの種類の順番との比較に基づき、前記入力データを、前記管理領域のうち前記入力データの種類に対応する格納位置の情報が格納された位置、または、特定された前記格納位置に格納する、
処理を実行させる格納プログラム。
【請求項２】
特定された前記格納位置に前記他のデータが格納されている場合に前記入力データを格納する処理において、
特定された前記格納位置に前記他のデータが格納されており、且つ、前記他のデータの種類の順番が前記入力データの種類の順番より前である場合、特定された前記格納位置に前記入力データを格納し、
特定された前記格納位置に前記他のデータが格納されており、且つ、前記他のデータの種類の順番が前記入力データの種類の順番より後である場合、前記管理領域のうち前記入力データの種類に対応する格納位置の情報が格納された位置に、前記入力データを格納する、
請求項１記載の格納プログラム。
【請求項３】
前記コンピュータに、
前記管理領域に格納された、前記入力データの種類に対応する格納位置の情報を更新する、
処理をさらに実行させる請求項１又は２記載の格納プログラム。
【請求項４】
前記コンピュータに、
特定された前記格納位置に前記他のデータが格納されており、且つ、前記他のデータの種類の順番が前記入力データの種類の順番より前である場合、前記管理領域のうち、前記他のデータの種類に対応する格納位置の情報が格納された位置に、前記他のデータを格納する、
処理をさらに実行させる請求項２記載の格納プログラム。
【請求項５】
前記コンピュータに、
前記対象データに含まれるデータの入力が完了した場合、前記管理領域に格納されたデータと、前記データ格納領域のうち前記管理領域以外の領域に格納されたデータとを、種類毎に入力順に並ぶように並べ替える、
処理をさらに実行させる請求項１乃至４のいずれか１つ記載の格納プログラム。
【請求項６】
前記データ格納領域に含まれる格納位置の数は、前記複数種類それぞれのデータの数の総和に等しい、
請求項１乃至５のいずれか１つ記載の格納プログラム。
【請求項７】
コンピュータが、
複数種類のデータを含む対象データにおける、前記複数種類それぞれのデータの数と、前記複数種類の順序とに基づき、前記複数種類それぞれについて、格納位置の情報をデータ格納領域内の管理領域に格納し、
前記対象データに含まれるデータの入力に応じ、入力データの格納位置を、前記入力データの種類に基づき前記管理領域から特定し、
特定された前記格納位置に他のデータが格納されていない場合、特定された前記格納位置に前記入力データを格納し、
特定された前記格納位置に他のデータが格納されている場合、前記他のデータの種類の順番と前記入力データの種類の順番との比較の結果に基づき、前記入力データを、前記管理領域のうち前記入力データの種類に対応する格納位置の情報が格納された位置、または、特定された前記格納位置に格納する、
処理を実行する格納方法。
【請求項８】
複数種類のデータを含む対象データにおける、前記複数種類それぞれのデータの数と、前記複数種類の順序とに基づき、前記複数種類それぞれについて、格納位置の情報をデータ格納領域内の管理領域に格納する第１処理部と、
前記対象データに含まれるデータの入力に応じ、入力データの格納位置を、前記入力データの種類に基づき前記管理領域から特定し、特定された前記格納位置に他のデータが格納されていない場合、特定された前記格納位置に前記入力データを格納し、特定された前記格納位置に他のデータが格納されている場合、前記他のデータの種類の順番と前記入力データの種類の順番との比較に基づき、前記入力データを、前記管理領域のうち前記入力データの種類に対応する格納位置の情報が格納された位置、または、特定された前記格納位置に格納する第２処理部と、
を有する格納装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの格納技術に関する。
【背景技術】
【０００２】
複数種類のデータを種類毎にソートして格納する場合、データ自体を格納する領域とは別に、ソートの実行中に参照される情報を格納した記憶領域（以下、管理領域と呼ぶ）を使用することがある。
【０００３】
しかし、特に大量のデータを対象として処理を実行する場合、データ自体を格納する領域だけでなく管理領域をも用意することでシステムの記憶領域が占有され、他の処理の実行に影響を与えることがある。また、使用できる物理リソースが限られたシステム（例えば組み込みシステム）の場合、記憶領域の不足により処理を実行できないことがある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１１−１６７５０８号公報
【非特許文献】
【０００５】
【非特許文献１】Bing-Chao Huang、Michael A. Langston、"Fast Stable Merging and Sorting in Constant Extra Space"、The Computer Journal、Oxford University Press、平成４年１２月１日、第３５巻、第６号、ｐｐ．６４３−６５０
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、１つの側面では、複数種類のデータを種類に基づきソートした結果を格納する処理を、データ格納領域の使用量を抑えつつ実行する技術を提供することである。
【課題を解決するための手段】
【０００７】
一態様に係る格納方法は、複数種類のデータを含む対象データにおける、複数種類それぞれのデータの数と、複数種類の順序とに基づき、複数種類それぞれについて、格納位置の情報をデータ格納領域内の管理領域に格納し、対象データに含まれるデータの入力に応じ、入力データの格納位置を、入力データの種類に基づき管理領域から特定し、特定された格納位置に他のデータが格納されていない場合、特定された格納位置に入力データを格納し、特定された格納位置に他のデータが格納されている場合、他のデータの種類の順番と入力データの種類の順番との比較に基づき、入力データを、管理領域のうち入力データの種類に対応する格納位置の情報が格納された位置、または、特定された格納位置に格納する処理を含む。
【発明の効果】
【０００８】
１つの側面では、複数種類のデータを種類に基づきソートした結果を格納する処理を、データ格納領域の使用量を抑えつつ実行することができるようになる。
【図面の簡単な説明】
【０００９】
【図１】図１は、入力されるデータをキー毎にソートしてデータ格納領域に格納する処理を説明するための図である。
【図２】図２は、データ格納領域にポインタが格納される場合について説明するための図である。
【図３】図３は、データを種類毎にソートして格納する第１の方法を説明するための図である。
【図４】図４は、データを種類毎にソートして格納する第１の方法を説明するための図である。
【図５】図５は、データを種類毎にソートして格納する第１の方法を説明するための図である。
【図６】図６は、データを種類毎にソートして格納する第２の方法を説明するための図である。
【図７】図７は、データを種類毎にソートして格納する第２の方法を説明するための図である。
【図８】図８は、データを種類毎にソートして格納する第３の方法を説明するための図である。
【図９】図９は、データを種類毎にソートして格納する第３の方法を説明するための図である。
【図１０】図１０は、データを種類毎にソートして格納する第３の方法を説明するための図である。
【図１１】図１１は、データを種類毎にソートして格納する第３の方法を説明するための図である。
【図１２】図１２は、データを種類毎にソートして格納する第３の方法を説明するための図である。
【図１３】図１３は、情報処理装置の機能ブロック図である。
【図１４】図１４は、本実施の形態の概要を説明するための図である。
【図１５】図１５は、本実施の形態の概要を説明するための図である。
【図１６】図１６は、本実施の形態の概要を説明するための図である。
【図１７】図１７は、本実施の形態の概要を説明するための図である。
【図１８】図１８は、本実施の形態の概要を説明するための図である。
【図１９】図１９は、本実施の形態の概要を説明するための図である。
【図２０】図２０は、本実施の形態の概要を説明するための図である。
【図２１】図２１は、本実施の形態の概要を説明するための図である。
【図２２】図２２は、本実施の形態の概要を説明するための図である。
【図２３】図２３は、本実施の形態の概要を説明するための図である。
【図２４】図２４は、本実施の形態の概要を説明するための図である。
【図２５】図２５は、本実施の形態の概要を説明するための図である。
【図２６】図２６は、メインの処理フローを示す図である。
【図２７】図２７は、先頭特定処理の処理フローを示す図である。
【図２８】図２８は、データ格納領域に格納されるポインタを示す図である。
【図２９】図２９は、データ格納処理の処理フローを示す図である。
【図３０】図３０は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１０】
以下では、入力されるデータ値をキー毎にソートしてデータ格納領域に格納することを考える。例えば図１に示すように、キーが「ａ」であるデータ値をデータ格納領域のうち「ａ」用の領域に入力順で格納し、キーが「ｂ」であるデータ値をデータ格納領域のうち「ｂ」用の領域に入力順で格納し、キーが「ｃ」であるデータ値をデータ格納領域のうち「ｃ」用の領域に入力順で格納する。また、複数のキーには順序が予め定められており、キー「ａ」はキー「ｂ」よりも順番が先である（言い換えると、図１においてキー「ａ」のデータ値はキー「ｂ」のデータ値より左に格納される）。また、キー「ｂ」はキー「ｃ」よりも順番が先である（言い換えると、図１においてキー「ｂ」のデータ値はキー「ｃ」のデータ値より左に格納される）。本実施の形態において、データ値の「キー」はデータ値の「種類」と同義である。
【００１１】
このようにデータ値を格納しておけば、後の処理（例えば、データマイニングおよび検索など）を高速で実行することができるようになる。
【００１２】
但し、以下の条件が成立するとする。
（１）各キーについてデータ値の分布（データ値の数のこと。以下、ｋｎと表す）は予め判明している。
（２）データ値は１つずつ入力される。
（３）データ値はデータ格納領域にキー毎にソートされ格納される。
（４）各キーについて、データ値は入力順に格納される。
【００１３】
図１の例の場合、ａの分布は「４」であり、ｂの分布は「４」であり、ｃの分布は「２」である。従って、１０個のデータ値を格納可能なデータ格納領域を確保すれば、データ値を過不足なく格納することができる。
【００１４】
なお、データ格納領域にはデータ値を直接格納してもよいが、図２に示すように、データ値へのポインタを格納してもよい。すなわち、データ値そのものは別の格納領域に保存されており、データ格納領域に格納されたポインタに基づいてデータ値に対してアクセスしてもよい。以下では、説明を簡単にするため、特に断らない限りデータ値がデータ格納領域に格納されるものとして説明を行う。
【００１５】
図３乃至図５を用いて、図１を用いて説明した格納処理を実行するための第１の方法について説明する。
【００１６】
図３に示すように、第１の方法においては、各キーのデータ値が次に格納される位置を示すポインタを格納する管理領域が、データ格納領域とは別に設けられる。図３においては、キーが「ａ」であるデータ値が格納位置「１」（以下、Ｘ[１]というように表す）に格納され、キーが「ｂ」であるデータ値がＸ[４]に格納され、キーが「ｃ」であるデータ値がＸ[８]に格納される。管理領域に格納されるポインタの初期値は、各キーについての先頭位置を示す。管理領域に格納されるポインタの数は、キー数と同じである。
【００１７】
図４に示すように、データ値「ａ１」が入力された場合、管理領域に格納された、キー「ａ」についてのポインタが示すＸ[１]に、データ値「ａ１」が格納される。
【００１８】
そして、図５に示すように、管理領域に格納された、キー「ａ」についてのポインタは、Ｘ[２]を示すように更新される。
【００１９】
第１の方法によれば、入力されるデータ値をキー毎にソートして格納する処理を実現することができる。しかし、キーの数が増えるにしたがって管理領域のサイズが大きくなるので、データ値の種類数が多いケースには適していない。
【００２０】
図６及び図７を用いて、図１を用いて説明した格納処理を実行するための第２の方法について説明する。
【００２１】
図６に示すように、第２の方法においては、各キーのデータ値が次に格納される位置を示すポインタを格納する管理領域が、データ格納領域内に設けられる。図６においては、キーが「ａ」であるデータ値がＸ[１]に格納され、キーが「ｂ」であるデータ値がＸ[４]に格納され、キーが「ｃ」であるデータ値がＸ[８]に格納される。
【００２２】
第２の方法においては、後の処理で使用されるポインタが、入力されたデータ値で上書きされてしまうことがある。例えば、図７に示すように、初期状態においてデータ値「ｃ１」が入力された場合、Ｘ[８]に格納されている、キー「ｂ」についてのポインタが、データ値「ｃ１」によって上書きされる。従って、キーが「ｂ」であるデータ値を格納することができなくなる。
【００２３】
図８乃至図１２を用いて、図１を用いて説明した格納処理を実行するための第３の方法について説明する。
【００２４】
図８に示すように、第３の方法においては、各キーのデータ値が次に格納される位置を示すポインタを格納する管理領域が、データ格納領域内に設けられる。第３の方法においては、各キーについて（ｋｎ−１）を求め、（ｋｎ−１）個のデータ値をソートして格納した場合の先頭位置を示すポインタを管理領域に格納する。図８においては、キーが「ａ」であるデータ値がＸ[１]に格納され、キーが「ｂ」であるデータ値がＸ[３]に格納され、キーが「ｃ」であるデータ値がＸ[６]に格納される。
【００２５】
格納処理は、基本的には第２の方法と同じように進行する。例えば図９に示した状態においてデータ値「ａ２」が入力された場合、管理領域に格納された、キー「ａ」についてのポインタが示すＸ[２]に、データ値「ａ２」が格納される。
【００２６】
そして、図１０に示すように、管理領域に格納された、キー「ａ」についてのポインタは、Ｘ[３]を示すように更新される。
【００２７】
さらに、図１１に示すように、データ値「ａ３」が入力された場合、管理領域に格納された、キー「ａ」についてのポインタが示すＸ[３]に、データ値「ａ３」が格納される。
【００２８】
しかし、第３の方法によっては、各キーの最後のデータ値又は最初のデータ値は上書きされ、全データ値を格納することができない。
【００２９】
以上のように、第１乃至３の方法によっては、データ値を適切に格納することができない。そこで本実施の形態においては、以下で説明するような方法によってデータ値を格納する。
【００３０】
図１３に、本実施の形態の情報処理装置１の機能ブロック図を示す。情報処理装置１は、先頭特定部１０１と、格納処理部１０３と、並び替え部１０５と、入力データ格納部１１１と、データ格納部１１３と、出力データ格納部１１５とを含む。先頭特定部１０１、格納処理部１０３及び並び替え部１０５は、図３０に示したメモリ２５０１にロードされたプログラムが図３０に示したＣＰＵ（Central Processing Unit）２５０３によって実行されることで実現される。データ格納部１１３は、メモリ２５０１に設けられる。入力データ格納部１１１及び出力データ格納部１１５は、メモリ２５０１又は図３０に示したＨＤＤ（Hard Disk Drive）２５０５に設けられる。
【００３１】
先頭特定部１０１は、入力データ格納部１１１に格納されたデータに基づき、各キーについて先頭位置を特定する処理を実行する。格納処理部１０３は、入力データ格納部１１１に格納された入力データを、先頭特定部１０１による処理の結果に基づきデータ格納部１１３に格納する。データ格納部１１３には、管理領域を含むデータ格納領域が含まれる。並び替え部１０５は、データ格納部１１３に格納されているデータに基づき処理を実行し、処理結果を出力データ格納部１１５に格納する。
【００３２】
次に、図１４乃至図２５を用いて、本実施の形態の概要を説明する。ここでは、最終的に図１４（ａ）に示すようにデータ値をデータ格納領域に格納する。すなわち、Ｘ[１]にデータ値「ａ１」を格納し、Ｘ[２]にデータ値「ａ２」を格納し、Ｘ[３]にデータ値「ａ３」を格納し、Ｘ[４]にデータ値「ｂ１」を格納し、Ｘ[５]にデータ値「ｂ２」を格納し、Ｘ[６]にデータ値「ｂ３」を格納し、Ｘ[７]にデータ値「ｂ４」を格納し、Ｘ[８]にデータ値「ｃ１」を格納し、Ｘ[９]にデータ値「ｃ２」を格納する。キーが「ａ」であるデータ値の数は３であり、キーが「ｂ」であるデータ値の数は「４」であり、キーが「ｃ」であるデータ値の数は２である。
【００３３】
但し、本実施の形態においては、第３の方法と同様に、各キーについて（ｋｎ−１）を求め、（ｋｎ−１）個のデータ値をソートして格納した場合の先頭位置を示すポインタを管理領域に格納する。ここで、Ｘ[３]及びＸ[６]に着目する。第３の方法を実行する場合には、図１４（ｂ）に示すように、Ｘ[３]にはデータ値「ａ３」及びデータ値「ｂ１」のいずれかが格納され、Ｘ[６]にはデータ値「ｂ４」及びデータ値「ｃ１」のいずれかが格納される。
【００３４】
従って、ポインタが示す格納位置Ｘ[ｉ]（１≦ｉ≦９）に既にデータ値が格納されている場合、入力されたデータ値とＸ[ｉ]に格納されているデータ値とのいずれかは、対応するキー（キー「ｋ」とする）の最後のデータ値であり、且つ、もう一方のデータ値は、キー「ｋ」の次の順番のキーの最初のデータ値である。この性質を性質（１）とする。
【００３５】
また、或るキーの最後のデータ値が格納された場合、管理領域のうちそのキーについてのポインタを格納する領域は、その後の処理において参照されない。この性質を性質（２）とする。
【００３６】
これらの性質（１）及び性質（２）を踏まえ、本実施の形態においては、ポインタが示す格納位置Ｘ[ｉ]に既にデータ値が格納されている場合、そのデータ値と入力されるデータ値とのうち最後のデータ値を特定する。そして、特定したデータ値を、管理領域のうちそのデータ値のキーについてのポインタを格納する領域（すなわち、その後の処理において参照されない領域）に格納する。
【００３７】
これにより、データ格納領域以外の追加領域を用いることなく且つデータ値を上書することなく、データ値をキー毎にソートして格納することが可能になる。
【００３８】
図１５乃至図２５を用いて、本実施の形態の処理をより具体的に説明する。まず、図１５に示すように、データ格納領域内の管理領域に、各キーについてのポインタが格納される。具体的には、各キーの（ｋｎ−１）に基づき、キー「ａ」についてはＸ[１]を示すポインタが格納され、キー「ｂ」についてはＸ[３]を示すポインタが格納され、キー「ｃ」についてはＸ[６]を示すポインタが格納される。
【００３９】
図１６に示すように、入力されたデータ値が「ｂ１」である場合、キー「ｂ」についてのポインタが示すＸ[３]に、データ値「ｂ１」が格納される。そして、図１７に示すように、キー「ｂ」についてのポインタが、Ｘ[４]を示すように更新される。
【００４０】
図１８に示すように、データ値「ｂ２」、データ値「ａ１」、データ値「ｂ３」、データ値「ｂ４」及びデータ値「ａ２」が順に入力されたとする。この場合、それぞれのデータ値を格納することで、キー「ａ」についてのポインタはＸ[３]を示すように更新され、キー「ｂ」についてのポインタはＸ[７]を示すように更新される。キー「ｃ」についてのポインタはＸ[６]のままである。
【００４１】
図１９に示すように、次に入力されたデータ値が「ａ３」である場合、キー「ａ」についてのポインタが示すＸ[３]には既にデータ値「ｂ１」が格納されている。この場合、図２０に示すように、キー「ａ」の最後のデータ値である「ａ３」が、管理領域のうちキー「ａ」についてのポインタを格納する領域に格納される。
【００４２】
図２１に示すように、次に入力されたデータ値が「ｃ１」である場合、キー「ｃ」についてのポインタが示すＸ[６]には既にデータ値「ｂ４」が格納されている。この場合、図２２に示すように、キー「ｂ」の最後のデータ値である「ｂ４」が、管理領域のうちキー「ｂ」についてのポインタを格納する領域に移動される。そして、データ値「ｃ１」は、キー「ｃ」についてのポインタが示すＸ[６]に格納され、キー「ｃ」についてのポインタが、Ｘ[７]を示すように更新される。
【００４３】
図２３に示すように、最後に入力されたデータ値が「ｃ２」である場合、キー「ｃ」についてのポインタが示すＸ[７]には既にデータ値「ａ３」が格納されている。ここで、「７」は（ｋｎ−１）の総和である６より大きいので、図２４に示すように、データ値「ｃ２」は管理領域のうちキー「ｃ」についてのポインタを格納する領域に格納される。
【００４４】
ここまでの処理により、図２５（ａ）に示すようにデータ値が格納されるが、データ値を並べ替えることで、図２５（ｂ）に示すようにデータ値を格納することができる。並び替えは、例えば、非特許文献１に開示された「安定マージ」に従って行えばよい。「安定マージ」により、データ格納領域のうち管理領域以外の領域に格納されたデータ値と、管理領域に格納されたデータ値とを、記憶領域の使用量を抑制しつつ並び替えることができる。なお、安定マージとは、配列Ｙ１が配列Ｙ２よりも左側にあり、且つ、同一キーのデータ値である「ａ１」及び「ａ２」がＹ１及びＹ２それぞれに含まれる場合、「ａ１」は「ａ２」よりも左側に保存されることが保証されることである。
【００４５】
以下では、情報処理装置１が実行する処理をより詳細に説明する。前提として、入力データ格納部１１１には、各キーについての分布（以下、Ｃ[ｋ]（ｋ＝１，２，．．．，σ）とする。σはキーの数であって２以上の自然数）の情報が格納されているとする。また、以下では、データ格納領域のＸ[i]にデータ値へのポインタが格納されるとする。
【００４６】
まず、先頭特定部１０１は、先頭特定処理を実行する（図２６：ステップＳ１）。先頭特定処理については、図２７及び図２８を用いて説明する。
【００４７】
先頭特定部１０１は、先頭を表す変数ｈに１を設定する（図２７：ステップＳ１１）。
【００４８】
先頭特定部１０１は、キーの識別番号であるｋを１に設定する（ステップＳ１３）。上で述べたように、本実施の形態においては複数のキーの順序が予め定められており、例えばキー「ａ」の順番がキー「ｂ」の順番より先である場合、キー「ａ」の識別番号はキー「ｂ」の識別番号より小さい。
【００４９】
先頭特定部１０１は、分布を表す変数ｎｕｍにＣ［ｋ］の値を設定する（ステップＳ１５）。
【００５０】
先頭特定部１０１は、Ｃ[ｋ]にｈの値を設定する（ステップＳ１７）。この処理により、Ｃ[ｋ]は識別番号が「ｋ」であるキーについての先頭位置を表すポインタになるので、先頭特定部１０１は、Ｃ[ｋ]を管理領域に格納する。
【００５１】
先頭特定部１０１は、ｈに（ｈ＋ｎｕｍ−１）を設定する（ステップＳ１９）。この処理により、ｈは次のキーについての先頭位置を表すポインタになる。
【００５２】
先頭特定部１０１は、ｋを１インクリメントする（ステップＳ２１）。
【００５３】
先頭特定部１０１は、ｋ＞σが成立するか判定する（ステップＳ２３）。
【００５４】
ｋ＞σが成立しない場合（ステップＳ２３：Ｎｏルート）、先頭特定部１０１が次のｋについて処理するため、処理はステップＳ１５に戻る。一方、ｋ＞σが成立する場合（ステップＳ２３：Ｙｅｓルート）、処理は呼び出し元に戻る。
【００５５】
以上のような処理を実行すれば、データ格納領域のうち管理領域には、図２８（ａ）に示すようにポインタが設定される。すなわち、識別番号が「１」であるキーから識別番号が「σ」であるキーまでについて、先頭位置を表すポインタが格納される。
【００５６】
図２６の説明に戻り、格納処理部１０３は、データ格納処理を実行する（ステップＳ３）。データ格納処理については、図２９を用いて説明する。ここでは、各データ値へのポインタが入力データ格納部１１１に格納されているとする。なお、本ステップは各ポインタについて実行されるが、説明を簡単にするため、１つのポインタｐについての処理を説明する。
【００５７】
格納処理部１０３は、データ値へのポインタｐを入力データ格納部１１１から１つ読み出す。そして、格納処理部１０３は、格納位置を表す識別番号である変数ｉにＣ[ｋｅｙ(ｐ)]を設定する（ステップＳ３３）。ｋｅｙ(ｐ)は、ポインタｐが示すデータ値のキーの識別番号である。
【００５８】
格納処理部１０３は、Ｘ[ｉ]が空である（すなわち、Ｘ[ｉ]に値が設定されていない）か判定する（ステップＳ３５）。
【００５９】
Ｘ[ｉ]が空である場合（ステップＳ３５：Ｙｅｓルート）、別のデータ値へのポインタがＸ[ｉ]の領域に格納されていない。従って、格納処理部１０３は、Ｘ[ｉ]にｐを設定する（ステップＳ３７）。
【００６０】
格納処理部１０３は、Ｃ[ｋｅｙ(ｐ)]に、Ｃ[ｋｅｙ(ｐ)]＋１を設定する（ステップＳ３９）。すなわち、格納処理部１０３は、ｋｅｙ(ｐ)についてのポインタを、隣接する領域を示すように更新する。
【００６１】
一方、Ｘ[ｉ]が空ではない場合（ステップＳ３５：Ｙｅｓルート）、別のデータ値へのポインタがＸ[ｉ]の領域に格納されている。従って、格納処理部１０３は、別のデータ値へのポインタを表す変数ｓにＸ[ｉ]を設定する（ステップＳ４１）。
【００６２】
格納処理部１０３は、ｉ＞Ｍが成立するか判定する（ステップＳ４３）。Ｍは、（ｋｎ−１）の総和（例えば図１５乃至図２５の例であれば６）である。
【００６３】
ｉ＞Ｍが成立する場合（ステップＳ４３：Ｙｅｓルート）、ポインタｐは最後に読み出されたポインタである。従って、格納処理部１０３は、Ｃ[ｋｅｙ(ｐ)]にポインタｐを設定する（ステップＳ４５）。
【００６４】
一方、ｉ＞Ｍが成立しない場合（ステップＳ４３：Ｎｏルート）、ポインタｐは最後に読み出されたポインタではない。従って、格納処理部１０３は、ｋｅｙ(ｓ)＞ｋｅｙ(ｐ)が成立するか判定する（ステップＳ４７）。すなわち、格納処理部１０３は、ｋｅｙ(ｓ)の順番がｋｅｙ(ｐ)の順番より後であるか判定する。
【００６５】
ｋｅｙ(ｓ)＞ｋｅｙ(ｐ)が成立する場合（ステップＳ４７：Ｙｅｓルート）、ｋｅｙ(ｓ)の順番がｋｅｙ(ｐ)の順番より後である。従って、処理はステップＳ４５に移行する。
【００６６】
ｋｅｙ(ｓ)＞ｋｅｙ(ｐ)が成立しない場合（ステップＳ４７：Ｎｏルート）、ｋｅｙ(ｓ)の順番がｋｅｙ(ｐ)の順番より前である。従って、格納処理部１０３は、Ｘ[ｉ]にｐを設定する（ステップＳ４９）。
【００６７】
格納処理部１０３は、Ｃ[ｋｅｙ(ｓ)]にポインタｓを設定する（ステップＳ５１）。
【００６８】
格納処理部１０３は、Ｃ[ｋｅｙ(ｐ)]に、Ｃ[ｋｅｙ(ｐ)]＋１を設定する（ステップＳ５３）。すなわち、格納処理部１０３は、ｋｅｙ(ｐ)についてのポインタを、隣接する領域を示すように更新する。そして処理は呼び出し元に戻る。
【００６９】
以上のような処理を実行すれば、データ格納領域には、図２８（ｂ）に示すようにポインタが設定される。すなわち、データ格納領域にはｎ個のポインタが格納される。ｎはデータ値の総数である。
【００７０】
図２６の説明に戻り、並び替え部１０５は、データ格納領域に格納されたポインタを並び替えることで出力データを生成し（ステップＳ５）、出力データを出力データ格納部１１５に格納する。上で述べたように、ステップＳ５においては、例えば「安定マージ」によって並び替えが行われる。そして処理は終了する。
【００７１】
以上のような処理を実行すれば、複数種類のデータを種類に基づきソートした結果を格納する処理を、データ格納領域の使用量を抑えつつ実行することができるようになる。これにより、ソート処理等の実行が原因で他の処理の性能が劣化することを抑制できるようになる。
【００７２】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した情報処理装置１の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【００７３】
また、上で説明したデータ構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【００７４】
なお、上で述べた例では各データ値へのポインタｐが入力データから読み出されているが、格納処理部１０３がポインタｐの入力をユーザ等から順次受け付けてもよいし、情報処理装置１がポインタｐを他の装置から順次受信するようにしてもよい。
【００７５】
なお、上で述べた情報処理装置１は、コンピュータ装置であって、図３０に示すように、メモリ２５０１とＣＰＵ２５０３とＨＤＤ２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００７６】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【００７７】
本実施の形態の第１の態様に係る格納方法は、（Ａ）複数種類のデータを含む対象データにおける、複数種類それぞれのデータの数と、複数種類の順序とに基づき、複数種類それぞれについて、格納位置の情報をデータ格納領域内の管理領域に格納し、（Ｂ）対象データに含まれるデータの入力に応じ、入力データの格納位置を、入力データの種類に基づき管理領域から特定し、（Ｃ）特定された格納位置に他のデータが格納されていない場合、特定された格納位置に入力データを格納し、（Ｄ）特定された格納位置に他のデータが格納されている場合、他のデータの種類の順番と入力データの種類の順番との比較に基づき、入力データを、管理領域のうち入力データの種類に対応する格納位置の情報が格納された位置、または、特定された格納位置に格納する処理を含む。
【００７８】
順次入力される複数種類のデータを種類に基づきソートして格納する処理を、データ格納領域の使用量を抑えつつ実行することができるようになる。
【００７９】
また、特定された格納位置に他のデータが格納されている場合に入力データを格納する処理において、（ｄ１）特定された格納位置に他のデータが格納されており、且つ、他のデータの種類の順番が入力データの種類の順番より前である場合、特定された格納位置に入力データを格納し、（ｄ２）特定された格納位置に他のデータが格納されており、且つ、他のデータの種類の順番が入力データの種類の順番より後である場合、管理領域のうち入力データの種類に対応する格納位置の情報が格納された位置に、入力データを格納してもよい。
【００８０】
また、本格納方法は、（Ｅ）管理領域に格納された、入力データの種類に対応する格納位置の情報を更新する処理をさらに含んでもよい。
【００８１】
このようにすれば、次に入力されるデータを適切な位置に格納することができるようになる。
【００８２】
また、本格納方法は、（Ｆ）特定された格納位置に他のデータが格納されており、且つ、他のデータの種類の順番が入力データの種類の順番より前である場合、管理領域のうち、他のデータの種類に対応する格納位置の情報が格納された位置に、他のデータを格納する処理をさらに含んでもよい。
【００８３】
このようにすれば、特定された格納位置に元々格納されていた他のデータが書き換えにより消去されてしまうことがなくなる。
【００８４】
また、本格納方法は、（Ｇ）対象データに含まれるデータの入力が完了した場合、管理領域に格納されたデータと、データ格納領域のうち管理領域以外の領域に格納されたデータとを、種類毎に入力順に並ぶように並べ替える処理をさらに含んでもよい。
【００８５】
格納後の状態が適切な状態ではない場合においても、適切な状態に是正することができるようになる。
【００８６】
また、データ格納領域に含まれる格納位置の数は、複数種類それぞれのデータの数の総和に等しくてもよい。
【００８７】
このようにすれば、使用する領域を最小限にすることができるようになる。
【００８８】
本実施の形態の第２の態様に係る格納装置は、（Ｈ）複数種類のデータを含む対象データにおける、複数種類それぞれのデータの数と、複数種類の順序とに基づき、複数種類それぞれについて、格納位置の情報をデータ格納領域内の管理領域に格納する第１処理部（例えば、先頭特定部１０１）と、（Ｉ）対象データに含まれるデータの入力に応じ、入力データの格納位置を、入力データの種類に基づき管理領域から特定し、特定された格納位置に他のデータが格納されていない場合、特定された格納位置に入力データを格納し、特定された格納位置に他のデータが格納されている場合、他のデータの種類の順番と入力データの種類の順番との比較に基づき、入力データを、管理領域のうち入力データの種類に対応する格納位置の情報が格納された位置、または、特定された格納位置に格納する第２処理部（例えば、格納処理部１０３）とを有する。
【００８９】
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【００９０】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００９１】
（付記１）
コンピュータに、
複数種類のデータを含む対象データにおける、前記複数種類それぞれのデータの数と、前記複数種類の順序とに基づき、前記複数種類それぞれについて、格納位置の情報をデータ格納領域内の管理領域に格納し、
前記対象データに含まれるデータの入力に応じ、入力データの格納位置を、前記入力データの種類に基づき前記管理領域から特定し、
特定された前記格納位置に他のデータが格納されていない場合、特定された前記格納位置に前記入力データを格納し、
特定された前記格納位置に他のデータが格納されている場合、前記他のデータの種類の順番と前記入力データの種類の順番との比較に基づき、前記入力データを、前記管理領域のうち前記入力データの種類に対応する格納位置の情報が格納された位置、または、特定された前記格納位置に格納する、
処理を実行させる格納プログラム。
【００９２】
（付記２）
特定された前記格納位置に前記他のデータが格納されている場合に前記入力データを格納する処理において、
特定された前記格納位置に前記他のデータが格納されており、且つ、前記他のデータの種類の順番が前記入力データの種類の順番より前である場合、特定された前記格納位置に前記入力データを格納し、
特定された前記格納位置に前記他のデータが格納されており、且つ、前記他のデータの種類の順番が前記入力データの種類の順番より後である場合、前記管理領域のうち前記入力データの種類に対応する格納位置の情報が格納された位置に、前記入力データを格納する、
付記１記載の格納プログラム。
【００９３】
（付記３）
前記コンピュータに、
前記管理領域に格納された、前記入力データの種類に対応する格納位置の情報を更新する、
処理をさらに実行させる付記１又は２記載の格納プログラム。
【００９４】
（付記４）
前記コンピュータに、
特定された前記格納位置に前記他のデータが格納されており、且つ、前記他のデータの種類の順番が前記入力データの種類の順番より前である場合、前記管理領域のうち、前記他のデータの種類に対応する格納位置の情報が格納された位置に、前記他のデータを格納する、
処理をさらに実行させる付記２記載の格納プログラム。
【００９５】
（付記５）
前記コンピュータに、
前記対象データに含まれるデータの入力が完了した場合、前記管理領域に格納されたデータと、前記データ格納領域のうち前記管理領域以外の領域に格納されたデータとを、種類毎に入力順に並ぶように並べ替える、
処理をさらに実行させる付記１乃至４のいずれか１つ記載の格納プログラム。
【００９６】
（付記６）
前記データ格納領域に含まれる格納位置の数は、前記複数種類それぞれのデータの数の総和に等しい、
付記１乃至５のいずれか１つ記載の格納プログラム。
【００９７】
（付記７）
コンピュータが、
複数種類のデータを含む対象データにおける、前記複数種類それぞれのデータの数と、前記複数種類の順序とに基づき、前記複数種類それぞれについて、格納位置の情報をデータ格納領域内の管理領域に格納し、
前記対象データに含まれるデータの入力に応じ、入力データの格納位置を、前記入力データの種類に基づき前記管理領域から特定し、
特定された前記格納位置に他のデータが格納されていない場合、特定された前記格納位置に前記入力データを格納し、
特定された前記格納位置に他のデータが格納されている場合、前記他のデータの種類の順番と前記入力データの種類の順番との比較の結果に基づき、前記入力データを、前記管理領域のうち前記入力データの種類に対応する格納位置の情報が格納された位置、または、特定された前記格納位置に格納する、
処理を実行する格納方法。
【００９８】
（付記８）
複数種類のデータを含む対象データにおける、前記複数種類それぞれのデータの数と、前記複数種類の順序とに基づき、前記複数種類それぞれについて、格納位置の情報をデータ格納領域内の管理領域に格納する第１処理部と、
前記対象データに含まれるデータの入力に応じ、入力データの格納位置を、前記入力データの種類に基づき前記管理領域から特定し、特定された前記格納位置に他のデータが格納されていない場合、特定された前記格納位置に前記入力データを格納し、特定された前記格納位置に他のデータが格納されている場合、前記他のデータの種類の順番と前記入力データの種類の順番との比較に基づき、前記入力データを、前記管理領域のうち前記入力データの種類に対応する格納位置の情報が格納された位置、または、特定された前記格納位置に格納する第２処理部と、
を有する格納装置。
【符号の説明】
【００９９】
１  情報処理装置    １０１  先頭特定部
１０３  格納処理部    １０５  並び替え部
１１１  入力データ格納部    １１３  データ格納部
１１５  出力データ格納部
【図１】
2018132900.tif 000003
【図２】
2018132900.tif 000004
【図３】
2018132900.tif 000005
【図４】
2018132900.tif 000006
【図５】
2018132900.tif 000007
【図６】
2018132900.tif 000008
【図７】
2018132900.tif 000009
【図８】
2018132900.tif 000010
【図９】
2018132900.tif 000011
【図１０】
2018132900.tif 000012
【図１１】
2018132900.tif 000013
【図１２】
2018132900.tif 000014
【図１３】
2018132900.tif 000015
【図１４】
2018132900.tif 000016
【図１５】
2018132900.tif 000017
【図１６】
2018132900.tif 000018
【図１７】
2018132900.tif 000019
【図１８】
2018132900.tif 000020
【図１９】
2018132900.tif 000021
【図２０】
2018132900.tif 000022
【図２１】
2018132900.tif 000023
【図２２】
2018132900.tif 000024
【図２３】
2018132900.tif 000025
【図２４】
2018132900.tif 000026
【図２５】
2018132900.tif 000027
【図２６】
2018132900.tif 000028
【図２７】
2018132900.tif 000029
【図２８】
2018132900.tif 000030
【図２９】
2018132900.tif 000031
【図３０】
2018132900.tif 000032