(57)【特許請求の範囲】
【請求項１】
乱数の元となる同一の情報に基づいて同一の乱数列を生成すると共に、生成する乱数列が採り得る値域が互いに異なる複数種類の乱数列を発生可能であり、注目する乱数列が採り得る値域に含まれる乱数が、その値域とは異なる他の乱数列が採り得る値域に含まれる関係にある場合に、前記他の乱数列が採り得る値域に含まれる関係にある前記注目する乱数列の乱数と、前記注目する乱数列が採り得る値域に含まれる前記他の乱数列の乱数とは、同一の値であり、且つ自装置が発生すべき乱数列に同一の順番で現れる
ことを特徴とする乱数発生装置。
【請求項２】
前記注目する乱数列が採り得る値域に含まれる特定の乱数が、その値域よりも狭い他の乱数列が採り得る値域に含まれる関係にある場合には、その関係が成立するか否かを、該狭い値域を採り得る他の乱数列のうち、前記注目する乱数列が採り得る値域の次に広い値域を採り得る他の乱数列を比較対象として順次判断する過程において、該特定の乱数が含まれ、且つ該関係が成立する最も値域が狭い乱数列の中から、該特定の乱数を生成する際に用いる同一の情報を基に生成した他の乱数を選択する一方で、前記注目する乱数列が採り得る値域よりも狭い他の乱数列が採り得る値域に前記特定の乱数が含まれない場合には、その特定の乱数を選択することにより、前記発生すべき乱数列を構成する
ことを特徴とする請求項１記載の乱数発生装置。
【請求項３】
前記複数種類の乱数列を発生する複数の乱数発生手段と、
前記複数の乱数発生手段のうち何れかの生成した乱数の値を選択する乱数選択手段とを備え、
前記乱数選択手段は、
前記複数の乱数発生手段のうち特定の乱数発生手段によって生成される特定の乱数が、その特定の乱数発生手段によって生成される乱数列が採り得る値域よりも狭い他の乱数列が採り得る値域に含まれる関係にある場合に、その関係が成立するか否かを、該狭い値域を採り得る他の乱数列のうち、前記注目する乱数列が採り得る値域の次に広い値域を採り得る他の乱数列を比較対象として順次判断する過程において、該特定の乱数が含まれ、且つ該関係が成立する最も値域が狭い乱数列を生成する他の乱数発生手段が生成する乱数列の中から、該特定の乱数を生成する際に用いる同一の情報を基に生成した他の乱数を選択する一方で、
前記複数の乱数発生手段のうち前記特定の乱数発生手段によって生成される前記特定の乱数が、生成する乱数列が採り得る値域が前記特定の乱数選択手段よりも狭い他の乱数選択手段によって生成される乱数列が採り得る値域に含まれない場合には、前記特定の乱数を選択する
ことを特徴とする請求項２記載の乱数発生装置。
【請求項４】
前記複数の乱数発生手段である第１及び第２の乱数発生手段は、生成する乱数列が採り得る値域が互いに異なると共に、該第１の乱数発生手段が生成する乱数列が採り得る値域が、該第２の乱数発生手段が生成する乱数列が採り得る値域を含む関係を有し、
前記乱数選択手段は、
前記第１の乱数発生手段によって生成された第１の乱数が、前記第２の乱数発生手段によって生成される第２の乱数列が採り得る値域に含まれるか否かを判断する第１の処理と、
前記第１の処理にて含まれると判断した場合に、前記第２の乱数発生手段により生成された第２の乱数を選択する第２の処理とを、
前記第２の処理にて第２の乱数を選択する度に、前記第２の乱数を新たな前記第１の乱数として、前記第１の処理と前記第２の処理とを繰り返し行うと共に、
前記第１の乱数発生手段によって生成された第１の乱数が、前記第２の乱数発生手段によって生成される第２の乱数列が採り得る値域に含まれないと判断した場合に、前記第１の乱数発生手段により生成された第１の乱数を、前記特定の乱数として選択する
ことを特徴とする請求項３記載の乱数発生装置。
【請求項５】
前記複数種類の乱数列において、個々の乱数列には乱数が略一様に分布していることを特徴とする請求項２乃至請求項４の何れかに記載の乱数発生装置。
【請求項６】
前記乱数発生装置は、数値、文字、識別子、座標、及びビット列の少なくとも何れかを表す乱数列を生成する
ことを特徴とする請求項１乃至請求項５の何れかに記載の乱数発生装置。
【請求項７】
前記請求項１乃至請求項６の何れかに記載の乱数発生装置と、
オブジェクトの配置先を、そのオブジェクトに固有な情報を基に前記乱数発生装置によって生成される乱数を用いて、前記複数種類の乱数列が採り得る値域を表す空間の部分空間として少なくとも何れかの配置先が割り付けられている対応情報を参照することによって決定する配置手段と、を備える
ことを特徴とするオブジェクト配置装置。
【請求項８】
乱数の元となる同一の情報に基づいて同一の乱数列を生成すると共に、生成する乱数列が採り得る値域が互いに異なる複数種類の乱数列を発生可能な乱数発生手段を用いて、注目する乱数列が採り得る値域に含まれる乱数が、その値域とは異なる他の乱数列が採り得る値域に含まれる関係にある場合には、前記他の乱数列が採り得る値域に含まれる関係にある前記注目する乱数列の乱数と、前記注目する乱数列が採り得る値域に含まれる前記他の乱数列の乱数とが、同一の値であり、且つ発生すべき乱数列に同一の順番で出現させる
ことを特徴とする乱数発生方法。
【請求項９】
前記乱数発生手段によって生成した注目する乱数列が採り得る値域に含まれる特定の乱数が、その値域よりも狭い他の乱数列が採り得る値域に含まれる関係にある場合には、その関係が成立するか否かを、該狭い値域を採り得る他の乱数列のうち、前記注目する乱数列が採り得る値域の次に広い値域を採り得る他の乱数列を比較対象として順次判断する過程において、該特定の乱数が含まれ、且つ該関係が成立する最も値域が狭い乱数列の中から、該特定の乱数を生成する際に用いる同一の情報を基に生成した他の乱数を選択する一方で、前記注目する乱数列が採り得る値域よりも狭い他の乱数列が採り得る値域に前記特定の乱数が含まれない場合には、その特定の乱数を選択することにより、前記発生すべき乱数列を構成する
ことを特徴とする請求項８記載の乱数発生方法。
【請求項１０】
前記乱数発生手段として、前記互いに異なる複数種類の乱数列を発生する複数の乱数発生手段を用いて、
該複数の乱数発生手段のうち特定の乱数発生手段によって生成した特定の乱数が、生成する乱数列が採り得る値域よりも狭い他の乱数列が採り得る値域に含まれる関係にある場合に、その関係が成立するか否かを、該狭い値域を採り得る他の乱数列のうち、前記注目する乱数列が採り得る値域の次に広い値域を採り得る他の乱数列を比較対象として順次判断する過程において、該特定の乱数が含まれ、且つ該関係が成立する最も値域が狭い乱数列を生成する他の乱数発生手段が生成する乱数列の中から、該特定の乱数を生成する際に用いる同一の情報を基に生成した他の乱数を選択する一方で、
前記複数の乱数発生手段のうち前記特定の乱数発生手段によって生成される前記特定の乱数が、生成する乱数列が採り得る値域が該特定の乱数選択手段よりも狭い他の乱数選択手段によって生成される乱数列が採り得る値域に含まれない場合には、前記特定の乱数を選択する
ことを特徴とする請求項９記載の乱数発生方法。
【請求項１１】
前記複数の乱数発生手段として第１及び第２の乱数発生手段を用いて、生成する乱数列が採り得る値域が互いに異なると共に、該第１の乱数発生手段が生成する乱数列が採り得る値域が、該第２の乱数発生手段が生成する乱数列が採り得る値域を含む関係の乱数を生成し、
前記特定の乱数を選択するに際して、
前記第１の乱数発生手段によって生成した第１の乱数が、前記第２の乱数発生手段によって生成される第２の乱数列が採り得る値域に含まれるか否かを判断する第１の判断と、
前記第１の判断にて含まれると判断した場合に、前記第２の乱数発生手段により生成した第２の乱数を選択する第２の判断とを、
前記第２の判断にて第２の乱数を選択する度に、前記第２の乱数を新たな前記第１の乱数として、前記第１の判断と前記第２の判断とを繰り返し行うと共に、
前記第１の乱数発生手段によって生成した第１の乱数が、前記第２の乱数発生手段によって生成した第２の乱数列が採り得る値域に含まれないと判断した場合に、前記第１の乱数発生手段により生成された第１の乱数を、前記特定の乱数として選択する
ことを特徴とする請求項１０記載の乱数発生方法。
【請求項１２】
乱数の元となる同一の情報に基づいて同一の乱数列を生成すると共に、生成する乱数列が採り得る値域が互いに異なる複数種類の乱数列を発生可能であり、注目する乱数列が採り得る値域に含まれる乱数が、その値域とは異なる他の乱数列が採り得る値域に含まれる関係にある場合には、前記他の乱数列が採り得る値域に含まれる関係にある前記注目する乱数列の乱数と、前記注目する乱数列が採り得る値域に含まれる前記他の乱数列の乱数とが、同一の値であり、且つ発生すべき乱数列に同一の順番で出現する乱数発生機能を、コンピュータに実行させる
ことを特徴とするコンピュータ・プログラム。
【請求項１３】
前記乱数発生機能により、前記コンピュータに、前記注目する乱数列が採り得る値域に含まれる特定の乱数が、その値域よりも狭い他の乱数列が採り得る値域に含まれる関係にある場合には、その関係が成立するか否かを、該狭い値域を採り得る他の乱数列のうち、前記注目する乱数列が採り得る値域の次に広い値域を採り得る他の乱数列を比較対象として順次判断する過程において、該特定の乱数が含まれ、且つ該関係が成立する最も値域が狭い乱数列の中から、該特定の乱数を生成する際に用いる同一の情報を基に生成した他の乱数を選択する一方で、前記注目する乱数列が採り得る値域よりも狭い他の乱数列が採り得る値域に前記特定の乱数が含まれない場合には、その特定の乱数を選択させることにより、前記発生すべき乱数列を構成する
ことを特徴とする請求項１２記載のコンピュータ・プログラム。
【請求項１４】
前記乱数発生機能として、前記複数種類の乱数列を発生する複数の乱数発生機能と、
前記複数の乱数発生機能のうち何れかの生成した乱数の値を選択する乱数選択機能とを前記コンピュータに実行させるコンピュータ・プログラムであって、
前記乱数選択機能によって、
前記複数の乱数発生機能のうち特定の乱数発生機能によって生成される特定の乱数が、その特定の乱数発生機能によって生成される乱数列が採り得る値域よりも狭い他の乱数列が採り得る値域に含まれる関係にある場合には、その関係が成立するか否かを、該狭い値域を採り得る他の乱数列のうち、前記注目する乱数列が採り得る値域の次に広い値域を採り得る他の乱数列を比較対象として順次判断する過程において、該特定の乱数が含まれ、且つ該関係が成立する最も値域が狭い乱数列を生成する他の乱数発生機能が生成する乱数列の中から、該特定の乱数を生成する際に用いる同一の情報を基に生成した他の乱数を選択する一方で、
前記複数の乱数発生機能のうち前記特定の乱数発生機能によって生成される前記特定の乱数が、生成する乱数列が採り得る値域が該特定の乱数選択機能よりも狭い他の乱数選択機能によって生成される乱数列が採り得る値域に含まれない場合には、前記特定の乱数を選択する
ことを特徴とする請求項１３記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特定の性質を持つ疑似乱数を発生する計算処理の技術分野に関する。
【背景技術】
【０００２】
例えばコンピュータ（情報処理装置）を利用した計算処理において、乱数が必要になる場合が多々ある。乱数を装置によって生成する場合、係るコンピュータや専用の演算回路等の装置により、元になるデータ（以下、「オブジェクト」または「オブジェクトデータ」と称する場合がある）を用いて特定の演算を行わせることにより、当該装置は、擬似的な乱数を発生する。本願では、このような装置を「疑似乱数発生装置」と称し、且つ以下の説明において、このような装置が生成する疑似乱数を、単に「乱数」と略称する場合がある。【０００３】
そして、係る疑似乱数発生装置には、元になる同一データを用いて生成する場合は同じ数値列を発生する一方で、元になるデータが異なる場合には互いに略関連性を持たない数値列を発生する、という性質を有する疑似乱数発生装置がある。このような疑似乱数発生装置は、各種分野において幅広く使われている。そして、このような性質を有する疑似乱数発生装置として、例として、特許文献１及び特許文献２に記載された技術を挙げることができる。【０００４】
図１０は、特許文献１に記載された方法の手順を説明する図である。特許文献１に記載された疑似乱数の発生方法は、既知のオブジェクトデータに基づき疑似乱数（擬似的な乱数列）を発生する方法を開示する。【０００５】
即ち、図１０に示した反復処理の手順において、まず、反復ステップ１では、スタート値Ｓ０が受け取られ、そのスタート値Ｓ０を基に鍵Ｋ０が算出される。【０００６】
反復ステップ２では、係るスタート値Ｓ０と、反復ステップ１にて算出された鍵Ｋ０に対して、一方向関数ｆが適用される。この反復ステップ２における一方向関数ｆの演算結果は、ｆ（Ｓ０，Ｋ０）で表される。【０００７】
反復ステップ３では、反復ステップ２にて得られた演算結果ｆ（Ｓ０，Ｋ０）が３つの値（Ｓ１，Ｋ１，Ｒ１）に分解される。これら３つの値において、Ｓ１は当該一方向関数ｆによる次の演算の初期値として、Ｋ１は鍵として扱われる（反復ステップ４）。そして、Ｒ１は、図１０に示した一連の反復処理によって生成される疑似乱数の第１の部分として扱われる。【０００８】
反復ステップ５では、反復ステップ４におけるＳ１及びＫ１を利用して当該一方向関数ｆによる演算が施され、該演算の結果であるｆ（Ｓ１，Ｋ１）が得られる。そして、反復ステップ６では、反復ステップ２と同様に、演算結果ｆ（Ｓ１，Ｋ１）が３つの値（Ｓ２，Ｋ２，Ｒ２）に分解される。【０００９】
即ち、特許文献１に記載された方法では、上述した一連の反復処理が所定の回数繰り返し行われ、その後、個々の反復処理にて求められたＲ１，Ｒ２，・・・などの疑似乱数の部分が合成されることによって、最終的に疑似乱数が得られる。このように、特許文献１に記載された方法によれば、既知のオブジェクトデータを用いて、擬似的に乱数列を発生することができる。【００１０】
また、特許文献２には、レジスタと論理回路とが組み合わせられた疑似乱数発生回路により、擬似的な乱数列として、ランダム性に優れる大量の２値パターンを高速に生成する技術が開示されている。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特表２００９−５１２９３０号公報
【特許文献２】特開平０９−２８２１４６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
ところで、例えば特許文献１に開示された方法において、疑似乱数発生装置が生成する乱数の値の範囲（以下、「乱数列が採り得る値域」、或いは「乱数列の値域」と略称することがある）が変更された場合を考える。この場合、その変更後に生成される乱数列に含まれる乱数の値のうち、その変更前に生成される乱数の範囲にも含まれる乱数の値は、係る変更前に当該疑似乱数発生装置が生成する乱数の順番を維持するとは限られず、且つ、係る変更前の乱数列に含まれる乱数の値を採るとも限られない。【００１３】
そこで、本発明は、発生する乱数列が採り得る値域が変更されたとしても、その変更後の乱数列に含まれる乱数の値のうち、当該変更前に生成する乱数列が採り得る値域に含まれる乱数の値が、当該変更前に生成する乱数の順番を維持すると共に、当該変更前の乱数列に含まれる乱数の値を採る乱数発生装置、乱数発生方法、オブジェクト配置装置、並びにコンピュータ・プログラムを提供することを主たる目的とする。
【課題を解決するための手段】
【００１４】
上記の目的を達成すべく、本発明に係る乱数発生装置は、以下の構成を備えることを特徴とする。【００１５】
即ち、本発明に係る乱数発生装置は、乱数の元となる同一の情報に基づいて同一の乱数列を生成すると共に、生成する乱数列が採り得る値域が互いに異なる複数種類の乱数列を発生可能であり、注目する乱数列が採り得る値域に含まれる乱数が、その値域とは異なる他の乱数列が採り得る値域に含まれる関係にある場合に、前記他の乱数列が採り得る値域に含まれる関係にある前記注目する乱数列の乱数と、前記注目する乱数列が採り得る値域に含まれる前記他の乱数列の乱数とは、同一の値であり、且つ自装置が発生すべき乱数列に同一の順番で現れることを特徴とする。【００１６】
また、本発明の他の見地としてのオブジェクト配置装置は、
上記構成を有する乱数発生装置と、
オブジェクトの配置先を、そのオブジェクトに固有な情報を基に前記乱数発生装置によって生成される乱数を用いて、前記複数種類の乱数列が採り得る値域を表す空間の部分空間として少なくとも何れかの配置先が割り付けられている対応情報を参照することによって決定する配置手段と、を備えることを特徴とする。【００１７】
また、本発明の更なる他の見地としての乱数発生方法は、
乱数の元となる同一の情報に基づいて同一の乱数列を生成すると共に、生成する乱数列が採り得る値域が互いに異なる複数種類の乱数列を発生可能な乱数発生手段を用いて、注目する乱数列が採り得る値域に含まれる乱数が、その値域とは異なる他の乱数列が採り得る値域に含まれる関係にある場合には、前記他の乱数列が採り得る値域に含まれる関係にある前記注目する乱数列の乱数と、前記注目する乱数列が採り得る値域に含まれる前記他の乱数列の乱数とが、同一の値であり、且つ発生すべき乱数列に同一の順番で出現させることを特徴とする。【００１８】
尚、同目的は、上記構成を有する乱数発生装置または対応する方法を、コンピュータによって実現するコンピュータ・プログラム、及びそのコンピュータ・プログラムが格納されている、コンピュータ読み取り可能な記憶媒体によっても達成される。
【発明の効果】
【００１９】
本発明によれば、発生する乱数列が採り得る値域が変更されたとしても、その変更後の乱数列に含まれる乱数の値のうち、当該変更前に生成する乱数列が採り得る値域に含まれる乱数の値が、当該変更前に生成する乱数の順番を維持すると共に、当該変更前の乱数列に含まれる乱数の値を採る乱数発生装置等の提供が実現する。
【図面の簡単な説明】
【００２０】
【図１】本発明の模範的な第１の実施形態に係る乱数発生装置（疑似乱数発生装置）の構成を示すブロック図である。
【図２】本発明の模範的な第２の実施形態における乱数発生装置の構成を示すブロック図である。
【図３】第２の実施形態における個々のサブ乱数発生機能１０２が生成する乱数列の値域の関係と、乱数選択機能１０３が選択する乱数との関係を説明する図である。
【図４】本発明の第２の実施形態に係る乱数選択機能１０３の動作を表すフローチャートである。
【図５】本発明の各実施形態に係る乱数発生装置を実現可能な情報処理装置１０００のハードウエア構成の一例を示す図である。
【図６】本発明の第１及び第２の実施形態に係る実施例におけるオブジェクト配置装置５００のハードウエア構成を概念的に説明する図である。
【図７】本発明の第１及び第２の実施形態に係る実施例における複数のストレージノードの記憶容量を、１次元空間における部分空間として表した例を示す図である。
【図８】本発明の第１及び第２の実施形態に係る実施例における部分空間とストレージノードとの対応表３００を表す図である。
【図９】本発明の第１及び第２の実施形態に係る実施例におけるストレージノードの記憶容量を、２次元空間における部分空間として表した例を示す図である。
【図１０】特許文献１に記載された方法の手順を説明する図である。
【発明を実施するための形態】
【００２１】
次に、本発明を模範的に実施する形態及びその実施例について、図面を参照して詳細に説明する。
【００２２】
＜第１の実施形態＞
図１は、本発明の模範的な第１の実施形態に係る乱数発生装置（疑似乱数発生装置）の構成を示すブロック図であり、以下に説明する実施形態およびその実施例に共通する概念を表す。
【００２３】
図１において、乱数発生装置１０は、乱数発生機能１２を有する。この乱数発生機能１２は、外部より与えられるシード情報（初期値）１４に基づいて、以下に説明する如く乱数（疑似乱数）を生成し、生成した乱数１６を出力する機能を有する。乱数の範囲情報１５は、乱数発生機能１２が生成する乱数列が採り得る値域（以下、「乱数列の値域」と略称する）を、乱数発生装置１０の外部から乱数発生装置１０（乱数発生機能１２）に対して指定する情報である。この乱数の範囲情報１５は、乱数発生装置１０を利用するユーザが適当なＵＩ（ユーザ・インタフェース）を用いて、或いは外部装置が通信回線（不図示）を介して、乱数発生装置１０に設定してもよい。
【００２４】
ここで、乱数の範囲情報（乱数列の値域を表す情報）１５は、例えば、特定の数値範囲を表すことが可能な情報であれば、本実施形態において、その情報の実体は限定されない。そして、例えば、図６を参照して後述するオブジェクト配置装置５００の場合、乱数の範囲情報１５は、オブジェクトの配置先が記憶可能な残容量（空き容量）が少なくなった場合や、既存の配置先の削除、新たな配置先の追加等のシステム仕様変更が発生した場合等に、乱数発生装置１０に供給される。
【００２５】
そして、本実施形態において、係る乱数発生装置１０（乱数発生機能１２）は、次の機能を実行する。
【００２６】
乱数発生機能１２は、乱数（即ち、疑似乱数）の元となる同一の情報がシード（初期値）として与えられた場合に、同一の乱数列を生成することができる。また、乱数発生機能１２は、乱数の範囲情報１５に基づいて、生成する乱数列の値域が互いに異なる複数種類の乱数列を発生可能である。
【００２７】
尚、本実施形態において個々の乱数列を算出する手順自体には、現在では一般的な手法を採用することができるので、本実施形態における詳細な説明は省略する。
【００２８】
乱数発生機能１２は、注目する乱数列の値域に含まれる乱数Ａが、その値域とは異なる他の乱数列の値域に含まれる関係にあるか否かを判断することができる。
【００２９】
そして、乱数発生機能１２は、上記判断よって当該関係が成立すると判断した場合、当該他の乱数列の値域に含まれる関係にある乱数Ａ（当該注目する乱数列の乱数）と、当該注目する乱数列の値域に含まれる当該他の乱数列の乱数Ｂとが、同一の値であり、且つ乱数発生装置１０が発生すべき乱数列に同一の順番で出現する乱数列（乱数１６）を出力する。
【００３０】
このような乱数発生装置１０によれば、発生すべき乱数列の値域が乱数の範囲情報１５に応じて変更された場合であっても、その変更後の乱数列に含まれる乱数の値のうち、当該変更前に生成する乱数列の値域に含まれる乱数の値は、当該変更前に生成する乱数の順番を維持すると共に、当該変更前の乱数列に含まれる乱数の値である。
【００３１】
尚、本実施形態において、乱数列には、数値の列とは限定されず、例えば、文字、識別子、及びビット列、座標等がなす様々な種類の列を採用可能である（以下の実施形態においても同様である）。
【００３２】
＜第２の実施形態＞
次に、上述した第１の実施形態に係る乱数発生装置を基本とする第２の実施形態について説明する。以下の説明においては、本実施形態に係る特徴的な部分を中心に説明すると共に、上述した第１の実施形態と同様な構成についての重複する説明は省略する。
【００３３】
図２は、本発明の模範的な第２の実施形態における乱数発生装置の構成を示すブロック図である。
【００３４】
乱数発生装置１００は、シード提供機能１０１と、複数のサブ乱数発生機能１０２と、乱数選択機能１０３とを有する。乱数発生装置１００は、入力されたシード情報１０４ａに基づいて、乱数１０６を発生する装置である。この乱数１０６の値は、乱数発生装置１００が発生する乱数列の値域がシード情報１０４ａに応じて変更された場合であっても、その変更後に生成する乱数列に含まれ、且つ、その変更前に自装置が発生する乱数列の値域にも含まれる乱数の値は、その変更後においても、係る変更前に自装置が発生する各乱数の値の順番を維持した値である。
【００３５】
シード提供機能１０１は、外部から受け取ったシード情報１０４ａに基づいて、個々のサブ乱数発生機能１０２に設定するシード（シード情報）１０４ｂを生成する。即ち、シード提供機能１０１は、シード情報１０４ａとしてある値を入手するのに応じて、所定の関係を満足する複数種類のシードからなるシード情報１０４ｂを生成する。この所定の関係は、当該個々のサブ乱数発生機能１０２別に異なるシード情報１０４ｂが生成されるように、例えば関数やテーブル等によって定められていてもよい。この場合、シード提供機能１０１は、シード情報１０４ａに基づいて、係る関数やテーブル等を用いて、当該個々のサブ乱数発生機能１０２別に異なるシード情報１０４ｂを生成する。
【００３６】
そして、シード提供機能１０１は、生成したシード情報１０４ｂを、当該個々のサブ乱数発生機能１０２に設定する。即ち、本実施形態において、シード提供機能１０１は、入力されたシード情報１０４ａが同じであれば、同一のサブ乱数発生機能１０２に対しては、同じ内容のシード１０４ｂを提供する。
【００３７】
サブ乱数発生機能１０２は、シード提供機能１０１から受け取ったシード情報１０４ｂに基づいて乱数を発生する。サブ乱数発生機能１０２は、受け取ったシード情報１０４ｂが同一であれば、同じ乱数列を生成する。このサブ乱数発生機能１０２による乱数の生成手順自体には、現在では一般的な技術を採用できるので、本実施形態における詳細な説明は省略する。
【００３８】
但し、本実施形態において、図２に示す個々のサブ乱数発生機能１０２は、発生する乱数列の値域がそれぞれ異なる。ここで、互いに異なる値域に関する情報は、例えば、外部より設定される乱数の範囲情報１０５に応じて、乱数選択機能１０３またはシード提供機能１０１が生成した結果を、当該個々のサブ乱数発生機能１０２に対して、乱数選択機能１０３またはシード提供機能１０１が設定する構成が想定できる。或いは、乱数の範囲情報１０５自体は、当該個々のサブ乱数発生機能１０２に指定すべき値域を含んでいてもよい。
【００３９】
そして、本実施形態に係る複数のサブ乱数発生機能１０２は、前述したように、発生する乱数列の値域がそれぞれ異なると共に、サブ乱数発生機能Ｂ（第１のサブ乱数発生機能１０２）が発生する乱数列の値域は、そのサブ乱数発生機能Ｂよりも、発生する乱数列の値域が狭いサブ乱数発生機能Ａ（第２のサブ乱数発生機能１０２）による乱数列の値域を含む（包含する）。この関係を図３に示す。
【００４０】
図３は、第２の実施形態における個々のサブ乱数発生機能１０２が生成する乱数列の値域の関係と、乱数選択機能１０３が選択する乱数との関係を説明する図である。図３において、サブ乱数発生機能Ｂに関する値域は、−１から８までの実数である。これに対して、サブ乱数発生機能Ａに関する値域は、０から４までの実数である。このような関係がある場合に、乱数選択機能１０３は、当該２つのサブ乱数発生機能（Ａ及びＢ）に関する値域が重複する範囲においては、サブ乱数発生機能Ａが生成する乱数を選択する。そして、乱数選択機能１０３は、当該２つのサブ乱数発生機能（Ａ及びＢ）に関する値域が重複しない範囲においては、サブ乱数発生機能Ｂが生成する乱数を選択する。
【００４１】
ここで、上述した関係を一般化して換言すると、乱数選択機能１０３は、複数のサブ乱数発生機能１０２のうち特定のサブ乱数発生機能１０２によって生成される特定の乱数が、その特定のサブ乱数発生機能１０２によって生成される乱数列の値域よりも狭い他の乱数列の値域に含まれる関係にあるか否かを判断する。
【００４２】
そして乱数選択機能１０３は、係る判断において当該関係が成立すると判断した場合には、その関係が成立するか否かを、当該狭い値域を有する他の乱数列のうち、当該注目する乱数列の値域の次に広い値域を採り得る他の乱数列を比較対象として順次判断する。その過程において、乱数選択機能１０３は、当該特定の乱数が含まれ、且つ係る関係が成立する最も値域が狭い乱数列を生成する他のサブ乱数発生機能１０２を選択する。そして乱数選択機能１０３は、当該選択した他のサブ乱数発生機能１０２が生成する乱数列の中から、当該特定の乱数を生成する際に用いる同一の情報を基に生成した他の乱数を、出力すべき乱数１０６として選択する。
【００４３】
一方、乱数選択機能１０３は、係る判断において当該関係が成立せず、当該特定のサブ乱数発生機能１０２によって生成される特定の乱数が、生成する乱数列の値域が当該特定のサブ乱数選択機能１０２よりも狭い他のサブ乱数選択機能１０２によって生成される乱数列の値域に含まれないと判断した場合には、当該特定の乱数を、出力すべき乱数１０６として選択する。
【００４４】
即ち、本実施形態に係る乱数発生装置１００において、乱数選択機能１０３は、注目する乱数列の値域に含まれる特定の乱数が、その値域よりも狭い他の乱数列の値域に含まれる関係が成立するか否かを判断する。そして、乱数選択機能１０３は、係る関係が成立する場合には、その関係が成立するか否かを、当該狭い値域の他の乱数列のうち、当該注目する乱数列の値域の次に広い値域を採り得る他の乱数列を比較対象として順次判断する過程において、当該特定の乱数が含まれ、且つ当該関係が成立する最も値域が狭い乱数列の中から、該特定の乱数を生成する際に用いる同一の情報を基に生成した他の乱数を選択する。この動作の一方で、乱数選択機能１０３は、当該注目する乱数列の値域よりも狭い他の乱数列の値域に当該特定の乱数が含まれない場合には、その特定の乱数を選択する。
【００４５】
このような処理手順により、乱数選択機能１０３は、発生すべき乱数列（乱数１０６）を構成する。
【００４６】
ここで、乱数選択機能１０３は、乱数発生装置１００の外部から受け取った乱数の範囲情報（値域）１０５に基づいて、個々のサブ乱数発生機能１０２の動作を制御することができる。即ち、乱数選択機能１０３は、当該複数のサブ乱数発生機能１０２が発生すべき乱数列の値域を、外部から取得することによって把握することができる。
【００４７】
そして、乱数選択機能１０３は、係る制御に応じて個々のサブ乱数発生機能１０２が出力する乱数列の中から、乱数発生装置１００の外部に出力すべき乱数１０６を選択する。この選択動作の過程において、当該個々のサブ乱数発生機能１０２は、それぞれが乱数列を生成する装置構成であっても、或いは、乱数選択機能１０３による判断の過程において乱数列の生成が必要と判断された特定のサブ乱数発生機能１０２だけが乱数列を生成する装置構成であってもよい。
【００４８】
次に、上述した乱数選択機能１０３の動作を実現する具体例について、図４を参照して詳細に説明する。
【００４９】
図４は、本発明の第２の実施形態に係る乱数選択機能１０３の動作を表すフローチャートである。
【００５０】
まず、乱数選択機能１０３は、複数のサブ乱数発生機能１０２の中から、特定のサブ乱数発生機能１０２を選択する（ステップＳ１）。このとき選択される特定のサブ乱数発生機能１０２とは、当該複数のサブ乱数発生機能１０２のうち、当該特定のサブ乱数発生機能１０２以外の全てのサブ乱数発生機能１０２が出力する乱数列の値域を含むような乱数列の値域を有するサブ乱数発生機能である。即ち、本実施形態において、複数のサブ乱数発生機能１０２は、発生する乱数列の値域が互いに異なり、一方のサブ乱数発生機能１０２に係る値域が、他方のサブ乱数発生機能１０２の値域を含む関係を有する。このため、本ステップにおいて選択されるサブ乱数発生機能１０２は、発生する乱数列の値域が最も広いサブ乱数発生機能１０２である装置構成が想定される。
【００５１】
乱数選択機能１０３は、ステップＳ１にて選択した当該特定のサブ乱数発生機能１０２が乱数を発生するように制御（指示）する（ステップＳ２）。
【００５２】
次に、乱数選択機能１０３は、当該複数のサブ乱数発生機能１０２の中から、当該特定のサブ乱数発生機能１０２よりも、発生する乱数列の値域が狭いサブ乱数発生機能１０２が存在するか否かを判断する（ステップＳ３）。乱数選択機能１０３は、ステップＳ３における判断を、例えば、上記の如く外部から受け取った乱数の範囲情報（値域）１０５に基づいて行うことができる。
【００５３】
乱数選択機能１０３は、ステップＳ３における判断の結果、発生する乱数列の値域が狭いサブ乱数発生機能１０２が存在すると判断した場合（ステップＳ３にてＹＥＳ）、処理をステップＳ４に進める。
【００５４】
乱数選択機能１０３は、ステップＳ３にて検出したサブ乱数発生機能１０２のうち、発生する乱数列の値域が最も広いサブ乱数発生機能１０２を検出する。そして乱数選択機能１０３は、検出したサブ乱数発生機能１０２が発生する乱数列の値域に、ステップＳ２にて生成された乱数（注目する乱数」と称する場合がある）が含まれるか否かを判断する（ステップＳ４）。
【００５５】
乱数選択機能１０３は、ステップＳ４における判断の結果、当該注目する乱数が、ステップＳ４にて検出したサブ乱数発生機能１０２が発生する乱数列の値域に含まれると判断した場合（ステップＳ４にてＹＥＳ）、処理をステップＳ５に進める。
【００５６】
乱数選択機能１０３は、ステップＳ４にて検出したサブ乱数発生機能１０２を用いて、新たに乱数を生成し、生成した乱数を新たに注目する乱数として、処理をステップＳ３に戻す（ステップＳ５）。
【００５７】
一方、乱数選択機能１０３は、ステップＳ３における判断の結果、現在注目する乱数を生成したサブ乱数発生機能１０２よりも値域が狭いサブ乱数発生機能１０２は存在しないと判断した場合（ステップＳ３にてＮＯ）、或いは、当該注目する乱数が、ステップＳ４にて検出したサブ乱数発生機能１０２の発生する乱数列の値域に含まれないと判断した場合（ステップＳ４にてＮＯ）、処理をステップＳ６に進める。
【００５８】
乱数選択機能１０３は、本ステップの実行に先だって最後に生成した乱数（即ち、現在注目する乱数）を、乱数発生装置１００が出力すべき乱数１０６として選択（決定）する（ステップＳ６）。
【００５９】
即ち、乱数選択機能１０３は、ステップＳ２にて最初に乱数（注目する乱数）を生成した後、上述したステップＳ３からステップＳ５までの処理を繰り返す。これにより、乱数選択機能１０３は、発生する乱数列の値域がより狭いサブ乱数発生機能１０２を特定すると共に、特定できた場合は当該特定したサブ乱数発生機能１０２によって発生した乱数を新たな注目する乱数として選択する処理を繰り返す。そして、係る繰り返しの過程において、乱数選択機能１０３は、これ以上狭い値域のサブ乱数発生機能１０２が存在しないと判断した場合には、当該狭い値域のサブ乱数発生機能１０２によって生成した乱数を、出力すべき乱数１０６として選択する訳である。
【００６０】
ここで、上述した一連の処理を一般化して説明する。即ち、本実施形態において、当該複数のサブ乱数発生機能１０２である第１及び第２の乱数発生機能は、生成する乱数列の値域が互いに異なると共に、該第１の乱数発生機能が生成する乱数列の値域が、該第２の乱数発生機能が生成する乱数列の値域を含む関係を有する。
【００６１】
そして、乱数選択機能１０３は、当該第１の乱数発生機能によって生成された第１の乱数が、当該第２の乱数発生機能によって生成される第２の乱数列の値域に含まれるか否かを判断する第１の処理を実行可能である。また、乱数選択機能１０３は、係る第１の処理にて含まれると判断した場合に、当該第２の乱数発生機能により生成された第２の乱数を選択する第２の処理を実行可能である。そして、乱数選択機能１０３は、係る第２の処理にて第２の乱数を選択する度に、その第２の乱数を新たな第１の乱数として、当該第１の処理と第２の処理とを繰り返し行う。係る繰り返しの過程において、乱数選択機能１０３は、当該第１の乱数発生機能によって生成された第１の乱数が、当該第２の乱数発生機能によって生成される第２の乱数列の値域に含まれないと判断した場合に、当該第１の乱数発生機能により生成された第１の乱数を、出力すべき乱数１０６として選択する。
【００６２】
上述した本実施形態に係る乱数発生装置１００によれば、発生する乱数列の値域が変更されたとしても、その変更後の乱数列に含まれる乱数の値のうち、当該変更前に生成する乱数列の値域に含まれる乱数の値が、当該変更前に生成する乱数の順番を維持すると共に、当該変更前の乱数列に含まれる乱数の値を厳密且つ迅速に決定することができる。
【００６３】
尚、サブ乱数発生機能１０２が略一様な乱数の値を発生する場合、乱数発生装置１００が発生する乱数の値は、略一様になる。ここで、乱数の値が略一様であるとは、係る乱数発生装置１００が発生する乱数列の値域において、その乱数列をなす個々の乱数の値の分布状態が略均一な状態を表す（以下の説明においても同様である）。このことを換言すると、当該値域内に分布する個々の乱数の密度が略一様である、と捉えることもできる。
【００６４】
尚、上述した本実施形態では、サブ乱数発生機能１０２が発生する情報が数（数値の列）である装置構成の場合について説明した。但し、本発明は、係る装置構成には限定されず、前述したように、本発明は、例えば、文字、識別子、及びビット列、座標等がなす様々な種類の列を採用可能であり、この場合、乱数発生装置１００が発生する情報も数には限定されない。
【００６５】
尚、サブ乱数発生装置１０２が発生する情報は単数ではなく複数の場合も考えられ、その場合、乱数発生装置１００が発生する情報も複数である。
【００６６】
[実施例]
次に、上述した乱数発生装置１０及び１００（図１，図２）に示した各ブロックの機能を、情報処理装置（コンピュータ）によって実現した場合の構成及び動作の具体例を、図５を参照して説明する。
【００６７】
図５は、本発明の各実施形態に係る乱数発生装置を実現可能な情報処理装置１０００のハードウエア構成（ハードウェア資源）の一例を示す図である。
【００６８】
図５に示すハードウエア構成は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）４０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４０３と、ハードディスク（記憶装置）４０４と、これら構成を接続するバス（通信路）４０５から構成されている。ここで、記憶装置４０４は、不揮発性の記憶装置の一例である。
【００６９】
上述したフローチャート（図４）等を用いて説明した各ブロックの機能（処理）は、そのような機能を実現可能なプログラムの供給を情報処理装置１０００に受けた後、そのプログラムを、ＣＰＵ４０１に読み出して実行することによって達成される。また、当該装置内に供給されたプログラムは、読み書き可能なＲＡＭ４０３や、ハードディスク（ＨＤＤ）４０４に格納することも可能である。ここで、ＲＡＭ４０３は、一時記憶可能な記憶デバイスの一例である。ＨＤＤ４０４は、不揮発性の記憶装置の一例である。
【００７０】
また、プログラムの供給方法は、ＣＤ−ＲＯＭ等の各種記憶媒体を介してインストールする方法や、インターネット等の通信回線を介して外部よりダウンロードする方法等の方法を用いることができる。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコード或いは、係るコードが格納された記憶媒体（ＨＤＤ４０４）によって構成されると認識することができる。
【００７１】
但し、上述したオブジェクト配置装置１０，１００は、論理回路デバイス等を適宜組み合わせた専用のハードウエアによって実現しても良い。或いは、上述したオブジェクト配置装置１０，１００を情報処理装置（コンピュータ）によって実現する場合において、その情報処理装置は、オブジェクト配置装置１０，１００が実行する一連の機能（処理）を、物理的または仮想的に複数の情報処理装置に分散した状態で実行してもよい。
【００７２】
図６は、本発明の第１及び第２の実施形態に係る実施例におけるオブジェクト配置装置５００のハードウエア構成を概念的に説明する図である。図６に示すオブジェクト配置装置５００は、同図に示すように、オブジェクト配置機能５０１と、例えば第２の実施形態に係る乱数発生装置１００とを有する。オブジェクト配置装置５００には、一例として、５台のストレージノード（５００ａ乃至５００ｅ）が接続されている。個々のストレージノード（５００ａ乃至５００ｅ）は、例えば、通信ネットワーク上に適宜分散して配置されているとする。そして、以下の説明では、オブジェクト配置装置５００を、情報処理装置１０００によって実現する例について説明する。
【００７３】
但し、ストレージノード（５００ａ乃至５００ｅ）は、例えば、ＨＤＤ４０４の内部に、仮想的に構成してもよい。
【００７４】
係るオブジェクト配置装置５００において、オブジェクト配置機能５０１は、オブジェクト（以下、「オブジェクトデータ」と称する場合がある）５０２の配置先を、そのオブジェクトに固有な情報を基に、上述した乱数発生装置１００（１０）によって生成される乱数を用いて、当該複数種類の乱数列の値域を表す空間の部分空間として少なくとも何れかの配置先が割り付けられている対応情報を参照することによって決定する。
【００７５】
オブジェクト配置装置５００は、ストレージノード５００ａ乃至５００ｅの中から、注目するオブジェクト（オブジェクトデータ）５０２を配置すべきストレージノードを、そのオブジェクト５０２が持つ識別子情報（ＩＤ）に基づいて選択する。係る選択に際して、オブジェクト配置装置５００は、当該オブジェクトを、各ストレージノードが記憶可能な容量に略比例した確率で配置する。そして、オブジェクト配置装置５００は、ストレージノードが追加もしくは削除された場合においても、最小限のデータ移動により、オブジェクトを、各ストレージノードが記憶可能な容量に略比例した確率で配置する、という性質を維持する。
【００７６】
本実施例では、係る性質を実現するために、オブジェクト配置装置５００では１次元の連続した空間（即ち、数直線と捉えることもできる）を用意し、該空間上に各ストレージノードの容量に比例した部分空間を、互いに重複しないように各ストレージノードに割り当てる。
【００７７】
図７は、本発明の第１及び第２の実施形態に係る実施例における複数のストレージノードの記憶容量を、１次元空間における部分空間（Ａ乃至Ｄ）として表した例を示す図である。即ち、図７に例示する１次元空間において、ストレージノード５００ａ乃至５００ｅは、それぞれ１個の実数により当該１次元空間上の位置を表現する。
【００７８】
本実施例において、オブジェクト配置装置５００は、上述した乱数発生装置１００（１０）を使用することによって乱数を発生する。オブジェクト配置装置５００は、乱数発生装置１００が発生する乱数の値の範囲を、乱数に対応する座標（即ち、本実施例では当該１次元空間：図７）が全てのストレージノードに割り当てられている部分空間を含むように設定する。乱数に対応する座標がストレージノードに割り当てられた部分空間を指し示している場合、オブジェクト配置装置５００は、乱数に対応する座標が指し示している部分空間が割り当てられているストレージノードに対して、オブジェクトを配置する。
【００７９】
一方、乱数に対応する座標がストレージノードに割り当てられた部分空間を指し示していない場合、オブジェクト配置装置５００は、乱数に対応する座標がストレージノードに割り当てられた部分空間を指し示すまで、乱数発生装置１００による乱数発生と、乱数に対応する座標がストレージノードに割り当てられた部分空間を指し示しているか否かの判定を繰り返す。
【００８０】
本実施例において、ストレージノード５００ａ乃至５００ｅは、例えば、図６及び以下の示す通りの記憶容量（最大記憶容量）を有することとする。即ち、
・ストレージノード５００ａ：  １．０ [ＴｅｒａＢｙｔｅｓ]、
・ストレージノード５００ｂ：  ０．５ [ＴｅｒａＢｙｔｅｓ]、
・ストレージノード５００ｃ：  ０．７ [ＴｅｒａＢｙｔｅｓ]、
・ストレージノード５００ｄ：  １．８ [ＴｅｒａＢｙｔｅｓ]、
・ストレージノード５００ｅ：  ０．２ [ＴｅｒａＢｙｔｅｓ]。
【００８１】
図８は、本発明の第１及び第２の実施形態に係る実施例における部分空間とストレージノードとの対応表（部分空間−ストレージノード対応表６００）を表す図である。
【００８２】
即ち、図７及び図８に示すように、ストレージノード５００ａは、当該一次元空間上の０から１（１は含まない）の部分空間に対応する。ストレージノード５００ｂは、当該一次元空間上の１から１．５（１．５は含まない）の部分空間に対応する。ストレージノード５００ｃは、当該一次元空間上の２から２．７（２．７は含まない）の部分空間に対応する。ストレージノード５００ｄは、当該一次元空間上の３から４（４は含まない）の部分空間と、同空間上の５から５．８（５．８は含まない）の部分空間とに対応する。そして、ストレージノード５００ｅは、当該一次元空間上の４から４．２（４．２は含まない）の部分空間に対応する。
【００８３】
乱数発生装置１００（１０）は、本実施例において、例えば、−１．０から８．０までの実数を生成し、２つのサブ乱数発生機能１０２（サブ乱数発生機能１０２Ａおよびサブ乱数発生機能１０２Ｂ）を有することとする。この場合、サブ乱数発生機能１０２Ａは、０．０から６．０までの実数を乱数として発生することとする。そして、サブ乱数発生機能１０２Ｂは、−１．０から８．０までの実数を乱数として発生することとする。つまり、サブ乱数発生機能１０２Ａが発生する乱数列の値域は、図７に示すように、０．０から６．０までの実数が指し示す空間を指し示し、サブ乱数発生機能１０２Ｂが発生する乱数は、−１．０から８．０までの実数が指し示す空間を指し示す。
【００８４】
ここで、オブジェクト配置装置５００に、識別子情報“ａ”を持つオブジェクトデータＡを入力した場合について述べる。
【００８５】
サブ乱数発生機能１０２Ａが生成する乱数が指し示す空間は、部分空間−ストレージノード対応表６００に示したように、本実施例において全ての部分空間を含む。このため、乱数発生装置１００は、上述した実施形態における乱数発生装置１００の動作の如くサブ乱数発生機能１０２Ａのみを使用する。
【００８６】
この場合、サブ乱数発生機能１０２Ａは、まず、識別子情報“ａ”に文章列“Ａ”を追加した文字列に関するハッシュを計算する。この計算によって得られるハッシュ値をハッシュＡとする。
【００８７】
次に、オブジェクト配置装置５００内部の乱数発生装置１００において、サブ乱数発生機能１０２Ａは、乱数を生成する。
【００８８】
まず、最も乱数列の値域が広いサブ乱数発生機能１０２Ａにより、ハッシュＡをシードとして用いて乱数を発生する。ここでは、生成された乱数が１．７であるとする。この場合、乱数列の値域が当該サブ乱数発生機能１０２Ａよりも狭い他のサブ乱数発生機能１０２は存在しないため、当該生成された乱数１．７は、乱数発生装置１００が出力すべき乱数である。
【００８９】
次に、オブジェクト配置装置５００は、乱数が指し示す部分空間が存在するか否かを判定する。乱数は１．７であるため、図７及び図８に示した関係を考慮すると、この乱数が指し示す部分空間は存在しないことが判る。そのため、オブジェクト配置装置５００内部の乱数発生装置１００において、サブ乱数発生機能１０２Ａは、新たな乱数を生成する。
【００９０】
即ち、サブ乱数発生機能１０２Ａは、次の乱数を生成する。ここでは、生成された乱数が４．９であるとする。この場合においても、乱数列の値域が当該サブ乱数発生機能１０２Ａよりも狭い他のサブ乱数発生機能１０２は存在しないため、乱数４．９は、乱数発生装置１００が出力すべき乱数である。
【００９１】
そして、サブ乱数発生機能１０２Ａは、乱数が指し示す部分空間が存在するか否かを再び判定する。注目する乱数は４．９であるため、図７及び図８に示した関係を考慮すると、この場合も、当該乱数が指し示す部分空間は存在しない。そのため、サブ乱数発生機能１０２Ａは、新たな乱数を生成する。
【００９２】
この場合も上述した手順と同様に乱数を計算した結果として乱数０．４を得て、その乱数の値が乱数発生装置１００の出力すべき乱数として選択されたとする。
【００９３】
そして、オブジェクト配置装置５００は、係る乱数０．４が指し示す部分空間が存在するか否かを、図８（図７）を参照することによって判断する。するとこの場合、当該乱数０．４が指し示す部分空間（Ａ）が存在し、該部分空間がストレージノード５００ａに対応することが判る。よって、この場合、オブジェクト配置装置５００は、オブジェクトデータＡを、ストレージノード５００ａに配置する。
【００９４】
ここで、サブ乱数発生機能（１０２）が略一様に乱数を生成する場合、乱数発生装置が発生する乱数も略一様になる。乱数が略一様で、乱数列の値域が全ての部分空間を含むとき、各配置先（本実施例においてはストレージノード５００ａ乃至５００ｅ）が、あるオブジェクト５０２の配置先として選ばれる可能性は、各配置先に対応する部分空間の広さ（大きさ）に略比例する。
【００９５】
（ストレージノードの追加）
ここで、０．３[ＴｅｒａＢｙｔｅｓ]の記憶容量を持つストレージノード５００ｆを、オブジェクト配置装置５００に新たに追加し、これにより、ストレージノード５００ｆを空間上の６から６．３（６．３は含まない）の部分空間に対応付けた場合を考える。
【００９６】
この場合、個々のオブジェクトデータを記憶するストレージノードが変更になる可能性があるため、オブジェクト配置装置５００は、それらオブジェクトノードを記憶するストレージノードを再度計算する。ここでも、識別子情報“ａ”を持つオブジェクトデータＡを配置すべきストレージノードを演算する場合を考える。
【００９７】
この場合、ストレージノード５００ｆに対応する部分空間Ｆが追加されたことにより、サブ乱数発生機能１０２Ａが発生する乱数が指し示す空間では、全ての部分空間を包含することができない。そこでこのような場合、オブジェクト配置装置５００内部の乱数発生装置１００は、乱数発生装置１００はサブ乱数発生機能１０２Ａだけでなく、係る追加された部分空間Ｆも包含可能なサブ乱数空間発生機能１０２Ｂを使用することを決定する。
【００９８】
まず、オブジェクト配置装置５００は、識別子情報“ａ”に文章列“Ａ”もしくは文章列“Ｂ”を追加し、追加後の文字列に関するハッシュを計算する。本実施例においては、文章列“Ａ”に関して計算されたハッシュをハッシュＡとし、文章列“Ｂ”に関して計算されたハッシュをハッシュＢとする。
【００９９】
次に、オブジェクト配置装置５００内部の乱数発生装置１００は、生成する乱数列の値域が最も広いサブ乱数発生機能１０２Ｂにより、ハッシュＢをシードとして用いて乱数を生成する。ここでは、算出された乱数が３．０であるとする。この場合、乱数３．０は、サブ乱数発生機能１０２Ａの乱数列の値域に含まれる。このため、乱数発生装置１００は、図４を参照して上述したように、乱数３．０を採用（出力）するのではなく、サブ乱数発生機能１０２Ｂに係る値域よりも範囲が狭いサブ乱数発生機能１０２Ａによって新たな乱数を生成する。この場合、サブ乱数発生機能１０２Ａは、ハッシュＡをシードとして用いて乱数を生成する。ここでは算出された乱数が１．７であるとする。本実施例においては、サブ乱数発生機能１０２Ａより乱数列の値域が狭い乱数生成手段は存在しない。このため、乱数１．７は、乱数発生装置１００が出力すべき乱数である。
【０１００】
次に、オブジェクト配置装置５００は、係る乱数１．７が指し示す部分空間が存在するか否かを判定するも、図８（図７）に示すように、この乱数に対応する部分空間は存在しない。そのため、乱数発生装置１００は、乱数の発生を再度行う。
【０１０１】
そこで、オブジェクト配置装置５００内部の乱数発生装置１００は、図４に示したフローチャートの手順に従って改めて乱数を生成する。即ち、乱数発生装置１００は、発生する乱数列の値域が最も広いサブ乱数発生機能１０２Ｂにより、次の乱数を生成する。ここでは、算出された乱数が６．２であるとする。この場合、乱数６．２は、次に乱数列の値域が広いサブ乱数発生機能１０２Ａの乱数列の値域に含まれない。このため、乱数６．２は、乱数発生装置１００が出力すべき乱数である。
【０１０２】
そして、オブジェクト配置装置５００は、係る乱数６．２が指し示す部分空間が存在するか否かを判定する。この場合、当該乱数６．２が指し示す部分空間Ｆが存在し、該部分空間Ｆには、ストレージノード５００ｆが対応付する。そこで、オブジェクト配置装置５００は、オブジェクトデータＡを、ストレージノード５００ｆに移動する。
【０１０３】
本実施例に係るオブジェクト配置装置５００では、配置先（ストレージノード）が追加された場合、追加した配置先にのみオブジェクトデータが移動する。係るオブジェクト配置装置５００において、そのオブジェクト配置装置が備える乱数生成装置１００が略一様に乱数を生成する。乱数発生装置１００が発生する乱数列の値域が全ての部分空間を含むとき、追加した配置先を含め、個々の配置先に対応する乱数が選ばれる可能性は、各配置先に対応する部分空間の広さ（大きさ）に略比例するという性質がある。
【０１０４】
このような性質を、乱数列の値域が変更された場合においても維持するためには、上述した第１及び第２の実施形態、並びに本実施例において上述した乱数発生装置１０，１００のように、係る変更後の乱数列に含まれる乱数の値のうち、当該変更前に生成する乱数列の値域に含まれる乱数の値が、当該変更前に生成する乱数の順番を維持すると共に、当該変更前の乱数列に含まれる乱数の値を生成可能な乱数発生装置が必要である。
【０１０５】
（ストレージノードの削除）
次に、オブジェクト配置装置５００からストレージノード５００ｆを削除する場合を考える。この場合、個々のオブジェクトデータを記憶するストレージノードが変更になる可能性があるため、オブジェクト配置装置５００は、それらオブジェクトノードを記憶するストレージノードを再度計算する。ここでも、識別子情報“ａ”を持つオブジェクトデータＡを配置するストレージノードを演算する場合を考える。
【０１０６】
サブ乱数発生機能１０２Ａが生成する乱数が指し示す空間は、図８（図７）から判るように、全ての部分空間を包含する。このため、オブジェクト配置装置５００において、乱数発生装置１００は、サブ乱数発生機能１０２Ａのみを使用する。
【０１０７】
まず、乱数発生装置１００は、識別子情報“ａ”に文章列“Ａ”を追加し、追加した文字列に関するハッシュを計算する。文章列“Ａ”に関するハッシュをハッシュＡとする。
【０１０８】
次に、オブジェクト配置装置５００において、乱数発生装置１００は、乱数を生成する。この場合も、乱数発生装置１００は、乱数列の値域が最も広いサブ乱数発生機能１０２Ａにより、ハッシュＡをシードとして用いて乱数を発生する。ここでは、算出された乱数が１．７であるとする。そしてこの場合、乱数列の値域がサブ乱数発生機能１０２Ａの次に広いサブ乱数発生機能１０２は存在しない。このため、乱数１．７は、乱数発生装置１００が出力すべき乱数である。そして、係る乱数１．７が指し示す部分空間は存在しないので、乱数発生装置１００は、乱数の生成を再度行う。
【０１０９】
そして、乱数発生装置１００において、サブ乱数発生機能１０２Ａによって次に算出された乱数が４．９であるとする。この場合も、サブ乱数発生機能１０２Ａによって生成された乱数４．９が採用されるべき乱数であるが、係る乱数４．９が指し示す部分空間はやはり存在しないので、乱数発生装置１００は、乱数の生成を再度行う。
【０１１０】
この場合、乱数発生装置１００は、サブ乱数発生機能１０２Ａにより改めて乱数を生成する。そしてこの場合、算出された乱数が０．４であるとすると、この乱数に対応する部分空間Ａが存在するので、オブジェクト配置装置５００は、その部分空間Ａに対応するストレージノード５００ａに、オブジェクトデータＡを移動する。
【０１１１】
オブジェクト配置装置５００では、配置先（ストレージノード）が削除された場合、削除した配置先に配置されていたオブジェクトデータのみが移動する。係るオブジェクト配置装置５００において、そのオブジェクト配置装置が備える乱数生成装置１００が略一様に乱数を生成する。乱数発生装置１００の乱数列の値域が全ての部分空間を含む場合、残った配置先のうち、削除された特定の配置先に記憶されていたオブジェクトデータの新たな配置先として選ばれる可能性は、当該残った配置先それぞれに対応する部分空間の広さ（大きさ）に略比例するという性質がある。
【０１１２】
このような性質を乱数列の値域が変更された場合においても維持するためには、上述した第１及び第２の実施形態、並びに本実施例において上述した乱数発生装置１０，１００のように、係る変更後の乱数列に含まれる乱数の値のうち、当該変更前に生成する乱数列の値域に含まれる乱数の値が、当該変更前に生成する乱数の順番を維持すると共に、当該変更前の乱数列に含まれる乱数の値を生成可能な乱数発生装置が必要である。
【０１１３】
以上説明したように、本実施例に係るオブジェクト配置装置５００によれば、オブジェクトの配置先であるストレージノードを、そのストレージノードの記憶容量に合わせた長さの線分として1次元空間（数直線）に予め割り付け、乱数発生装置１００は、注目する乱数の値が、当該割り付けられた線分の数値範囲に含まれるまで乱数の発生を繰り返す。そして、乱数発生装置１００が生成したある乱数が何れかのストレージノードを割り付けた当該1次元空間上の数に一致したとき、その数に対応するストレージノードをオブジェクトの配置先であると決定する。
【０１１４】
このような処理構成の本実施例によれば、上記の一連の処理を行う場合に、乱数列の値域を変更することが可能である。これにより、乱数列の値域が固定の場合に比べて次のような利点がある。
【０１１５】
即ち、乱数列の値域が固定された装置構成の場合、想定を超えた数量のストレージノードは当該値域に割り付けられないので、改めて乱数列の値域の設定から改変する必要が生じる。この場合、オブジェクト配置装置では、変更後の新たな値域に基づいて多くの乱数の値が変化するため、個々のオブジェクトを記憶すべきストレージノードが大きく変化する事態の発生が予想される。
【０１１６】
これに対して本実施例によれば、乱数列の値域を、外部から設定する乱数の範囲情報１０５によって変更するのに応じて、オブジェクト配置装置５００は、ストレージノードの数量（単純には台数）が予め想定した数量に比べて多くなった場合であっても、当該数直線上（１次元空間）の乱数列の値域を拡大することができる。そして、オブジェクト配置装置５００において、新たに値域が拡大された後の乱数列に含まれ、且つ変更前の値域にも含まれる乱数の値は、係る変更の前後で乱数列における順番（発生順位）をそのまま維持することができる。即ち、オブジェクト配置装置５００によれば、乱数列の値域の拡大が必要な事態が生じた場合であっても柔軟に対応することができ、且つ格納すべきストレージノードを変更しなければならないオブジェクトの件数を極小化することができる。
【０１１７】
また、乱数列の値域が固定された装置構成の場合、ストレージノードが部分空間として割り付けられている数直線上の領域が非常に狭い場合、乱数列の値域を変更することができない。この場合、乱数の発生を何度も繰り返す必要がある場合があり、このような場合には最終的に割り付け先が決定されるまでに時間を要するという問題がある。
【０１１８】
これに対して本実施例に係るオブジェクト配置装置５００によれば、ストレージノードが部分空間として割り付けられている数直線上の領域が非常に狭い場合であっても、乱数の範囲情報１０５によって外部から指示するのに応じて、乱数列の値域を、係る狭い領域に応じて狭めることができる。このことは、乱数の発生回数を軽減できるということを意味するから、オブジェクト配置装置５００によれば、処理速度の高速化を実現することができる。
【０１１９】
このように、本実施例に係るオブジェクト配置装置５００によれば、上記の如く採用すべき値域の大きさを柔軟に変更できる。このため、オブジェクト配置装置５００を用いてオブジェクトをストレージノードに配置するシステムにおいては、運用開始に際して過大に大きな余裕を持った広い値域の乱数列を考慮しなくてもよい。即ち、係るシステムは、運用開始当初には必要最小限の値域を発生する乱数を用意し、その値域に最小限のストレージノードを部分空間として割り付ければよい。このことを換言すると、運用開始当初に少ない数量のストレージノードが必要なのにも関わらず、新たなストレージノードの将来の増設を考慮して広い値域の乱数列を採用して当該少ない数量のストレージノードを割り付けた場合は、配置先決定に要する時間の長期化が予想される。これに対して、係るオブジェクト配置装置５００を用いたシステムによれば、上記の如く採用する乱数列の値域を柔軟に変更することができると共に、変更に伴い影響を受けるオブジェクトを極小化できる。このため、係るオブジェクト配置装置５００を用いたシステムによれば、配置先決定までのレスポンスを担保すべく、運用開始当初のシステム規模に合わせた乱数列の値域を用いるスモールスタートを実現することが可能である。更に、係るシステムによれば、将来のシステム規模の拡大に際しても、そのシステム規模に応じた乱数列の値域を採用することができるので、配置先決定までのレスポンスに影響を与えることも防止することができる。
【０１２０】
尚、本実施例では、説明の便宜上から、１次元空間上に部分空間を配置した場合を例に説明した。しかしながら、本発明に係るオブジェクト配置装置は、複数次元の空間にも展適用可能である。ここで、複数次元の一例として２次元空間に部分空間を配置した場合について概説する。
【０１２１】
図９は、本発明の第１及び第２の実施形態に係る実施例におけるストレージノードの記憶容量を、２次元空間における部分空間として表した例を示す図である。図９に示す２次元空間は、２種類の乱数（Ａ，Ｂ）によって構成される。この２次元空間には、図９に例示する如く、乱数Ａである実数０から５の範囲、乱数Ｂである実数０から４の範囲において、複数の部分空間（Ａ〜Ｋ）が配置されている。
【０１２２】
このような２次元空間を利用する実装例としては、例えば、配置すべきオブジェクト自体が２次元空間で表される情報（例えば、高さを含まない地図情報等）である場合が想定される。この場合、個々のオブジェクト自体が有する次元と同じ次元のままで、当該個々のオブジェクトを、オブジェクト配置装置が採用している空間内の部分空間として割り当てることができる。
【０１２３】
即ち、上述した１次元空間を採用するオブジェクト配置装置５００を用いて、係る２次元情報からなるオブジェクトを配置する場合、当該１次元空間内の部分空間に個々のオブジェクトを割り当てる処理に先だって、当該個々のオブジェクトを表す２次元情報を、１次元情報に変換する処理が必要である。更に実装の態様によっては、配置先の決定結果を表す１次元情報を、２次元情報に変換する処理が必要である。このことは、一連の処理に余分な時間を要し、処理負担（処理コスト）が大きいことを表す。
【０１２４】
これに対して、当該個々のオブジェクトを表す２次元情報を、そのまま２次元空間内の部分空間として割り当てられる装置構成の場合は、係る余分な処理負担が生じることはない。このため、係る装置構成によれば、オブジェクト配置装置の構成を、簡素に実現することがでると共に、オブジェクトを柔軟且つ高速に配置することができる。このことは、オブジェクトが２次元情報で表される場合に限定される効果ではない。即ち、係る効果は、配置先を決定すべきオブジェクトがｎ次元情報の場合（ｎ≧１）には、当該ｎ次元情報をそのまま割り当てられる複数次元空間を扱うオブジェクト配置装置を採用することによって享受できる。
【０１２５】
以上、本発明を、上述した模範的な実施形態およびその実施例に適用した例として説明した。しかしながら、本発明の技術的範囲は、上述した各実施形態及び実施例に記載した範囲には限定されない。当業者には、係る実施形態に対して多様な変更又は改良を加えることが可能であることは明らかである。そのような場合、係る変更又は改良を加えた新たな実施形態も、本発明の技術的範囲に含まれ得る。そしてこのことは、特許請求の範囲に記載した事項から明らかである。
【０１２６】
即ち、本発明は、本発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
【０１２７】
この出願は、２０１２年２月１５日に出願された日本出願特願２０１２−０３０９７６を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０１２８】
１０，１００    乱数発生装置
１２    乱数発生機能
１０１    シード提供機能
１０２    サブ乱数発生機能
１３，１０３    乱数選択機能
１４，１０４ａ，１０４ｂ    シード情報
１５，１０５    乱数の範囲情報
１６，１０６    乱数列
４０１    ＣＰＵ
４０２    ＲＯＭ
４０３    ＲＡＭ
４０４    ＨＤＤ
４０５    バス（通信路）
５００    オブジェクト配置装置
５００ａ〜５００ｅ    ストレージノード
５０１    オブジェクト配置機能
５０２    オブジェクト
６００    部分空間−ストレージノード対応表
１０００    情報処理装置（コンピュータ）
【図１】
0006044628.tif 000002
【図２】
0006044628.tif 000003
【図３】
0006044628.tif 000004
【図４】
0006044628.tif 000005
【図５】
0006044628.tif 000006
【図６】
0006044628.tif 000007
【図７】
0006044628.tif 000008
【図８】
0006044628.tif 000009
【図９】
0006044628.tif 000010
【図１０】
0006044628.tif 000011