積集合の抽出に挑む 2 テストデーターの例とその生成スクリプト
集合の個数、集合に含まれるモノの最大個数、集合がモノを含む確率、の3つをパラメータとして与えると、テスト用のデータを生成するスクリプト。
($b, $c, $d) = @ARGV || (200 100 .5); print qq/\@data=(\n/; $y='AA'; print join qq/,\n/, map{ $a=qq/[\"$y\",[/; $y++; @a=map{ ( $_ % 10 ? '' : qq/\n/ ),( rand 1 < $d ? qq/\'$_\',/ : ' ' ); }('00'..$c); pop @a; $a.=join '',@a; $a=~s/,[^,]*$//g; qq/$a]]/; }(1..$b); print qq/\n);/
例えば引数として 10 20 .5 を与えるとこうなる。
@data=( ["AA",[ '00', '06','07','08','09', '10', '15','16']], ["AB",[ '00', '05', '07', '13','14','15', '19']], ["AC",[ '01','02', '04','05', '07','08','09', '11','12','13', '16']], ["AD",[ '01','02','03', '09', '10', '14','15', '19']], ["AE",[ '00','01','02', '04', '08', '13','14','15','16', '19']], ["AF",[ '02','03', '07','08','09', '12','13', '15', '17','18','19']], ["AG",[ '01','02','03','04', '07', '13','14', '17']], ["AH",[ '00', '02', '05','06', '10', '12','13', '17','18','19']], ["AI",[ '02','03', '06', '09', '12','13','14', '16', '18']], ["AJ",[ '00', '02', '04','05', '07', '09', '10','11','12', '16','17','18','19']] );
当初の目標である配列200程度モノ50程度ならば例えば 200 100 .5 を与えればよい。