Report abuse

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