CSES - Neliösumma

Kun aineistossa on havainnot (x1,y1),(x2,y2),,(xn,yn)(x_1,y_1),(x_2,y_2),\dots,(x_n,y_n) ja suoraa ax+bax+b sovitetaan aineistoon, virhe voidaan laskea neliösummana kaavalla i=1n(yi(axi+b))2.\sum_{i=1}^{n}(y_i-(ax_i+b))^2. Esimerkiksi kun aineisto on (1,1),(3,2),(5,3)(1,1),(3,2),(5,3), ja suora on x1x-1 (eli a=1a=1 ja b=1b=-1), virhe on (1(11))2+(2(31))2+(3(51))2=2.(1-(1-1))^2+(2-(3-1))^2+(3-(5-1))^2=2. Toteuta luokka SquareSum, jossa on seuraavat metodit:

  • add(x, y): lisää havainto aineistoon
  • calc(a, b): ilmoita virheen neliösumma annetuilla parametreilla

Kummankin metodin tulee toimia ajassa O(1)O(1).

Toteuta tiedostoon squaresum.py luokka SquareSum seuraavan mallin mukaisesti.

class SquareSum:
    def __init__(self):
        # TODO

    def add(self, x, y):
        # TODO

    def calc(self, a, b):
        # TODO

if __name__ == "__main__":
    s = SquareSum()
    s.add(1, 1)
    s.add(3, 2)
    s.add(5, 3)
    print(s.calc(1, 0)) # 5
    print(s.calc(1, -1)) # 2
    print(s.calc(0.5, 0.5)) # 0
    s.add(4, 2)
    print(s.calc(0.5, 0.5)) # 0.25