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