require 'benchmark'
require ARGV[0] || 'rq225'
N=20
module GenSets
module_function
def gen(nelements, ndsets, xelements, nxsets)
step = nelements / ndsets
dsets = (1..nelements).each_slice(step).to_a
xsets = []
nxsets1 = nxsets / ndsets
permlen = xelements
dsets.each do |set|
fix = set[0]
nxsets1.times do
perm = (1..permlen).map {set[rand(set.size)]}
xsets << (perm << fix).uniq
end
end
return xsets
end
end
Benchmark::bm(40) do |b|
1.step(101, 50) do |nsets|
1.upto(10) do |felements|
nelements = nsets * felements
nx = nelements / 3 + 1
ns = nsets * 5
b.report("elements * sets: #{nx} * #{ns} => #{nelements / nsets} * #{nsets}") do
sets = GenSets.gen(nelements, nsets, nx, ns)
N.times do
dsets = distinct_sets(sets)
end
end
end
end
end