Skip to content

Instantly share code, notes, and snippets.

@jfcalvo
Created July 1, 2011 16:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save jfcalvo/1058882 to your computer and use it in GitHub Desktop.
Save jfcalvo/1058882 to your computer and use it in GitHub Desktop.
A simple function to generate random chromosome strings
# 54.73 seconds generating 10.000.000 chromosomes
def generate_chromosome_1(length, alleles)
(1..length).collect { alleles[rand(alleles.size)] }.join
end
# 49.15 seconds generating 10.000.000 chromosomes
def generate_chromosome_2(length, alleles)
chromosome = String.new
for i in 1..length
chromosome += alleles[rand(alleles.size)]
end
return chromosome
end
# 47.83 second generating 10.000.000 chromosomes
def generate_chromosome_3(length, alleles)
chromosome = String.new
length.times do
chromosome += alleles[rand(alleles.size)]
end
return chromosome
end
def measure_time(repeat)
start = Time.now
repeat.times { yield }
puts "Took #{Time.now - start} seconds, repeating #{repeat} times."
end
repeat = 10000000
puts "Using generate_chromosome_1:"
measure_time(repeat) { generate_chromosome_1 8, "01" }
puts "Using generate_chromosome_2:"
measure_time(repeat) { generate_chromosome_2 8, "01" }
puts "Using generate_chromosome_3:"
measure_time(repeat) { generate_chromosome_3 8, "01" }
@antoniojrossi
Copy link

Muy buena caballero. La primera es muy original, lenta pero original :) He hecho un fork de tu gist (https://gist.github.com/1059231) y he modificado algunas cosas:

  • He creado un nuevo método casi idéntico al número 3 tuyo, pero cambiando el operador += por <<. No veas la diferencia de tiempo, muy significativa.
  • He refactorizado los "puts" para no ser tan repetitivos ;). Pero no es gratis, tiene una penalización de rendimiento importante, pruébalo pae.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment