(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024109227
(43)【公開日】2024-08-14
(54)【発明の名称】度数分布データ生成装置、度数分布データ生成方法、および、プログラム
(51)【国際特許分類】
G06F 17/18 20060101AFI20240806BHJP
【FI】
G06F17/18 D
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2023013923
(22)【出願日】2023-02-01
(71)【出願人】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100149548
【弁理士】
【氏名又は名称】松沼 泰史
(74)【代理人】
【識別番号】100181135
【弁理士】
【氏名又は名称】橋本 隆史
(72)【発明者】
【氏名】石坂 一久
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB64
(57)【要約】
【課題】数列に含まれる数の度数分布を示すデータを生成する際、数列に応じた区間幅の度数分布を示すデータを、比較的短時間で生成できるようにする。
【解決手段】度数分布データ生成装置が、設定された区間幅の区間ごとに、数列に含まれる数のうちその区間に含まれる数の個数を示す度数分布データについて、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が所定の閾値よりも多いか否かを推定する区間数判定手段と、前記区間の個数が前記閾値よりも多いと推定された場合、前記区間幅の設定をより広い区間幅に変更する区間幅設定手段と、変更後の区間幅で前記度数分布データを生成する度数分布データ生成手段と、を備える。
【選択図】
図1
【特許請求の範囲】
【請求項1】
設定された区間幅の区間ごとに、数列に含まれる数のうちその区間に含まれる数の個数を示す度数分布データについて、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が所定の閾値よりも多いか否かを推定する区間数判定手段と、
前記区間の個数が前記閾値よりも多いと推定された場合、前記区間幅の設定をより広い区間幅に変更する区間幅設定手段と、
変更後の区間幅で前記度数分布データを生成する度数分布データ生成手段と、
を備える度数分布データ生成装置。
【請求項2】
前記区間数判定手段は、前記度数分布データ生成手段が生成中の度数分布データに含まれる区間の個数が前記閾値よりも多いか否かを判定することで、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が前記閾値よりも多いか否かを推定し、
前記度数分布データ生成手段は、前記区間の個数が前記閾値よりも多いと判定された場合、変更前の区間幅の度数分布データの生成を中止し、変更後の区間幅の度数分布データを生成する、
請求項1に記載の度数分布データ生成装置。
【請求項3】
前記区間幅設定手段は、区間幅変更前の何れの区間も区間幅変更後の1つの区間に含まれるように前記区間幅を変更し、
前記度数分布データ生成手段は、区間幅変更前の区間に含まれる数の個数を、区間幅変更後の同一の区間に含まれる全ての区間幅変更前の区間について合計する、
請求項2に記載の度数分布データ生成装置。
【請求項4】
前記区間幅設定手段は、前記区間の個数が前記閾値よりも多いと推定されなくなるまで、前記区間幅の設定の変更を繰り返す、
請求項1に記載の度数分布データ生成装置。
【請求項5】
前記度数分布データ生成手段は、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が前記閾値以下であると推定され、かつ、前記数列に含まれる数のうち前記度数分布データに反映されていない数があると判定した場合、前記数列に含まれる数のうち前記度数分布データに反映されていない数を前記度数分布データに反映させる処理を、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が前記閾値よりも多いと推定されるか、または、前記数列に含まれる全ての数が前記度数分布データに反映されたと判定するまで繰り返す、
請求項1に記載の度数分布データ生成装置。
【請求項6】
前記度数分布データ生成手段は、前記数列に含まれる数が含まれる個数が0個の区間を含まない度数分布データを生成する、
請求項1に記載の度数分布データ生成装置。
【請求項7】
前記度数分布データ生成手段は、ハッシュテーブルの形式による度数分布データにおけるキーを、前記数列に含まれる数を2進数で示すビット列に対するシフト演算によって生成する、
請求項6に記載の度数分布データ生成装置。
【請求項8】
前記度数分布データ生成手段は、ハッシュテーブルの形式による度数分布データにおけるキーを、前記数列に含まれる数を2進数で示すビット列に対するマスキングによって生成する、
請求項6に記載の度数分布データ生成装置。
【請求項9】
コンピュータが、
設定された区間幅の区間ごとに、数列に含まれる数のうちその区間に含まれる数の個数を示す度数分布データについて、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が所定の閾値よりも多いか否かを推定し、
前記区間の個数が前記閾値よりも多いと推定した場合、前記区間幅の設定をより広い区間幅に変更し、
変更後の区間幅で前記度数分布データを生成する、
ことを含む度数分布データ生成方法。
【請求項10】
コンピュータに、
設定された区間幅の区間ごとに、数列に含まれる数のうちその区間に含まれる数の個数を示す度数分布データについて、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が所定の閾値よりも多いか否かを推定することと、
前記区間の個数が前記閾値よりも多いと推定した場合、前記区間幅の設定をより広い区間幅に変更することと、
変更後の区間幅で前記度数分布データを生成することと、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、度数分布データ生成装置、度数分布データ生成方法、および、プログラムに関する。
【背景技術】
【0002】
数列に含まれる数の度数分布を示すデータが生成される場合がある。例えば、特許文献1には、M-bit整数列を基数ソートする際に、並び替え対象の整数列の上位Kビットのビット位置の出現頻度のヒストグラムを作成することが記載されている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
数列に含まれる数の度数分布を示すデータを生成する際、数列に応じた区間幅の度数分布を示すデータを、なるべく短時間で生成できることが好ましい。
【0005】
本発明の目的の一例は、上述の課題を解決することのできる度数分布データ生成装置、度数分布データ生成方法、および、プログラムを提供することである。
【課題を解決するための手段】
【0006】
本発明の第1の態様によれば、度数分布データ生成装置は、設定された区間幅の区間ごとに、数列に含まれる数のうちその区間に含まれる数の個数を示す度数分布データについて、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が所定の閾値よりも多いか否かを推定する区間数判定手段と、前記区間の個数が前記閾値よりも多いと推定された場合、前記区間幅の設定をより広い区間幅に変更する区間幅設定手段と、変更後の区間幅で前記度数分布データを生成する度数分布データ生成手段と、を備える。
【0007】
本発明の第2の態様によれば、度数分布データ生成方法は、コンピュータが、設定された区間幅の区間ごとに、数列に含まれる数のうちその区間に含まれる数の個数を示す度数分布データについて、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が所定の閾値よりも多いか否かを推定し、前記区間の個数が前記閾値よりも多いと推定した場合、前記区間幅の設定をより広い区間幅に変更し、変更後の区間幅で前記度数分布データを生成する、ことを含む。
【0008】
本発明の第3の態様によれば、プログラムは、コンピュータに、設定された区間幅の区間ごとに、数列に含まれる数のうちその区間に含まれる数の個数を示す度数分布データについて、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が所定の閾値よりも多いか否かを推定することと、前記区間の個数が前記閾値よりも多いと推定した場合、前記区間幅の設定をより広い区間幅に変更することと、変更後の区間幅で前記度数分布データを生成することと、を実行させるためのプログラムである。
【発明の効果】
【0009】
本発明によれば、数列に含まれる数の度数分布を示すデータを生成する際、数列に応じた区間幅の度数分布を示すデータを、比較的短時間で生成できる。
【図面の簡単な説明】
【0010】
【
図1】実施形態に係る度数分布データ生成装置の構成の例を示す図である。
【
図2】ソート対象の整数の、コアへの振り分けの例を示す図である。
【
図3】実施形態に係る、ハッシュテーブルの形式による度数分布データの例を示す図である。
【
図4】実施形態に係る、入力データに含まれる数が含まれる個数が0個の区間を含まない、ハッシュテーブルの形式による度数分布データの例を示す図である。
【
図5】区間幅が比較的狭い度数分布データの例を示す図である。
【
図6】実施形態に係る度数分布データ生成装置による度数分布データの生成の過程における度数分布データの変更の第1の例を示す図である。
【
図7】実施形態に係る度数分布データ生成装置による度数分布データの生成の過程における度数分布データの変更の第2の例を示す図である。
【
図8】実施形態に係る度数分布データ生成装置による度数分布データの生成の過程における度数分布データの変更の第3の例を示す図である。
【
図9】実施形態に係る度数分布データ生成装置による度数分布データの生成の過程における度数分布データの変更の第4の例を示す図である。
【
図10】実施形態に係る度数分布データ生成装置による度数分布データの生成の過程における度数分布データの変更の第5の例を示す図である。
【
図11】実施形態に係る度数分布データ生成部がビット列に対するマスキングで算出するキーの第1の例を示す図である。
【
図12】実施形態に係る度数分布データ生成部がビット列に対するマスキングで算出するキーの第2の例を示す図である。
【
図13】実施形態に係る度数分布データ生成部がビット列に対するマスキングで算出するキーの第3の例を示す図である。
【
図14】実施形態に係る度数分布データ生成部がシフト演算で算出するキーの例を示す図である。
【
図15】実施形態に係る度数分布データ生成装置が度数分布データを生成する処理手順の例を示す図である。
【
図16】実施形態に係る度数分布データ生成部が、区間幅変更前の度数分布データを区間幅変更後の度数分布データに変更する処理の手順の例を示す図である。
【
図17】実施形態に係る度数分布データ生成装置のもう1つの構成の例を示す図である。
【
図18】実施形態に係る度数分布データ生成方法における処理の手順の例を示す図である。
【
図19】少なくとも1つの実施形態に係るコンピュータの構成を示す概略ブロック図である。
【発明を実施するための形態】
【0011】
以下、本発明の実施形態を説明するが、以下の実施形態は請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図1は、実施形態に係る度数分布データ生成装置の構成の例を示す図である。
図1に示す構成で、度数分布データ生成装置100は、通信部110と、表示部120と、操作入力部130と、記憶部180と、制御部190とを備える。制御部190は、区間数判定部191と、区間幅設定部192と、度数分布データ生成部193とを備える。
【0012】
度数分布データ生成装置100は、入力データとして取得した数列に含まれる数の度数分布データを生成する。ここでいう度数分布データは、設定された区間幅の区間ごとに、数列に含まれる数のうちその区間に含まれる数の個数を示すデータである。度数分布データは、数列における数の度数分布を示すデータの例に該当する。
度数分布データにおける区間を階級とも称する。度数分布データ生成装置100が入力データとして取得する数列に含まれる数を、単に入力データに含まれる数とも称する。
【0013】
以下では、度数分布データ生成装置100が、マルチコアプロセッサを用いたソートにおいて、ソート対象の数列に含まれる整数をなるべく均等に各コアに振り分けるための度数分布データを生成する場合を例に説明する。
ただし、度数分布データ生成装置100が生成する度数分布データの用途は、特定の用途に限定されない。例えば、度数分布データ生成装置100が、度数分布表またはヒストグラムをユーザに提示するために度数分布データを生成するようにしてもよい。
【0014】
また、入力データに含まれる数は整数に限定されない。入力データに含まれる数は、例えば小数点以下の桁数が固定の小数など、所定の桁数以下のいろいろな数とすることができる。
【0015】
また、度数分布データ生成装置100が、数列のソートに用いられる度数分布データを生成する場合、度数分布データ生成装置100自らがソートの機能を備えていてもよい。あるいは、ソートを行う装置が度数分布データ生成装置100とは別の装置として構成され、度数分布データ生成装置100が、ソートを行う装置に度数分布データを送信するようにしてもよい。
【0016】
また、度数分布データ生成装置100が、数列のソートに用いられる度数分布データを生成する場合のソートは、マルチコアプロセッサを用いたソートに限定されない。例えば、マルチノードサーバが、度数分布データ生成装置100が生成した度数分布データを用いてマルチノードによるソートを行うようにしてもよい。
【0017】
通信部110は、他の装置と通信を行う。例えば、通信部110が、度数分布データ生成対象の数列を記憶する装置と通信をおこなって、度数分布データ生成対象の数列を取得するようにしてもよい。この場合、通信部110が取得する数列は、入力データの例に該当する。
【0018】
表示部120は、例えば液晶パネルまたはLED(Light Emitting Diode、発光ダイオード)パネル等の表示画面を備え、各種画像を表示する。例えば、表示部120が、度数分布データ生成装置100が生成した度数分布データを表形式で表示するようにしてもよい。
操作入力部130は、例えばキーボードおよびマウス等の入力デバイスを備え、ユーザ操作を受け付ける。例えば、操作入力部130が、度数分布データの生成を指示するユーザ操作を受け付けるようにしてもよい。
【0019】
記憶部180は、各種データを記憶する。例えば、記憶部180が入力データを記憶しておくようにしてもよい。記憶部180は、度数分布データ生成装置100が備える記憶デバイスを用いて構成される。
制御部190は、度数分布データ生成装置100の各部を制御して各種処理を行う。制御部190の機能またはその一部が、度数分布データ生成装置100が備えるCPU(Central Processing Unit、中央処理装置)が、記憶部180からプログラムを読み出して実行することで実行されてもよい。
【0020】
区間数判定部191は、度数分布データに、入力データに含まれる全ての数が反映されたときの度数分布データに含まれる区間の個数が所定の閾値よりも多いか否かを推定する。すなわち、区間数判定部191は、現在の区間幅の設定で、度数分布データ生成装置100が、入力データに含まれる全ての数が反映された度数分布データを完成させた場合、その度数分布データに含まれる区間の個数が所定の閾値よりも多いか否かを予測する。
区間数判定部191は、区間数判定手段の例に該当する。
【0021】
例えば、度数分布データ生成装置100は、入力データに含まれる数を1つずつ度数分布データに反映させていくように、度数分布データを生成する。そして、区間数判定部191は、度数分布データ生成装置100が生成中の度数分布データに含まれる区間の個数が閾値よりも多いか否かを判定する。度数分布データ生成装置100が生成中の度数分布データに含まれる区間の個数が閾値よりも多いと判定した場合、区間数判定部191は、現在の区間幅の設定では、入力データに含まれる全ての数が反映された度数分布データに含まれる区間の個数も、閾値よりも多いと推定する。
【0022】
度数分布データに含まれる区間の個数を、度数分布データのサイズとも称する。度数分布データに含まれる区間の個数が多いことを、度数分布データのサイズが大きいとも称する。度数分布データに含まれる区間の個数が少ないことを、度数分布データのサイズが小さいとも称する。
【0023】
区間幅設定部192は、入力データに含まれる全ての数が反映されたときの度数分布データに含まれる区間の個数が所定の閾値よりも多いと区間数判定部191が推定した場合、区間幅をより広い区間幅に変更する。
区間幅設定部192は、区間幅設定手段の例に該当する。
区間幅が広いことを、区間幅が大きいとも称する。区間幅が狭いことを区間幅が小さいとも称する。
【0024】
区間幅設定部192は、入力データに含まれる全ての数が反映されたときの度数分布データに含まれる区間の個数が所定の閾値よりも多いと区間数判定部191が推定しなくなるまで、区間幅の変更を繰り返す。具体的には、区間幅設定部192は、入力データに含まれる全ての数が反映されたときの度数分布データに含まれる区間の個数が所定の閾値よりも多いと区間数判定部191が推定するごとに、区間幅の設定を、より広い区間幅に設定し直す。
【0025】
ここで、区間幅が広いほど、得られる度数分布データに含まれる区間の個数が少なく、度数分布データの生成および得られた度数分布データへのアクセスを、より短時間で行えることが期待される。
一方、区間幅が広い場合、入力データに含まれる数の分布によっては、コアに割り当てられる数の個数にばらつきが生じる。
【0026】
図2は、ソート対象の整数の、コアへの振り分けの例を示す図である。
図2は、0から9999までの区間を、同じ区間幅で4つの区間に区分し、それぞれの区間に含まれる整数をコアに振り分ける場合の例を示している。
図2の例では、コア1、コア2にそれぞれ4個の整数が割り当てられ、コア3には8個の整数が割り当てられている。一方、コア0には、整数は割り当てられていない。
【0027】
このように、整数の分布に偏りがある場合、コア数と同じ個数の区間を同じ区間幅で設けたのでは、区間によってその区間に含まれる整数の個数にばらつきが生じ、ソートの負荷バランスが悪くなってしまう。
そこで、区間幅設定部192は、上記のように、入力データに含まれる全ての整数が反映された度数分布データ(最終的に得られる度数分布データ)に含まれる区間の個数が閾値以下になるように、区間幅を設定し直す。
【0028】
これにより、度数分布データ生成装置100が生成する度数分布データに含まれる区間の個数が閾値以下となる範囲で、区間幅をなるべく大きくすることができ、度数分布データの生成時間および得られた度数分布データへのアクセス時間の短縮と、各コアへの整数の割当の均等化とのトレードオフを調整することができる。度数分布データ生成装置100によれば、この点で、数列における整数の度数分布を示すデータを生成する際、数列に応じた区間幅の度数分布を示すデータを、比較的短時間で生成できる。
【0029】
度数分布データ生成部193は、度数分布データの生成を実行する。特に、区間幅設定部192が区間幅を変更した場合、度数分布データ生成部193は、変更後の区間幅で度数分布データを生成する。
変更前の区間幅の度数分布データを、区間幅変更前の度数分布データとも称する。変更後の区間幅の度数分布データを、区間幅変更後の度数分布データとも称する。
【0030】
例えば、度数分布データ生成装置100について上述したように、区間数判定部191は、度数分布データ生成部193が生成中の度数分布データに含まれる区間の個数が閾値よりも多いか否かを判定する。そして、区間の個数が閾値よりも多いと区間数判定部191が判定した場合、度数分布データ生成部193は、区間幅変更前の度数分布データの生成を中止し、区間幅変更後の度数分布データを生成する。
度数分布データ生成部193は、度数分布データ生成手段の例に該当する。
【0031】
度数分布データ生成部193が、ハッシュテーブルの形式による度数分布データを生成するようにしてもよい。ここでいうハッシュテーブルは、キー(Key)と値(Value)との組み合わせによる行を含んで構成される表である。
【0032】
図3は、ハッシュテーブルの形式による度数分布データの例を示す図である。
図3の例では、0から9999までの区間が、0から999まで、1000から1999まで、・・・のように区間幅1000の区間に分割されており、区間ごとに、その区間に含まれる整数の個数が示されている。各区間は、「0000」、「1000」、・・・のように、その区間の最小値の4桁表示で示されている。
各区間の最小値を示す4桁の整数は、ハッシュテーブルにおけるキーの例に該当する。各区間に含まれる整数の個数は、ハッシュテーブルにおける値の例に該当する。
ハッシュテーブルの行数は、度数分布データに含まれる区間の個数の例に該当する。
【0033】
度数分布データ生成部193が、入力データに含まれる数が含まれる個数が0個の区間を含まない、ハッシュテーブルの形式による度数分布データを生成するようにしてもよい。
図4は、入力データに含まれる数が含まれる個数が0個の区間を含まない、ハッシュテーブルの形式による度数分布データの例を示す図である。
図4は、
図3の例における度数分布データから、入力データに含まれる整数が含まれる個数が0個の行を除いた度数分布データを示している。
【0034】
度数分布データ生成部193が、度数分布データを、入力データに含まれる数が含まれる個数が0個の区間を含まないハッシュテーブルの形式で生成することで、度数分布データに含まれる区間の個数(ハッシュテーブルの行数)が比較的少なくなる。度数分布データ生成部193によれば、この点で、度数分布データの生成時間、および、生成された度数分布データへのアクセス時間が比較的短くて済む。また、度数分布データ生成部193が、度数分布データを、入力データに含まれる数が含まれる個数が0個の区間を含まないハッシュテーブルの形式で生成することで、度数分布データを記憶するためのメモリ容量が比較的少なくて済む。
【0035】
また、入力データに含まれる数が含まれる個数が0個の区間を含まないハッシュテーブルでは、キーで示されていない区間(その区間を示すキーがハッシュテーブルに含まれていない区間)の個数は0と読み取ることができる。この点で、ハッシュテーブルによって、入力データに含まれる数が含まれる個数が0個の区間を含む度数分布データと同じ情報を提供することができる。
【0036】
以下では、度数分布データ生成部193が、度数分布データを、入力データに含まれる数が含まれる個数が0個の区間を含まないハッシュテーブルの形式で生成する場合を例に説明する。ただし、度数分布データ生成部193が生成する度数分布データの形式は特定の形式に限定されない。
【0037】
図5は、区間幅が比較的狭い度数分布データの例を示す図である。
図4が、区間幅が1000の度数分布データの例を示しているのに対し、
図5は、区間幅が100の度数分布データを示している。
図4の度数分布データおよび
図5の度数分布データの何れも、
図2の例における入力データに含まれる整数の分布を示している。
【0038】
図5の例で、4500から4599までの区間に含まれている2個の整数と、4700から4799までの区間に含まれている1個の整数との合計3個の整数が、
図4の例では、4000から4999までの区間に含まれている。また、
図5の例で、5000から5099までの区間に含まれている1個の整数と、5900から5999までの区間に含まれている1個の整数との合計2個の整数が、
図4の例では、5000から5999までの区間に含まれている。
【0039】
図5の例のように、区間幅が比較的狭く設定されている場合、各区間に含まれる整数の個数がより均等になり、整数をコアに割り当てる場合に、各コアに割り当てられる整数の個数をなるべく均等にし易くなると期待される。
【0040】
一方、区間幅が比較的狭く設定されている場合、度数分布データに含まれる区間の個数が比較的多くなり、度数分布データの生成、および、生成された度数分布データへのアクセスに時間を要することが考えられる。
図4の例では、度数分布データに含まれる区間の個数が6個であるのに対し、
図5の例では、度数分布データに含まれる区間の個数は15個となっている。
【0041】
ここで、適切な区間幅は、度数分布データ生成対象の数列に依存する。
数列に含まれる数がある程度均等に分布している場合、区間幅が比較的大きく設定されていても、各区間に含まれる数の個数がある程度均等になることが期待される。一方、数列に含まれる数の分布が偏っている場合、各区間に含まれる数の個数をある程度均等にするために、区間幅を小さく設定する必要があることが考えられる。
【0042】
適切な区間幅が、度数分布データ生成対象の数列に依存することから、区間幅を予め適切に設定しておくことは困難である。そこで、区間幅設定部192は、区間幅を比較的小さく設定しておき、度数分布データに含まれる区間の個数が所定の閾値以下になるまで、区間幅を大きくしていく。
このように、区間幅設定部192が区間幅を変更することで、度数分布データ生成部193は、区間の個数が所定の閾値以下の度数分布データを、度数分布データ生成対象の数列に応じた区間幅で生成することができる。
【0043】
図6は、度数分布データ生成装置100による度数分布データの生成の過程における度数分布データの変更の第1の例を示す図である。
図6は、度数分布データ生成装置100が、
図2に示される入力データに含まれる整数の度数分布データを生成する場合の例を示している。また、
図6の例では、度数分布データに含まれる区間の個数の閾値は8に設定されている。
【0044】
図6の例で、区間幅設定部192は、区間幅を10に初期設定しており、度数分布データ生成部193は、区間幅設定部192が初期設定した区間幅による度数分布データの生成を開始している。区間幅設定部192は、度数分布データの初期値として、行数が0の、表形式の度数分布データを設定している。
【0045】
次に、区間幅設定部192は、度数分布データ生成対象の数列に含まれる整数を、数列の先頭から順に参照して、度数分布データに反映させている。
具体的には、区間幅設定部192は、入力データにおける先頭の整数「4536」を参照し、区間幅10に応じて1の位を「0」に置き換えた「4530」をキーとして算出する。その時点での度数分布データには、キーが「4530」の行は無いので、区間幅設定部192は、キーが「4530」、値が「1」の行を度数分布データに追加する。
整数の1の位を「0」に置き換えることは、整数に対するマスキングの例に該当する。
【0046】
次に、区間幅設定部192は、入力データにおける2番目の整数「7433」を参照し、キーを「7430」と算出する。その時点での度数分布データには、キーが「7430」の行は無いので、区間幅設定部192は、キーが「7430」、値が「1」の行を度数分布データに追加する。
このように、区間幅設定部192は、入力データにおける整数を先頭から順に参照して、度数分布データを変更していく。
図6の例で、区間幅設定部192が、入力データにおける先頭から8番目の整数「9315」を参照して度数分布データを変更した時点で、度数分布データの行数が閾値の8に達している。
【0047】
なお、
図6は、区間幅設定部192が、度数分布データの生成の途中では度数分布データのソートを行わない場合の例を示している。あるいは、区間幅設定部192が、度数分布データに行を追加する際に、キーの値が昇順になるように行を挿入するなど、度数分布データの生成の途中で度数分布データのソートを行うようにしてもよい。
【0048】
図7は、度数分布データ生成装置100による度数分布データの生成の過程における度数分布データの変更の第2の例を示す図である。
図7は、区間幅設定部192が、
図6の例からさらに、入力データの9番目の整数「5903」を参照して度数分布データを変更する場合の例を示している。
区間幅設定部192は、入力データの9番目の整数「5903」を参照し、キーを「5900」と算出する。その時点での度数分布データには、キーが「5900」の行は無いので、区間幅設定部192は、キーが「5900」、値が「1」の行を度数分布データに追加する。
これにより、度数分布データの行数が9行になっており、区間数判定部191は、区間幅が10の度数分布データに含まれる区間の個数は、閾値8よりも多いと判定する。
【0049】
図8は、度数分布データ生成装置100による度数分布データの生成の過程における度数分布データの変更の第3の例を示す図である。
図8は、区間幅設定部192が、
図7の例から区間幅を変更する場合の例を示している。
区間幅設定部192は、区間幅が10の度数分布データに含まれる区間の個数が閾値8よりも多いと区間数判定部191が判定したことに応じで、区間幅を100に変更している。
【0050】
区間幅の変更に伴い、度数分布データ生成部193は、度数分布データに含まれる各キーの10の位を「0」に置き換えている。
整数の10の位を「0」に置き換えることは、整数に対するマスキングの例に該当する。区間幅変更前のキーが、入力データに含まれる整数に対するマスキングで生成されていることから、区間幅変更前のキーの10の位を「0」に置き換えることは、入力データに含まれる整数に対する(複数回の)マスキングの例に該当する。
【0051】
このように、区間幅設定部192が、区間幅をより広い区間幅に変更することで、度数分布データ生成部193は、区間幅変更前の度数分布データから区間幅変更後の度数分布データへの変更を比較的簡単に行うことができる。
特に、区間幅設定部192が、区間幅変更前の何れの区間も区間幅変更後の1つの区間に含まれるように区間幅を変更するようにしてもよい。そして、度数分布データ生成部193が、区間幅変更前の区間に含まれる数の個数を、区間幅変更後の同一の区間に含まれる全ての区間幅変更前の区間について合計するようにしてもよい。
【0052】
度数分布データ生成部193は、算出した個数を区間幅変更後の区間に含まれる数の個数に設定することで、区間幅変更前の度数分布データに示される区間ごとの数の個数を、区間幅変更後の度数分布データに反映させることができる。これにより、度数分布データ生成部193は、入力データに含まれる数のうち、区間幅変更前の度数分布データに反映済みの数については、入力データに再度アクセスする必要が無い。
【0053】
例えば、
図8の例で、区間幅10の度数分布データで、キー「4530」で示される、4530から4539までの区間に含まれる整数は、区間幅100の度数分布データでは、キー「4500」で示される、4500から4599までの区間に含まれる。これにより、度数分布データ生成装置100は、区間幅10の度数分布データにおけるキー「4530」の行の値「1」を、区間幅100の度数分布データにおけるキー「4500」の行の値に反映させればよく、入力データに含まれる整数「4536」を再度参照する必要はない。
【0054】
また、nをn≧1の整数とし、mをm≧0の整数とし、度数分布データ生成装置100が数の表現に用いる進数をn進数として、区間幅設定部192が、nmの区間幅を設定することで、度数分布データ生成部193は、入力データに含まれる数に対するマスキングによってキーを算出することができる。この点で、度数分布データ生成部193は、比較的容易にキーを算出することができる。
【0055】
図8の例では、数が10進法で表現されており、区間幅設定部192は、区間幅を10
1から10
2に変更している。そして、度数分布データ生成部193は、区間幅変更前の度数分布データ、および、区間幅変更後の度数分布データの何れについても、入力データに含まれる数に対するマスキングによってキーを算出している。
【0056】
例えば、区間幅変更前の度数分布データでは、度数分布データ生成部193は、4530から4539までの区間など、同一の区間に含まれ得る整数の上位3桁が共通になるように区間を設定している。そして、
図6に示されるように、度数分布データ生成部193は、入力データに含まれる整数「4536」の1の位を「0」に置き換えることで、キー「4530」を算出している。
上述したように、整数の1の位を「0」に置き換えることは、整数に対するマスキングの例に該当する。
【0057】
また、区間幅変更後の度数分布データでは、度数分布データ生成部193は、4500から4599までの区間など、同一の区間に含まれ得る整数の上位2桁が共通になるように区間を設定している。そして、度数分布データ生成部193は、区間幅変更前のキー「4530」の10の位を「0」に置き換えることで、キー「4500」を算出している。
上述したように、区間幅変更前のキーの10の位を「0」に置き換えることは、入力データに含まれる整数に対する(複数回の)マスキングの例に該当する。
【0058】
図8の例では、キーが書き換えられた後の度数分布データでキーの重複は無く、度数分布データの行数は9行のままである。このため、区間数判定部191は、区間幅が100の度数分布データに含まれる区間の個数は、閾値8よりも多いと判定する。
【0059】
図9は、度数分布データ生成装置100による度数分布データの生成の過程における度数分布データの変更の第4の例を示す図である。
図9は、区間幅設定部192が、
図8の例から区間幅を変更する場合の例を示している。
区間幅が100の度数分布データに含まれる区間の個数が閾値8よりも多いと区間数判定部191が判定したことに応じて、区間幅設定部192は、区間幅を1000に変更している。
【0060】
区間幅の変更に伴い、度数分布データ生成部193は、各キーの100の位を「0」に置き換えている。整数の100の位を「0」に置き換えることは、整数に対するマスキングの例に該当する。また、区間幅変更前のキーの100の位を「0」に置き換えることは、入力データに含まれる整数に対する(複数回の)マスキングの例に該当する。
【0061】
そして、度数分布データ生成部193は、区間幅変更後のキーが重複する行を1つの行に纏めている。例えば、区間幅が100の度数分布データにおけるキー「7400」および「7800」の何れも、区間幅が1000の度数分布データでは、キーは「7000」となる。そこで、度数分布データ生成部193は、区間幅が100の度数分布データにおけるキー「7400」の行の値「1」と、キー「7800」の行の値「1」とを足し合わせて、区間幅が1000の度数分布データにおけるキー「7000」の行の値を「2」としている。
【0062】
図10は、度数分布データ生成装置100による度数分布データの生成の過程における度数分布データの変更の第5の例を示す図である。
図10は、度数分布データ生成部193が、
図9の例からさらに度数分布データを変更する場合の例を示している。
度数分布データ生成部193が、入力データに含まれる整数を先頭から9番目の整数「5903」まで参照した
図9の例の時点では、区間幅が1000の度数分布データの行数は5行であり、閾値8よりも小さい。そこで、度数分布データ生成部193は、入力データに含まれる整数をさらに参照して度数分布データを変更している。
【0063】
具体的には、
図10の例で、度数分布データ生成部193は、入力データにおける先頭から10番目の整数「8558」を参照してキーを「8000」と算出する。そして、度数分布データにキーが「8000」の行が無いことから、度数分布データ生成部193は、キーが「8000」、値が「1」の行を度数分布データに追加する。
【0064】
さらに度数分布データ生成部193は、入力データにおける先頭から10番目の整数「8106」から末尾の整数「4590」までを順に参照して度数分布データを変更していく。
度数分布データ生成部193が、入力データにおける末尾の整数「4590」を度数分布データに反映させた時点で、度数分布データの行数は6行であり、閾値8よりも小さい。そこで、度数分布データ生成装置100は、この度数分布データを入力データに含まれる数の度数分布データとして採用する。
【0065】
度数分布データ生成装置100が数の表現に用いる表現形式は、特定の形式に限定されない。
例えば、度数分布データ生成装置100が、2進数で数を表すビット列のデータを用いて度数分布データを生成するようにしてもよい。さらに、度数分布データ生成装置100がビット列を扱う場合、ビット列による数の表現形式も、特定の形式に限定されない。例えば、度数分布データ生成装置100が、32ビットのビット列で1つの数を表すデータを扱う場合、32ビットのビット列が、2の補数表現によって-231から231-1までの整数を表していてもよい。あるいは、ビット列が0以上の整数を表すものと定められており、32ビットのビット列が、0から232-1までの整数を表していてもよい。あるいは、32ビットのビット列が2進数の固定小数を表すなど、小数を表していてもよい。
【0066】
度数分布データ生成部193が、ビット列で数を表現するデータを用いて度数分布データを生成する場合、ビット列に対するマスキングによってキーを算出するようにしてもよい。
図11は、度数分布データ生成部193がビット列に対するマスキングで算出するキーの第1の例を示す図である。
【0067】
図11は、区間幅が1に設定されている場合に、度数分布データ生成部193が、入力データに含まれる数を示すビット列に対するマスキングでキーを算出する例を示している。この場合、度数分布データ生成部193は、マスクを、入力データに含まれる数を示すビット列と同じビット長でいずれのビットも「1」のビット列に設定する。あるいは、区間幅設定部192がマスクを設定するようにしてもよい。
そして、度数分布データ生成部193は、入力データに含まれる数を示すビット列とマスクとのビットごとの積をとって、入力データに含まれる数を示すビット列と同じビット列をキーとして算出する。
図11の例のように、キーが元の数と同じである場合、度数分布データ生成部193が、数に対するマスキングを省略し、その数をそのままキーとして用いるようにしてもよい。
【0068】
図12は、度数分布データ生成部193がビット列に対するマスキングで算出するキーの第2の例を示す図である。
図12は、区間幅設定部192が、区間幅を1から2
3=8に変更する場合に、度数分布データ生成部193が、区間幅変更前のキーに対するマスキングで区間幅変更後のキーを算出する例を示している。この場合、度数分布データ生成部193は、マスクを、区間幅変更前のキーと同じビット長で、末尾の3ビットが何れも「0」であり、それ以外のビットが何れも「1」のビット列に設定する。そして、度数分布データ生成部193は、区間幅変更前のキーとマスクとのビットごとの積をとって、区間幅変更後のキーを算出する。
【0069】
図13は、度数分布データ生成部193がビット列に対するマスキングで算出するキーの第3の例を示す図である。
図13は、区間幅設定部192が、区間幅を2
3=8から2
6=64に変更する場合に、度数分布データ生成部193が、区間幅変更前のキーに対するマスキングで区間幅変更後のキーを算出する例を示している。この場合、度数分布データ生成部193は、マスクを、区間幅変更前のキーと同じビット長で、末尾の6ビットが何れも「0」であり、それ以外のビットが何れも「1」のビット列に設定する。そして、度数分布データ生成部193は、区間幅変更前のキーとマスクとのビットごとの積をとって、区間幅変更後のキーを算出する。
【0070】
このように、度数分布データ生成部193は、入力データに含まれるビット列、または、区間幅変更前のキーに対して、ビット列の末尾から区間幅に応じたビット数をマスクするマスキングを行うことで、区間幅変更後のキーを算出する。
図6から
図10までの例の場合と同様、度数分布データ生成装置100は、区間幅の変更、および、区間幅変更後のキーの算出を、ハッシュテーブルの行数が所定の閾値以下になるまで繰り返す。
【0071】
度数分布データ生成部193がビット列に対するマスキングでキーを算出する場合、区間幅設定部192が行う区間幅の変更は、mをm≧0の整数として、2mで表される区間幅に拡張するいろいろな変更とすることができる。
例えば、区間幅設定部192が、区間幅を20に初期設定し、区間の個数が所定の閾値よりも多いと区間数判定部191が判定するごとに、区間幅を21、22、・・・と順に変更していくなど、2mのmを1ずつ増加させるように区間幅の変更を行うようにしてもよい。
この場合、度数分布データ生成部193または区間幅設定部192は、マスクの全てのビットの値を「1」に初期設定し、区間幅が変更されるごとに、末尾のビットから順に1ビットずつ、ビットの値を「1」から「0」に変更する。
【0072】
度数分布データ生成部193が、一度に値を「0」に変更するビット数が少ないほど(、すなわち、区間幅設定部192が設定する変更後の区間幅が比較的小さいほど)、詳細に区間幅を探索することができ、適切な区間幅を探索し漏らす可能性が少ない。
一方、度数分布データ生成部193が、一度に値を「0」に変更するビット数が多いほど(、すなわち、区間幅設定部192が設定する変更後の区間幅が比較的大きいほど)、区間幅を変更する回数が少ないことが期待される。
【0073】
また、入力データに含まれる数の分布に関する情報が得られている場合、区間幅設定部192またはユーザが、入力データに含まれる数の分布に応じて区間幅の初期値を設定するようにしてもよい。
例えば、入力データに含まれる数の分布が比較的均等である場合、区間幅をある程度広くとっても各区間に比較的均等に数が含まれることが期待される。また、入力データに含まれる数の分布が比較的均等である場合、分布に偏りがある場合よりも、1つ以上の数が含まれる区間が多くなると考えられ、最終的得られる度数分布データの区間幅が比較的広くなることが考えられる。
【0074】
そこで、入力データに含まれる数の分布が比較的均等であるとの情報が得られている場合、区間幅設定部192またはユーザが、区間幅の初期値を比較的広い区間に設定するようにしてもよい。例えば、度数分布データ生成部193または区間幅設定部192が、マスクの初期値を、マスクの末尾のビットから所定ビットの値が「0」になり、それ以外のビットの値が「1」になるように設定してもよい。
【0075】
また、区間幅設定部192が、区間幅を変更する大きさに関する設定を、区間幅の変更回数に応じて変化させるようにしてもよい。
例えば、mをm≧0の整数として、区間幅設定部192が、区間幅を2mで表される区間幅に設定する場合、mの値が大きくなるにつれて、区間幅が指数的に大きくなる。そこで、例えば区間幅設定部192が、20、22、24、・・・210と、mが10に達するまではmを2ずつ増加させ、211、212、213・・・と、mが10に達した後はmを1ずつ増加させるようにしてもよい。
【0076】
度数分布データ生成部193が、マスキングで得られるキーの各ビットのうち、マスクの値が「1」のビットのみを取り出すようにしてもよい。すなわち、度数分布データ生成部193が、マスキングで得られるキーの各ビットのうち、マスクの値が「0」のビットを捨てるようにしてもよい。これにより、キーのビット長が比較的短くなり、キーを記憶するために必要なメモリ容量が比較的小さくて済むことが期待される。
【0077】
度数分布データ生成部193が、ビット列で数を表現するデータを用いて度数分布データを生成する場合、シフト演算でキーを算出するようにしてもよい。
図14は、度数分布データ生成部193がシフト演算で算出するキーの例を示す図である。
図14は、度数分布データ生成部193が、区間幅を1(=2
0)、2
3、2
6、・・・のように、2進数表現で3桁ずつ大きくしていく場合の例を示している。
【0078】
図14の例で、区間幅設定部192は、区間幅を1に初期設定する。これにより、度数分布データ生成部193は、入力データに含まれる数を示すビット列を、区間幅が1のときのキーとして用いる。
次に、区間幅設定部192は、区間幅を1から2
3=8に変更する。そして、度数分布データ生成部193は、区間幅が1のときのキーを3ビット右シフトすることで、区間幅が2
3のときのキーを算出する。
さらに、区間幅設定部192は、区間幅を2
3=8から2
6=64に変更する。そして、度数分布データ生成部193は、区間幅が2
3の時のキーを3ビット右シフトすることで、区間幅が2
6のときのキーを算出する。
【0079】
このように、度数分布データ生成部193は、入力データに含まれるビット列、または、区間幅変更前のキーに対して、区間幅の変更に応じたビット数だけ右シフトを行うことで、区間幅変更後のキーを算出する。
図6から
図10までの例の場合と同様、区間幅設定部192および度数分布データ生成部193は、区間幅の変更、および、区間幅変更後のキーの算出を、ハッシュテーブルの行数が所定の閾値以下になるまで繰り返す。
図14の例では、度数分布データ生成部193は、区間幅2
27まで、3ビット右シフトを繰り返すことで、区間幅変更後のキーの算出を繰り返しおこなっている。
【0080】
度数分布データ生成部193が、シフト演算で得られるキーの各ビットのうち、シフト演算で「0」が挿入されたビットを捨てるようにしてもよい。これにより、キーのビット長が比較的短くなり、キーを記憶するために必要なメモリ容量が比較的小さくて済むことが期待される。
また、シフト演算の方法によっては、度数分布データ生成部193が、シフト演算の結果に対してマスキングを行うようにしてもよい。例えば、正の数に対する右シフト演算で「1」が挿入される場合、度数分布データ生成部193が、シフト演算で得られるキーの各ビットのうち、シフト演算で「1」が挿入されたビット列を「0」に置き換えるマスキングを行うようにしてもよい。
【0081】
度数分布データ生成部193がビット列に対するシフト演算でキーを算出する場合、区間幅設定部192が行う区間幅の変更は、mをm≧0の整数として、2mで表される区間幅に拡張するいろいろな変更とすることができる。
例えば、区間幅設定部192が、区間幅を20に初期設定し、区間の個数が所定の閾値よりも多いと区間数判定部191が判定するごとに、区間幅を21、22、・・・と順に変更していくなど、2mのmを1ずつ増加させるように区間幅の変更を行うようにしてもよい。
この場合、度数分布データ生成部193は、区間幅が変更されるごとに、入力データに含まれる数、または、入力データに含まれる数に対するシフト演算で得られた区間幅変更前のキーを、1ビットずつ右シフトさせる。
【0082】
度数分布データ生成部193が、一度にキーをシフトさせるビット数が少ないほど(、すなわち、区間幅設定部192が設定する変更後の区間幅が比較的小さいほど)、詳細に区間幅を探索することができ、適切な区間幅を探索し漏らす可能性が少ない。
一方、度数分布データ生成部193が、一度にキーをシフトさせるビット数が多いほど(、すなわち、区間幅設定部192が設定する変更後の区間幅が比較的大きいほど)、区間幅を変更する回数が少ないことが期待される。
【0083】
上述したように、入力データに含まれる数の分布に関する情報が得られている場合、区間幅設定部192またはユーザが、入力データに含まれる数の分布に応じて区間幅の初期値を設定するようにしてもよい。
例えば、入力データに含まれる数の分布が比較的均等であるとの情報が得られている場合、区間幅設定部192またはユーザが、区間幅の初期値を比較的広い区間に設定するようにしてもよい。度数分布データ生成部193は、初期値の区間幅の度数分布データの生成では、入力データから読み出した数を区間幅の初期値に応じたビット数だけシフトさせてキーを算出する。
【0084】
上述したように、区間幅設定部192が、区間幅を変更する大きさに関する設定を、区間幅の変更回数に応じて変化させるようにしてもよい。
【0085】
度数分布データ生成部193が、シフト演算で得られるキーの各ビットのうち、シフト演算で値が挿入されたビット以外のビットのみを取り出すようにしてもよい。すなわち、度数分布データ生成部193が、シフト演算で得られるキーの各ビットのうち、シフト演算で値が挿入されたビットを捨てるようにしてもよい。これにより、キーのビット長が比較的短くなり、キーを記憶するために必要なメモリ容量が比較的小さくて済むことが期待される。
【0086】
図15は、度数分布データ生成装置100が度数分布データを生成する処理手順の例を示す図である。
図15の例で、区間幅設定部192は、区間幅の初期値を設定する(ステップS101)。なお、度数分布データ生成部193が、マスクを用いてキーを算出する場合、度数分布データ生成部193または区間幅設定部192は、区間幅設定部192が区間幅を設定または変更するごとに、区間幅に応じたマスクを設定する。
【0087】
次に、度数分布データ生成部193は、入力データに含まれる数を1つ読み出す(ステップS102)。例えば、度数分布データ生成部193は、入力データに含まれる数列の先頭から順に、処理がステップS102に遷移するごとに1つずつ、数を読み出す。
そして、度数分布データ生成部193は、読み出した数のキーを計算する(ステップS103)。上述したように、度数分布データ生成部193がキーを計算する方法として、マスクを用いる方法、または、シフト演算を用いる方法などいろいろな方法を用いることができる。
【0088】
次に、度数分布データ生成部193は、算出したキーを度数分布データに反映させる(ステップS104)。
具体的には、度数分布データ生成部193は、ステップS103で算出したキーが、生成中の度数分布データに含まれているか否かを判定する。ステップS103で算出したキーが、生成中の度数分布データに含まれていると判定した場合、度数分布データ生成部193は、そのキーが含まれる行の値を1増加させる。すなわち、度数分布データ生成部193は、算出したキーが示す区間に含まれる数の個数を1増加させる。
【0089】
一方、ステップS103で算出したキーが、生成中の度数分布データに含まれていないと判定した場合、度数分布データ生成部193は、算出したキーと、値「1」との組み合わせによる行を度数分布データに追加する。すなわち、度数分布データ生成部193は、度数分布データに新たな区間を示す行を追加し、その区間に含まれる数の個数を1とする。
【0090】
次に、区間数判定部191は、生成中の度数分布データに含まれる区間数が所定の閾値よりも多いか否かを判定する(ステップS105)。
区間数が閾値よりも多いと区間数判定部191が判定した場合(ステップS105:YES)、区間幅設定部192は、区間幅の設定をより広い区間幅に変更する(ステップS111)。
そして、度数分布データ生成部193は、生成中の度数分布データを、区間幅変更前の度数分布データから区間幅変更後の度数分布データに変更する(ステップS112)。
ステップS112の後、処理がステップS105へ戻る。
【0091】
一方、ステップS105で、生成中の度数分布データに含まれる区間数が所定の閾値以下であると区間数判定部191が判定した場合(ステップS105:NO)、度数分布データ生成部193は、入力データに含まれる全ての数を度数分布データに反映済みか否かを判定する(ステップS121)。
【0092】
入力データに含まれる数のうち、度数分布データに未反映の数があると度数分布データ生成部193が判定した場合(ステップS121:NO)、処理がステップS102に戻る。
一方、入力データに含まれる全ての数を度数分布データに反映済みであると度数分布データ生成部193が判定した場合、度数分布データ生成装置100は、
図15の処理を終了する。
【0093】
図16は、度数分布データ生成部193が、区間幅変更前の度数分布データを区間幅変更後の度数分布データに変更する処理の手順の例を示す図である。度数分布データ生成部193は、
図15のステップS112で、
図16の処理を行う。
図16の処理で、度数分布データ生成部193は、
図15のステップS111での区間幅の変更に応じて、度数分布データに含まれる各キーを変更する(ステップS201)。上述したように、度数分布データ生成部193がキーを変更する方法として、マスクを用いる方法、または、シフト演算を用いる方法などいろいろな方法を用いることができる。
【0094】
次に、度数分布データ生成部193は、度数分布データに含まれる区間のうち、キーが同じ区間を統合する(ステップS202)。具体的には、度数分布データ生成部193は、度数分布データの行のうち、同じキーが含まれる行を検出する。
そして、度数分布データ生成部193は、同じキーが含まれる各行に示される値を合計し、それら同じキーが含まれる行のうち何れか1つの行に示される値を、得られた合計値に書き換える。すなわち、度数分布データ生成部193は、区間幅変更後の区間で同一の区間に含まれる区間幅変更前の区間に含まれる数の個数を合計する。
そして、度数分布データ生成部193は、同じキーが含まれる行のうち、値を書き換えた行以外の行を削除する。
ステップS202の後、度数分布データ生成部193は、
図16の処理を終了する。
【0095】
以上のように、区間数判定部191は、度数分布データ生成対象の数列に含まれる全ての数が反映されたときの度数分布データに含まれる区間の個数が所定の閾値よりも多いか否かを推定する。区間幅設定部192は、区間の個数が閾値よりも多いと推定された場合、区間幅の設定をより広い区間幅に変更する。度数分布データ生成部193は、変更後の区間幅で度数分布データを生成する。
【0096】
これにより、度数分布データ生成装置100は、度数分布データに含まれる区間の個数が多いほど、度数分布データの生成時間が長くなり、度数分布データに含まれる区間の個数が少ないほど、各区間に含まれる数の個数にばらつきが生じ易くなるというトレードオフに対応して区間幅を決定し、度数分布データを生成することができる。度数分布データ生成装置100によれば、この点で、数列に含まれる数の度数分布を示すデータを生成する際、数列に応じた区間幅の度数分布を示すデータを、比較的短時間で生成できる。
【0097】
また、区間数判定部191は、度数分布データ生成部193が生成中の度数分布データに含まれる区間の個数が閾値よりも多いか否かを判定することで、度数分布データ生成対象の数列に含まれる全ての数が反映されたときの度数分布データに含まれる区間の個数が閾値よりも多いか否かを推定する。度数分布データ生成部193は、区間の個数が閾値よりも多いと判定された場合、変更前の区間幅の度数分布データの生成を中止し、変更後の区間幅の度数分布データを生成する。
【0098】
このように、区間数判定部191が、度数分布データ生成部193が生成中の度数分布データに含まれる区間の個数が閾値よりも多いか否かを判定することで、度数分布データ生成対象の数列に含まれる全ての数が反映されたときの度数分布データに含まれる区間の個数が閾値よりも多いか否かの推定を高精度に行うことができる。かつ、度数分布データ生成部193が、区間の個数が閾値よりも多いと判定された場合、変更前の区間幅の度数分布データの生成を中止し、変更後の区間幅の度数分布データを生成することで、度数分布データの生成に要する時間が比較的短くて済む。
【0099】
また、区間幅設定部192は、区間幅変更前の何れの区間も区間幅変更後の1つの区間に含まれるように前記区間幅を変更する。度数分布データ生成部193は、区間幅変更前の区間に含まれる数の個数を、区間幅変更後の同一の区間に含まれる全ての区間幅変更前の区間について合計する。
【0100】
これにより、度数分布データ生成部193、度数分布生成対象の数列に含まれる数のうち、区間幅変更前の度数分布データに反映済みの数については、度数分布生成対象の数列を再度参照する必要なしに、区間幅変更後の度数分布データに反映させることができる。度数分布データ生成装置100によれば、この点で、数列に応じた区間幅の度数分布を示すデータを、比較的短時間で生成できる。
【0101】
また、区間幅設定部192は、区間の個数が閾値よりも多いと推定されなくなるまで、前記区間幅の設定の変更を繰り返す。
これにより、度数分布データ生成装置100は、度数分布データに含まれる区間の個数が閾値以下の度数分布データを生成できる。度数分布データ生成装置100によれば、この点で、数列に含まれる数の度数分布を示すデータを生成する際、数列に応じた区間幅の度数分布を示すデータを生成できる。
【0102】
また、度数分布データ生成部193は、度数分布データ生成対象の数列に含まれる全ての数が反映されたときの度数分布データに含まれる区間の個数が閾値以下であると推定され、かつ、数列に含まれる数のうち度数分布データに反映されていない数があると判定した場合、数列に含まれる数のうち度数分布データに反映されていない数を度数分布データに反映させる処理を、数列に含まれる全ての数が反映されたときの度数分布データに含まれる区間の個数が閾値よりも多いと推定されるか、または、数列に含まれる全ての数が度数分布データに反映されたと判定するまで繰り返す。
【0103】
これにより、度数分布データ生成部193は、数列に含まれる数のうち度数分布データに反映されていない数を度数分布データに反映させる処理を継続するか否かを、区間幅の変更の要否に応じて決定することができ、この点で、度数分布データを効率的に生成することができる。度数分布データ生成装置100によれば、この点で、数列に含まれる数の度数分布を示すデータを生成する際、数列に応じた区間幅の度数分布を示すデータを、比較的短時間で生成できる。
【0104】
また、度数分布データ生成部193は、数列に含まれる数が含まれる個数が0個の区間を含まない度数分布データを生成する。
これにより、度数分布データに含まれる区間の個数が比較的少なくなる。度数分布データ生成装置100によれば、この点で、度数分布データの生成時間、および、生成された度数分布データへのアクセス時間が比較的短くて済み、また、度数分布データを記憶するためのメモリ容量が比較的少なくて済む。
【0105】
また、度数分布データ生成部193は、ハッシュテーブルの形式による度数分布データにおけるキーを、度数分布データ生成対象の数列に含まれる数を2進数で示すビット列に対するシフト演算によって生成する。
これにより、度数分布データ生成部193は、ハッシュテーブルの形式による度数分布データにおけるキーを比較的容易に生成することできる。度数分布データ生成装置100によれば、この点で、数列に応じた区間幅の度数分布を示すデータを、比較的短時間で生成できる。
【0106】
また、度数分布データ生成部193は、ハッシュテーブルの形式による度数分布データにおけるキーを、度数分布データ生成対象の数列に含まれる数を2進数で示すビット列に対するマスキングによって生成する。
これにより、度数分布データ生成部193は、ハッシュテーブルの形式による度数分布データにおけるキーを比較的容易に生成することできる。度数分布データ生成装置100によれば、この点で、数列に応じた区間幅の度数分布を示すデータを、比較的短時間で生成できる。
【0107】
図17は、実施形態に係る度数分布データ生成装置のもう1つの構成の例を示す図である。
図17に示す構成で、度数分布データ生成装置610は、区間数判定部611と、区間幅設定部612と、度数分布データ生成部613とを備える。
かかる構成で、区間数判定部611は、度数分布データ生成対象の数列に含まれる全ての数が反映されたときの度数分布データに含まれる区間の個数が所定の閾値よりも多いか否かを推定する。度数分布データは、設定された区間幅の区間ごとに、数列に含まれる数のうちその区間に含まれる数の個数を示すデータである。区間幅設定部612は、区間の個数が閾値よりも多いと推定された場合、区間幅の設定をより広い区間幅に変更する。度数分布データ生成部613は、変更後の区間幅で度数分布データを生成する。
区間数判定部611は、区間数判定手段の例に該当する。区間幅設定部612は、区間幅設定手段の例に該当する。度数分布データ生成部613は、度数分布データ生成手段の例に該当する。
【0108】
度数分布データ生成装置610は、度数分布データに含まれる区間の個数が多いほど、度数分布データの生成時間が長くなり、度数分布データに含まれる区間の個数が少ないほど、各区間に含まれる数の個数にばらつきが生じ易くなるというトレードオフに対応して区間幅を決定し、度数分布データを生成することができる。度数分布データ生成装置610によれば、この点で、数列に含まれる数の度数分布を示すデータを生成する際、数列に応じた区間幅の度数分布を示すデータを、比較的短時間で生成できる。
【0109】
図18は、実施形態に係る度数分布データ生成方法における処理の手順の例を示す図である。
図18に示す度数分布データ生成方法は、区間数の判定を行うこと(ステップS611)と、区間幅を更新すること(ステップS612)と、度数分布データを生成すること(ステップS613)とを含む。
区間数の判定を行うこと(ステップS611)では、コンピュータが、度数分布データ生成対象の数列に含まれる全ての数が反映されたときの度数分布データに含まれる区間の個数が所定の閾値よりも多いか否かを推定する。度数分布データは、設定された区間幅の区間ごとに、数列に含まれる数のうちその区間に含まれる数の個数を示すデータである。
区間幅を更新すること(ステップS612)では、コンピュータが、度数分布データ生成対象の区間の個数が前記閾値よりも多いと推定した場合、区間幅の設定をより広い区間幅に変更する。
度数分布データを生成すること(ステップS613)では、コンピュータが、変更後の区間幅で度数分布データを生成する。
【0110】
図18に示す度数分布データ生成方法によれば、度数分布データに含まれる区間の個数が多いほど、度数分布データの生成時間が長くなり、度数分布データに含まれる区間の個数が少ないほど、各区間に含まれる数の個数にばらつきが生じ易くなるというトレードオフに対応して区間幅を決定し、度数分布データを生成することができる。
図18に示す度数分布データ生成方法によれば、この点で、数列に含まれる数の度数分布を示すデータを生成する際、数列に応じた区間幅の度数分布を示すデータを、比較的短時間で生成できる。
【0111】
図19は、少なくとも1つの実施形態に係るコンピュータの構成を示す概略ブロック図である。
図19に示す構成で、コンピュータ700は、CPU710と、主記憶装置720と、補助記憶装置730と、インタフェース740と、不揮発性記録媒体750とを備える。
【0112】
上記の度数分布データ生成装置100、および、度数分布データ生成装置610のうち何れか1つ以上またはその一部が、コンピュータ700に実装されてもよい。その場合、上述した各処理部の動作は、プログラムの形式で補助記憶装置730に記憶されている。CPU710は、プログラムを補助記憶装置730から読み出して主記憶装置720に展開し、当該プログラムに従って上記処理を実行する。また、CPU710は、プログラムに従って、上述した各記憶部に対応する記憶領域を主記憶装置720に確保する。各装置と他の装置との通信は、インタフェース740が通信機能を有し、CPU710の制御に従って通信を行うことで実行される。また、インタフェース740は、不揮発性記録媒体750用のポートを有し、不揮発性記録媒体750からの情報の読出、および、不揮発性記録媒体750への情報の書込を行う。
【0113】
度数分布データ生成装置100がコンピュータ700に実装される場合、制御部190およびその各部の動作は、プログラムの形式で補助記憶装置730に記憶されている。CPU710は、プログラムを補助記憶装置730から読み出して主記憶装置720に展開し、当該プログラムに従って上記処理を実行する。
【0114】
また、CPU710は、プログラムに従って、記憶部180のための記憶領域を主記憶装置720に確保する。通信部110による他の装置との通信は、インタフェース740が通信機能を有し、CPU710の制御に従って動作することで実行される。表示部120による画像の表示は、インタフェース740が表示装置を備え、CPU710の制御に従って各種画像の表示することで実行される。操作入力部130によるユーザ操作の受け付けは、インタフェース740が入力デバイスを備え、CPU710の制御に従ってユーザ操作を受け付けることで実行される。
【0115】
度数分布データ生成装置610がコンピュータ700に実装される場合、区間数判定部611と、区間幅設定部612と、度数分布データ生成部613との動作は、プログラムの形式で補助記憶装置730に記憶されている。CPU710は、プログラムを補助記憶装置730から読み出して主記憶装置720に展開し、当該プログラムに従って上記処理を実行する。
【0116】
また、CPU710は、プログラムに従って、度数分布データ生成装置610が処理を行うための記憶領域を主記憶装置720に確保する。度数分布データ生成装置610と他の装置との通信は、インタフェース740が通信機能を有し、CPU710の制御に従って動作することで実行される。度数分布データ生成装置610とユーザとのインタラクションは、インタフェース740が入力デバイスおよび出力デバイスを有し、CPU710の制御に従って出力デバイスにて情報をユーザに提示し、入力デバイスにてユーザ操作を受け付けることで実行される。
【0117】
上述したプログラムのうち何れか1つ以上が不揮発性記録媒体750に記録されていてもよい。この場合、インタフェース740が不揮発性記録媒体750からプログラムを読み出すようにしてもよい。そして、CPU710が、インタフェース740が読み出したプログラムを直接実行するか、あるいは、主記憶装置720または補助記憶装置730に一旦保存して実行するようにしてもよい。
【0118】
なお、度数分布データ生成装置100、および、度数分布データ生成装置610が行う処理の全部または一部を実行するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより各部の処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、OS(Operating System)や周辺機器等のハードウェアを含むものとする。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM(Read Only Memory)、CD-ROM(Compact Disc Read Only Memory)等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよい。
【0119】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【0120】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【0121】
(付記1)
設定された区間幅の区間ごとに、数列に含まれる数のうちその区間に含まれる数の個数を示す度数分布データについて、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が所定の閾値よりも多いか否かを推定する区間数判定手段と、
前記区間の個数が前記閾値よりも多いと推定された場合、前記区間幅の設定をより広い区間幅に変更する区間幅設定手段と、
変更後の区間幅で前記度数分布データを生成する度数分布データ生成手段と、
を備える度数分布データ生成装置。
【0122】
(付記2)
前記区間数判定手段は、前記度数分布データ生成手段が生成中の度数分布データに含まれる区間の個数が前記閾値よりも多いか否かを判定することで、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が前記閾値よりも多いか否かを推定し、
前記度数分布データ生成手段は、前記区間の個数が前記閾値よりも多いと判定された場合、変更前の区間幅の度数分布データの生成を中止し、変更後の区間幅の度数分布データを生成する、
付記1に記載の度数分布データ生成装置。
【0123】
(付記3)
前記区間幅設定手段は、区間幅変更前の何れの区間も区間幅変更後の1つの区間に含まれるように前記区間幅を変更し、
前記度数分布データ生成手段は、区間幅変更前の区間に含まれる数の個数を、区間幅変更後の同一の区間に含まれる全ての区間幅変更前の区間について合計する、
付記2に記載の度数分布データ生成装置。
【0124】
(付記4)
前記区間幅設定手段は、前記区間の個数が前記閾値よりも多いと推定されなくなるまで、前記区間幅の設定の変更を繰り返す、
付記1から3の何れか一つに記載の度数分布データ生成装置。
【0125】
(付記5)
前記度数分布データ生成手段は、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が前記閾値以下であると推定され、かつ、前記数列に含まれる数のうち前記度数分布データに反映されていない数があると判定した場合、前記数列に含まれる数のうち前記度数分布データに反映されていない数を前記度数分布データに反映させる処理を、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が前記閾値よりも多いと推定されるか、または、前記数列に含まれる全ての数が前記度数分布データに反映されたと判定するまで繰り返す、
付記1から4の何れか一つに記載の度数分布データ生成装置。
【0126】
(付記6)
前記度数分布データ生成手段は、前記数列に含まれる数が含まれる個数が0個の区間を含まない度数分布データを生成する、
付記1から5の何れか一つに記載の度数分布データ生成装置。
【0127】
(付記7)
前記度数分布データ生成手段は、ハッシュテーブルの形式による度数分布データにおけるキーを、前記数列に含まれる数を2進数で示すビット列に対するシフト演算によって生成する、
付記6に記載の度数分布データ生成装置。
【0128】
(付記8)
前記度数分布データ生成手段は、ハッシュテーブルの形式による度数分布データにおけるキーを、前記数列に含まれる数を2進数で示すビット列に対するマスキングによって生成する、
付記6に記載の度数分布データ生成装置。
【0129】
(付記9)
コンピュータが、
設定された区間幅の区間ごとに、数列に含まれる数のうちその区間に含まれる数の個数を示す度数分布データについて、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が所定の閾値よりも多いか否かを推定し、
前記区間の個数が前記閾値よりも多いと推定した場合、前記区間幅の設定をより広い区間幅に変更し、
変更後の区間幅で前記度数分布データを生成する、
ことを含む度数分布データ生成方法。
【0130】
(付記10)
コンピュータに、
設定された区間幅の区間ごとに、数列に含まれる数のうちその区間に含まれる数の個数を示す度数分布データについて、前記数列に含まれる全ての数が反映されたときの前記度数分布データに含まれる前記区間の個数が所定の閾値よりも多いか否かを推定することと、
前記区間の個数が前記閾値よりも多いと推定した場合、前記区間幅の設定をより広い区間幅に変更することと、
変更後の区間幅で前記度数分布データを生成することと、
を実行させるためのプログラム。
【符号の説明】
【0131】
100、610 度数分布データ生成装置
110 通信部
120 表示部
130 操作入力部
180 記憶部
190 制御部
191、611 区間数判定部
192、612 区間幅設定部
193、613 度数分布データ生成部