最近、Ruby をいじっていて、 http: //codekata.pragprog.com から Anagrams Code Kata を完成させました。
このソリューションはテスト駆動で、独自の素因数分解定理を利用していますが、実行速度が非常に遅いようです。45k ファイルだけで、これまでに約 10 分間実行されています。コードのパフォーマンスを改善するためのヒントを教えてもらえますか?
class AnagramFinder
def initialize
    @words = self.LoadWordsFromFile("dict45k.txt")
end
def OutputAnagrams
    hash = self.CalculatePrimeValueHash
    @words.each_index{|i|
        word = @words[i]
        wordvalue = hash[i]
        matches = hash.select{|key,value| value == wordvalue}
        if(matches.length > 1)
            puts("--------------")
            matches.each{|key,value|
                puts(@words[key])
            }
        end         
    }
end
def CalculatePrimeValueHash     
    hash = Hash.new
    @words.each_index{|i|
        word = @words[i]
        value = self.CalculatePrimeWordValue(word)
        hash[i] = value
    }
    hash
end
def CalculatePrimeWordValue(word)
    total = 1
    hash = self.GetPrimeAlphabetHash
    word.downcase.each_char {|c|
        value = hash[c]
        total = total * value
    }
    total
end
def LoadWordsFromFile(filename)
    contentsArray = []
    f = File.open(filename)
    f.each_line {|line|
        line = line.gsub(/[^a-z]/i, '')
        contentsArray.push line
    }
    contentsArray
end
def GetPrimeAlphabetHash
    hash = { "a" => 2, "b" => 3, "c" => 5, "d" => 7, "e" => 11, "f" => 13, "g" =>17, "h" =>19, "i" => 23, "j" => 29, "k" => 31, "l" => 37, "m" => 41, "n" =>43, "o" =>47, "p" => 53, "q" =>59, "r" => 61, "s" => 67, "t" => 71, "u" => 73, "v" => 79, "w" => 83, "x" => 89, "y" => 97, "z" => 101 }
end 
end