paiza オンラインハッカソン Lite 用のデータ生成スクリプト
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
sample_answer
sample_data
LICENSE
README.md
datagen.php
gen_sample.sh
solve.cpp
solve_depthfirst.cpp

README.md

pohlite-data-generator

paiza オンラインハッカソン Lite 用のデータを生成するスクリプトです。

スクリプトのほかに、n = 10,000 までの規模のサンプルデータと回答を作成してあります。

実行方法

スクリプトの実行には、バグ修正済みの PECL::stats が必要です。修正方法については以下を参照してください。

スクリプトの実行方法は以下のとおりです。生成されたデータは標準出力に出力されます。

$ php datagen.php [-m 必要人数] [-n 会社数] [-q 人員数の分布] [-r 単価の分布]
  • -m 必要人数 を指定します。デフォルトの値は、平均人員数 (分布から計算されます) * 会社数 / 2 です。
  • -n 会社数 を指定します。デフォルトの値は 50 です。
  • -q 人員数の分布 を指定します。指定方法は後述します。デフォルトの分布は 1 から 10,000 の範囲の一様分布です。
  • -r 単価の分布 を指定します。指定方法は後述します。デフォルトの分布は 1 から 500 の範囲の一様分布です。発注費用は人員数 * 単価で計算されます。

分布の形状の指定

以下の分布を指定できます。

  • 一様分布 u:10:500 のように指定します。この例では最小値 10、最大値 500 の一様分布になります。両端を含みます。
  • 正規分布 n:100:5 のように指定します。この例では平均 100、標準偏差 5 の正規分布になります。
  • ガンマ分布 g:2:500 のように指定します。この例では形状母数 2、尺度母数 500 のガンマ分布になります。
  • ポアソン分布 p:10 のように指定します。この例では平均 10 のポアソン分布になります。

サンプルデータ

sample_data ディレクトリに、このスクリプトで生成したサンプルデータがあります。

  • data_gn_NNNNN.txt 人員数を形状母数 2、尺度母数 500 のガンマ分布、単価を平均 100、標準偏差 10 の正規分布としたものです。NNNNN が会社数を表します。必要人数は 1,000 * 会社数 / 2 です。
  • data_pn_NNNNN.txt 人員数を平均 10 のポアソン分布、単価を平均 100、標準偏差 10 の正規分布としたものです。NNNNN が会社数を表します。必要人数は 10 * 会社数 / 2 です。
  • data_un_NNNNN.txt 人員数を 1 から 10,000 の一様分布、単価を平均 100、標準偏差 10 の正規分布としたものです。NNNNN が会社数を表します。必要人数は 4,000 * 会社数です。会社数が 50 のときに必要人数が 200,000 になるようにしたものです。
  • data_uu_NNNNN.txt 人員数を 1 から 10,000 の一様分布、単価を 1 から 500 の一様分布としたものです。NNNNN が会社数を表します。必要人数は 4,000 * 会社数です。会社数が 50 のときに必要人数が 200,000 になるようにしたものです。

各サンプルデータの回答は、sample_answer ディレクトリにあります。ただし、私が作成したプログラムで計算したものなので、誤っている可能性もあります。