class ComplexityAssert::QuadraticComplexityModel

Generates a sample of execution timings to run a linear regression in order to predict another execution time

Public Instance Methods

analyze(timings) click to toggle source

timings : [[size,timing], …]

# File lib/complexity_assert/quadratic_complexity_model.rb, line 7
def analyze(timings)
  sqrt_timings = timings.map do |size, timing|
    [size, Math.sqrt(timing)]
  end
  linear_model = SimpleLinearRegression.new(*sqrt_timings.transpose)
  sqrt_slope = linear_model.slope
  sqrt_y_intercept = linear_model.y_intercept

  @quadratic = sqrt_slope * sqrt_slope
  @slope = 2* sqrt_slope * sqrt_y_intercept
  @y_intercept = sqrt_y_intercept * sqrt_y_intercept
end
predict_run_time(input_data_size) click to toggle source
# File lib/complexity_assert/quadratic_complexity_model.rb, line 20
def predict_run_time(input_data_size)
  @y_intercept + @slope * input_data_size + @quadratic * input_data_size * input_data_size
end
to_s() click to toggle source
# File lib/complexity_assert/quadratic_complexity_model.rb, line 24
def to_s
  'O(n^2)'
end