测试有效,但测试速度太慢

时间:2017-07-28 15:17:42

标签: ruby performance

大家好,我花了一段时间与我的配对伙伴解决这个问题https://www.codewars.com/kata/playing-on-a-chessboard/train/ruby

它通过了每个测试,但最后有STDERR说:

Process was terminated. It took longer than 12000ms to complete.

任何人都可以建议如何加快以下代码的速度或提高效率吗?

def game(n)
  # lowest common multiplier
  mult = (1..2*n).to_a.reduce(1,:lcm)
  y = 1
  x = 1
  # numerator sum
  numsum = 0

  while y <= n
    while x <= n
      # 
      numsum += x * mult / (x + y)
      x += 1
    end
    x = 1; y += 1
  end

  array = [Rational(numsum, mult).numerator, Rational(numsum, mult).denominator]
  if array[1] == 1
    [array[0]]
  else 
    array
  end

end

1 个答案:

答案 0 :(得分:0)

请注意以下部分代码:

while y <= n
  while x <= n 
    numsum += x * mult / (x + y)
    x += 1
  end
  x = 1; y += 1
end

请注意,您有2个嵌套循环,每个循环都有n次迭代 这意味着您的代码具有 O(n²)的复杂性(您可以阅读它here)。

因此,如果您使用game的高值调用n函数,则代码可能会挂起。

我建议你尝试重新考虑你的算法 可能存在另一种更有效的方法来解决您的问题。