Сообщения

Сообщения за март, 2013

Тестирование метода поиска факториала числа в Ruby

Порой требуется найти факториал числа в ruby. Встроенного метода нет, поэтому добавим в класс Integer свой. Вот реализации поиска факториала найденные в сети, какой из них лучше? После проведения теста в ruby 1.8.7 (2012-02-08 patchlevel 358) [i686-darwin12.2.0] оказалось что третий ( обозначен как inject_factorial) в ruby 1.9.2 результат примерно такой же. require "benchmark" class Integer   def factorial_recursive     self <= 1 ? 1 : self * (self - 1).factorial   end   def factorial_iterative     f = 1; for i in 1..self; f *= i; end; f   end   def inject_factorial     self.downto(1).inject(:*)   end   alias :factorial :inject_factorial end Benchmark.bm(70) do |x|   x.report("factorial_recursive:")   { (1..120).each { |i| i.factorial_recursive } }   x.report("factorial_iterative:") { (1..120).each { |i| i.factorial_iterative }}   x.report("inject_factorial:")  { (1..120).each { |i| i.inject_factorial }} end Тр

Решение задачи коммивояжера (TSP Traveling Salesman Problem)

Вполне возможно вам известна задача коммивояжера,  Подробнее на русском тут   или на английском тут На данный момент, из известных мне реализаций алгоритмов для решения этой NP трудной задачи, является конкорд , не смотря на то, что последняя модификация от 2003 года, он отлично решает эти задачи, и вероятно по прежнему лучше всех. Задача на нескольких тысячах точек, может решаться часами, именно поэтому требуется быстрое и эффективное решение вроде конкорда. Возможно, вы захотите установить его под Mac Os, и вероятно не получится с первого раза откомпилировать код, в таком случае по совету Cartera рекомендую скачать небольшой скрипт который автоматически скачает версию конкорда и необходимые библиотеки qsort и откомпилировав установит. Скачать его можно тут http://code.google.com/p/eggbotcode/downloads/detail?name=build-concorde-osx-0_2.sh