Skip to content

Instantly share code, notes, and snippets.

@antoniojrossi
Forked from jfcalvo/chromosomes.rb
Created July 1, 2011 19:33
Show Gist options
  • Select an option

  • Save antoniojrossi/1059231 to your computer and use it in GitHub Desktop.

Select an option

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
Copy Markdown

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
Copy Markdown
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