Skip to content

Instantly share code, notes, and snippets.

@antoniojrossi
Forked from jfcalvo/chromosomes.rb
Created July 1, 2011 19:33
Show Gist options
  • Save antoniojrossi/1059231 to your computer and use it in GitHub Desktop.
Save antoniojrossi/1059231 to your computer and use it in GitHub Desktop.
A simple function to generate random chromosome strings
# 72.217263 seconds generating 10.000.000 chromosomes
def generate_chromosome_1(length, alleles)
(1..length).collect { alleles[rand(alleles.size)] }.join
end
# 64.619006 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
# 61.679619 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
# 51.38105 second generating 10.000.000 chromosomes
def generate_chromosome_4(length, alleles)
chromosome = ""
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" }
#
# puts "Using generate_chromosome_4:"
# measure_time(repeat) { generate_chromosome_4 8, "01" }
(1..4).each do |i|
puts "Using generate_chromosome_#{i}"
measure_time(repeat) {send "generate_chromosome_#{i}", 8, "01"}
end
@jfcalvo
Copy link

jfcalvo commented Jul 2, 2011

Pae, muchas gracias por la respuesta. No conocía el operador << del objeto String. Por lo que he leído en rdoc la diferencia entre el operador + y el << en los objetos de tipo String es que el operador + retorna un nuevo String con la concatenación de las dos cadenas y el operador << concatena y retorna el objeto sobre el que se ha realizado la operación de concatenado, de modo que por ahí se entiende la mejora de rendimiento. En cuanto tenga el mac a mano lo pruebo.

Saludos.

@antoniojrossi
Copy link
Author

antoniojrossi commented Jul 2, 2011 via email

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