均值、方差、协方差的增量计算

1. 基本定义

对于一组数值 X n = [ x 1 , x 2 , . . . , x n ] X_n = [x_1, x_2, ..., x_n] Xn=[x1,x2,...,xn],其均值为
X n ‾ = 1 n ∑ i = 1 n x i \overline{X_n} = \frac{1}{n} \sum_{i=1}^n x_i Xn=n1i=1nxi
方差 (variance) 为 σ n 2 = 1 n ∑ i = 1 n ( x i − X n ‾ ) 2 \sigma_n ^2= \frac{1}{n}\sum_{i=1}^n(x_i-\overline{X_n})^2 σn2=n1i=1n(xiXn)2
结合另一组数值 Y n = [ y 1 , y 2 , . . . , y n ] Y_n=[y_1,y_2, ..., y_n] Yn=[y1,y2,...,yn],它们的协方差 (covariance) 为
c o v ( X n , Y n ) = 1 n ∑ i = 1 n ( x i − X n ‾ ) ( y i − Y n ‾ ) cov(X_n, Y_n) = \frac{1}{n} \sum_{i=1}^n (x_i-\overline{X_n})(y_i-\overline{Y_n}) cov(Xn,Yn)=n1i=1n(xiXn)(yiYn)

2. 流式计算需求

流式计算无法保留全量数据,因此要求只遍历数据一次就能算出这些值。均值的计算比较简单,直接遍历一次即可求和以及统计出数据总数n。方差的计算需要先遍历一次数据求出均值,再遍历一次才能算出方差,总共需要遍历两次,因此暴力算法不符合需求。协方差的计算同理。下面给出增量的计算方法,只需要遍历数据一次。

定义 X n ‾ \overline{X_n} Xn 为数组 [ x 1 , x 2 , . . . , x n ] [x_1, x_2, ..., x_n] [x1,x2,...,xn] 的均值, X n − 1 ‾ \overline{X_{n-1}} Xn1表示前n-1个数的均值。
定义 v n v_n vn n σ n 2 n\sigma_n^2 nσn2,即前n个数的方差的n倍, v n − 1 v_{n-1} vn1表示 ( n − 1 ) σ n − 1 2 (n-1)\sigma_{n-1}^2 (n1)σn12,即前n-1个数的方差的 n-1 倍。
当我们已知前 n-1 个数的均值 X n − 1 ‾ \overline{X_{n-1}} Xn1 v n − 1 v_{n-1} vn1时,给定新到的第n个数 x n x_n xn,新的均值和方差可如下计算:
X n ‾ = X n − 1 ‾ + x n − X n − 1 ‾ n v n = v n − 1 + ( x n − X n − 1 ‾ ) ( x n − X n ‾ ) \overline{X_n}=\overline{X_{n-1}}+\frac{x_n-\overline{X_{n-1}}}{n}\\ v_n=v_{n-1}+(x_n-\overline{X_{n-1}})(x_n-\overline{X_n}) Xn=Xn1+nxnXn1vn=vn1+(xnXn1)(xnXn)对于协方差,定义 V n V_n Vn 为 n 倍的 c o v ( X n , Y n ) cov(X_n, Y_n) cov(Xn,Yn) ,即前n对数的协方差的n倍。可如下增量计算: V n = V n − 1 + ( x n − X n ‾ ) ( y n − Y n − 1 ‾ ) 或 = V n − 1 + ( x n − X n − 1 ‾ ) ( y n − Y n ‾ ) \begin{aligned} V_n&=V_{n-1}+(x_n-\overline{X_n})(y_n-\overline{Y_{n-1}})\\ 或&=V_{n-1}+(x_n-\overline{X_{n-1}})(y_n-\overline{Y_n})\end{aligned} Vn=Vn1+(xnXn)(ynYn1)=Vn1+(xnXn1)(ynYn)上面两式右边部分是相等的。文章最后有这些公式的推导证明。

3. 聚合计算需求

当数据量比较大,需要分布式并行计算时,要求能把多个分片的中间结果合并成最终结果。假设有两个分片,分别有 n 和 m 组数据,第一个分片为 [ ( x 1 , 1 , y 1 , 1 ) , ( x 1 , 2 , y 1 , 2 ) , ( x 1 , 3 , y 1 , 3 ) , . . . , ( x 1 , n , y 1 , n ) ] [(x_{1,1}, y_{1,1}), (x_{1,2}, y_{1,2}), (x_{1,3}, y_{1,3}), ..., (x_{1,n}, y_{1,n})] [(x1,1,y1,1),(x1,2,y1,2),(x1,3,y1,3),...,(x1,n,y1,n)],第二个分片为 [ ( x 2 , 1 , y 2 , 1 ) , ( x 2 , 2 , y 2 , 2 ) , ( x 2 , 3 , y 2 , 3 ) , . . . , ( x 2 , m , y 2 , m ) ] [(x_{2,1}, y_{2,1}), (x_{2,2}, y_{2,2}), (x_{2,3}, y_{2,3}), ..., (x_{2,m}, y_{2,m})] [(x2,1,y2,1),(x2,2,y2,2),(x2,3,y2,3),...,(x2,m,y2,m)]
X n ‾ \overline{X_n} Xn [ x 1 , 1 , x 1 , 2 , x 1 , 3 , . . . , x 1 , n ] [x_{1,1}, x_{1,2}, x_{1,3}, ...,x_{1,n}] [x1,1,x1,2,x1,3,...,x1,n] 的均值, Y n ‾ \overline{Y_n} Yn [ y 1 , 1 , y 1 , 2 , y 1 , 3 , . . . , y 1 , n ] [y_{1,1}, y_{1,2}, y_{1,3}, ...,y_{1,n}] [y1,1,y1,2,y1,3,...,y1,n] 的均值, V n V_n Vn 为 n 倍的 c o v ( X n , Y n ) cov(X_n, Y_n) cov(Xn,Yn),即 V n = ∑ i = 1 n ( x i − X n ‾ ) ( y i − Y n ‾ ) V_n = \sum_{i=1}^n (x_i-\overline{X_n})(y_i-\overline{Y_n}) Vn=i=1n(xiXn)(yiYn) X m ‾ \overline{X_m} Xm [ x 2 , 1 , x 2 , 2 , x 2 , 3 , . . . , x 2 , m ] [x_{2,1}, x_{2,2}, x_{2,3}, ...,x_{2,m}] [x2,1,x2,2,x2,3,...,x2,m] 的均值, Y m ‾ \overline{Y_m} Ym [ y 2 , 1 , y 2 , 2 , y 2 , 3 , . . . , y 2 , m ] [y_{2,1}, y_{2,2}, y_{2,3}, ...,y_{2,m}] [y2,1,y2,2,y2,3,...,y2,m] 的均值, V m V_m Vm 为 m 倍的 c o v ( X m , Y m ) cov(X_m, Y_m) cov(Xm,Ym). 现在要求 X n + m ‾ \overline{X_{n+m}} Xn+m V n + m V_{n+m} Vn+m,可如下计算: X n + m ‾ = n X n ‾ + m X m ‾ n + m V n + m = V n + V m + n m n + m ( X n ‾ − X m ‾ ) ( Y n ‾ − Y m ‾ ) \overline{X_{n+m}} = \frac{n\overline{X_n}+m\overline{X_m}}{n+m}\\ V_{n+m}=V_n+V_m+\frac{nm}{n+m}(\overline{X_n}-\overline{X_m})(\overline{Y_n}-\overline{Y_m}) Xn+m=n+mnXn+mXmVn+m=Vn+Vm+n+mnm(XnXm)(YnYm)

4. 滑动窗口计算需求

在窗口函数的计算中,窗口滑动时会新增一个数据,也可能剔除一个最老的数据。新增数据可使用前面流式计算的方法来更新,剔除数据也是利用相同的公式。由于均值、方差、协方差的计算与数据顺序无关,假设要剔除的就是 x n x_n xn,于是
X n − 1 ‾ = X n ‾ − x n − X n ‾ n − 1 v n − 1 = v n − ( x n − X n − 1 ‾ ) ( x n − X n ‾ ) V n − 1 = V n − ( x n − X n ‾ ) ( y n − Y n − 1 ‾ ) 或 = V n − ( x n − X n − 1 ‾ ) ( y n − Y n ‾ ) \overline{X_{n-1}}=\overline{X_n}-\frac{x_n-\overline{X_n}}{n-1}\\ v_{n-1}=v_n-(x_n-\overline{X_{n-1}})(x_n-\overline{X_n})\\ \begin{aligned} V_{n-1}&=V_n-(x_n-\overline{X_n})(y_n-\overline{Y_{n-1}})\\ 或&=V_n-(x_n-\overline{X_{n-1}})(y_n-\overline{Y_n}) \end{aligned} Xn1=Xnn1xnXnvn1=vn(xnXn1)(xnXn)Vn1=Vn(xnXn)(ynYn1)=Vn(xnXn1)(ynYn)

5. 推导证明

5.1 均值的增量计算

X n ‾ = 1 n ∑ i = 1 n x i = 1 n ( x n + ∑ i = 1 n − 1 x i ) = 1 n ( x n + ( n − 1 ) X n − 1 ‾ ) = 1 n ( n X n − 1 ‾ + x n − X n − 1 ‾ ) = X n − 1 ‾ + x n − X n − 1 ‾ n \overline{X_n}=\frac{1}{n} \sum_{i=1}^n x_i=\frac{1}{n} (x_n + \sum_{i=1}^{n-1} x_i) =\frac{1}{n} (x_n + (n-1)\overline{X_{n-1}})\\ =\frac{1}{n} (n\overline{X_{n-1}}+x_n-\overline{X_{n-1}}) =\overline{X_{n-1}}+\frac{x_n-\overline{X_{n-1}}}{n} Xn=n1i=1nxi=n1(xn+i=1n1xi)=n1(xn+(n1)Xn1)=n1(nXn1+xnXn1)=Xn1+nxnXn1

5.2 方差的增量计算

v n = ∑ i = 1 n ( x i − X n ‾ ) 2 = ∑ i = 1 n − 1 ( x i − X n ‾ ) 2 + ( x n − X n ‾ ) 2 = ∑ i = 1 n − 1 ( x i − X n − 1 ‾ + X n − 1 ‾ − X n ‾ ) 2 + ( x n − X n ‾ ) 2 = ∑ i = 1 n − 1 ( x i − X n − 1 ‾ ) 2 + 2 ( X n − 1 ‾ − X n ‾ ) ∑ i = 1 n − 1 ( x i − X n − 1 ‾ ) + ( n − 1 ) ( X n − 1 ‾ − X n ‾ ) 2 + ( x n − X n ‾ ) 2 v_n=\sum_{i=1}^n(x_i-\overline{X_n})^2=\sum_{i=1}^{n-1}(x_i-\overline{X_n})^2+(x_n-\overline{X_n})^2\\ =\sum_{i=1}^{n-1}(x_i-\overline{X_{n-1}}+\overline{X_{n-1}}-\overline{X_n})^2+(x_n-\overline{X_n})^2\\ =\sum_{i=1}^{n-1}(x_i-\overline{X_{n-1}})^2+2(\overline{X_{n-1}}-\overline{X_n})\sum_{i=1}^{n-1}(x_i-\overline{X_{n-1}})+(n-1)(\overline{X_{n-1}}-\overline{X_n})^2+(x_n-\overline{X_n})^2 vn=i=1n(xiXn)2=i=1n1(xiXn)2+(xnXn)2=i=1n1(xiXn1+Xn1Xn)2+(xnXn)2=i=1n1(xiXn1)2+2(Xn1Xn)i=1n1(xiXn1)+(n1)(Xn1Xn)2+(xnXn)2上式第一项就是 v n − 1 v_{n-1} vn1,第二项是0,因为
∑ i = 1 n − 1 ( x i − X n − 1 ‾ ) = ∑ i = 1 n − 1 x i − ( n − 1 ) X n − 1 ‾ = ( n − 1 ) X n − 1 ‾ − ( n − 1 ) X n − 1 ‾ = 0 \sum_{i=1}^{n-1}(x_i-\overline{X_{n-1}})=\sum_{i=1}^{n-1}x_i-(n-1)\overline{X_{n-1}}=(n-1)\overline{X_{n-1}}-(n-1)\overline{X_{n-1}}=0 i=1n1(xiXn1)=i=1n1xi(n1)Xn1=(n1)Xn1(n1)Xn1=0于是 v n = v n − 1 + ( n − 1 ) ( X n − 1 ‾ − X n ‾ ) 2 + ( x n − X n ‾ ) 2 v_n=v_{n-1}+(n-1)(\overline{X_{n-1}}-\overline{X_n})^2+(x_n-\overline{X_n})^2 vn=vn1+(n1)(Xn1Xn)2+(xnXn)2

简化一下增量部分,注意到有
( n − 1 ) ( X n − 1 ‾ − X n ‾ ) = ( n − 1 ) X n − 1 ‾ − ( n − 1 ) X n ‾ = n X n ‾ − x n − ( n − 1 ) X n ‾ = X n ‾ − x n (n-1)(\overline{X_{n-1}}-\overline{X_n})=(n-1)\overline{X_{n-1}}-(n-1)\overline{X_n}=n\overline{X_n}-x_n-(n-1)\overline{X_n}=\overline{X_n}-x_n (n1)(Xn1Xn)=(n1)Xn1(n1)Xn=nXnxn(n1)Xn=Xnxn于是
( n − 1 ) ( X n − 1 ‾ − X n ‾ ) 2 + ( x n − X n ‾ ) 2 = ( n − 1 ) ( X n − 1 ‾ − X n ‾ ) ( X n − 1 ‾ − X n ‾ ) + ( x n − X n ‾ ) 2 = ( X n ‾ − x n ) ( X n − 1 ‾ − X n ‾ ) + ( x n − X n ‾ ) 2 = ( x n − X n ‾ ) ( X n ‾ − X n − 1 ‾ ) + ( x n − X n ‾ ) 2 = ( x n − X n ‾ ) ( x n − X n ‾ + X n ‾ − X n − 1 ‾ ) = ( x n − X n ‾ ) ( x n − X n − 1 ‾ ) (n-1)(\overline{X_{n-1}}-\overline{X_n})^2+(x_n-\overline{X_n})^2\\ \begin{aligned} &=(n-1)(\overline{X_{n-1}}-\overline{X_n})(\overline{X_{n-1}}-\overline{X_n})+(x_n-\overline{X_n})^2\\ &=(\overline{X_n}-x_n)(\overline{X_{n-1}}-\overline{X_n})+(x_n-\overline{X_n})^2\\ &=(x_n-\overline{X_n})(\overline{X_n}-\overline{X_{n-1}})+(x_n-\overline{X_n})^2\\ &=(x_n-\overline{X_n})(x_n-\overline{X_n}+\overline{X_n}-\overline{X_{n-1}})\\ &=(x_n-\overline{X_n})(x_n-\overline{X_{n-1}}) \end{aligned} (n1)(Xn1Xn)2+(xnXn)2=(n1)(Xn1Xn)(Xn1Xn)+(xnXn)2=(Xnxn)(Xn1Xn)+(xnXn)2=(xnXn)(XnXn1)+(xnXn)2=(xnXn)(xnXn+XnXn1)=(xnXn)(xnXn1)于是 v n = v n − 1 + ( x n − X n − 1 ‾ ) ( x n − X n ‾ ) v_n=v_{n-1}+(x_n-\overline{X_{n-1}})(x_n-\overline{X_n}) vn=vn1+(xnXn1)(xnXn)

5.3 协方差的增量计算

思路与方差的证明相同(实际上方差就是协方差的特殊形式)
V n = ∑ i = 1 n − 1 ( x i − X n ‾ ) ( y i − Y n ‾ ) + ( x n − X n ‾ ) ( y n − Y n ‾ ) V_n=\sum_{i=1}^{n-1}(x_i-\overline{X_n})(y_i-\overline{Y_n})+(x_n-\overline{X_n})(y_n-\overline{Y_n}) Vn=i=1n1(xiXn)(yiYn)+(xnXn)(ynYn)把第一项中的均值换成 X n − 1 ‾ \overline{X_{n-1}} Xn1 Y n − 1 ‾ \overline{Y_{n-1}} Yn1,先换 X n ‾ \overline{X_n} Xn
∑ i = 1 n − 1 ( x i − X n ‾ ) ( y i − Y n ‾ ) = ∑ i = 1 n − 1 ( x i − X n − 1 ‾ + X n − 1 ‾ − X n ‾ ) ( y i − Y n ‾ ) = ∑ i = 1 n − 1 ( x i − X n − 1 ‾ ) ( y i − Y n ‾ ) + ( X n − 1 ‾ − X n ‾ ) ∑ i = 1 n − 1 ( y i − Y n ‾ ) = ∑ i = 1 n − 1 ( x i − X n − 1 ‾ ) ( y i − Y n − 1 ‾ + Y n − 1 ‾ − Y n ‾ ) + ( X n − 1 ‾ − X n ‾ ) ∑ i = 1 n − 1 ( y i − Y n ‾ ) = ∑ i = 1 n − 1 ( x i − X n − 1 ‾ ) ( y i − Y n − 1 ‾ ) + ∑ i = 1 n − 1 ( x i − X n − 1 ‾ ) ( Y n − 1 ‾ − Y n ‾ ) + ( X n − 1 ‾ − X n ‾ ) ∑ i = 1 n − 1 ( y i − Y n ‾ ) \begin{aligned} \sum_{i=1}^{n-1}(x_i-\overline{X_n})(y_i-\overline{Y_n}) &=\sum_{i=1}^{n-1}(x_i-\overline{X_{n-1}}+\overline{X_{n-1}}-\overline{X_n})(y_i-\overline{Y_n})\\ &=\sum_{i=1}^{n-1}(x_i-\overline{X_{n-1}})(y_i-\overline{Y_n})+(\overline{X_{n-1}}-\overline{X_n})\sum_{i=1}^{n-1}(y_i-\overline{Y_n})\\ &=\sum_{i=1}^{n-1}(x_i-\overline{X_{n-1}})(y_i-\overline{Y_{n-1}}+\overline{Y_{n-1}}-\overline{Y_n})+(\overline{X_{n-1}}-\overline{X_n})\sum_{i=1}^{n-1}(y_i-\overline{Y_n})\\ &=\sum_{i=1}^{n-1}(x_i-\overline{X_{n-1}})(y_i-\overline{Y_{n-1}})+\sum_{i=1}^{n-1}(x_i-\overline{X_{n-1}})(\overline{Y_{n-1}}-\overline{Y_n})+(\overline{X_{n-1}}-\overline{X_n})\sum_{i=1}^{n-1}(y_i-\overline{Y_n}) \end{aligned} i=1n1(xiXn)(yiYn)=i=1n1(xiXn1+Xn1Xn)(yiYn)=i=1n1(xiXn1)(yiYn)+(Xn1Xn)i=1n1(yiYn)=i=1n1(xiXn1)(yiYn1+Yn1Yn)+(Xn1Xn)i=1n1(yiYn)=i=1n1(xiXn1)(yiYn1)+i=1n1(xiXn1)(Yn1Yn)+(Xn1Xn)i=1n1(yiYn)
上式第二项为0,因为 ∑ i = 1 n − 1 ( x i − X n − 1 ‾ ) = ∑ i = 1 n − 1 x i − ( n − 1 ) X n − 1 ‾ = ∑ i = 1 n − 1 x i − ∑ i = 1 n − 1 x i = 0 \sum_{i=1}^{n-1}(x_i-\overline{X_{n-1}})=\sum_{i=1}^{n-1}x_i-(n-1)\overline{X_{n-1}}=\sum_{i=1}^{n-1}x_i-\sum_{i=1}^{n-1}x_i=0 i=1n1(xiXn1)=i=1n1xi(n1)Xn1=i=1n1xii=1n1xi=0
第三项可简化为 ( X n − 1 ‾ − X n ‾ ) ( Y n ‾ − y n ) (\overline{X_{n-1}}-\overline{X_n})(\overline{Y_n}-y_n) (Xn1Xn)(Ynyn)
因为 ∑ i = 1 n − 1 ( y i − Y n ‾ ) + y n − Y n ‾ = ∑ i = 1 n y i − n Y n ‾ = 0 \sum_{i=1}^{n-1}(y_i-\overline{Y_n})+y_n-\overline{Y_n}=\sum_{i=1}^n{y_i}-n\overline{Y_n}=0 i=1n1(yiYn)+ynYn=i=1nyinYn=0
所以有 ∑ i = 1 n − 1 ( y i − Y n ‾ ) = Y n ‾ − y n \sum_{i=1}^{n-1}(y_i-\overline{Y_n})=\overline{Y_n}-y_n i=1n1(yiYn)=Ynyn
于是
∑ i = 1 n − 1 ( x i − X n ‾ ) ( y i − Y n ‾ ) = ∑ i = 1 n − 1 ( x i − X n − 1 ‾ ) ( y i − Y n − 1 ‾ ) − ( X n − 1 ‾ − X n ‾ ) ( y n − Y n ‾ ) = V n − 1 + ( X n ‾ − X n − 1 ‾ ) ( y n − Y n ‾ ) \sum_{i=1}^{n-1}(x_i-\overline{X_n})(y_i-\overline{Y_n})=\sum_{i=1}^{n-1}(x_i-\overline{X_{n-1}})(y_i-\overline{Y_{n-1}})-(\overline{X_{n-1}}-\overline{X_n})(y_n-\overline{Y_n})\\ =V_{n-1}+(\overline{X_n}-\overline{X_{n-1}})(y_n-\overline{Y_n}) i=1n1(xiXn)(yiYn)=i=1n1(xiXn1)(yiYn1)(Xn1Xn)(ynYn)=Vn1+(XnXn1)(ynYn)于是
V n = V n − 1 + ( X n ‾ − X n − 1 ‾ ) ( y n − Y n ‾ ) + ( x n − X n ‾ ) ( y n − Y n ‾ ) = V n − 1 + ( x n − X n ‾ + X n ‾ − X n − 1 ‾ ) ( y n − Y n ‾ ) = V n − 1 + ( x n − X n − 1 ‾ ) ( y n − Y n ‾ ) \begin{aligned} V_n&=V_{n-1}+(\overline{X_n}-\overline{X_{n-1}})(y_n-\overline{Y_n})+(x_n-\overline{X_n})(y_n-\overline{Y_n})\\ &=V_{n-1}+(x_n-\overline{X_n}+\overline{X_n}-\overline{X_{n-1}})(y_n-\overline{Y_n})\\ &=V_{n-1}+(x_n-\overline{X_{n-1}})(y_n-\overline{Y_n}) \end{aligned} Vn=Vn1+(XnXn1)(ynYn)+(xnXn)(ynYn)=Vn1+(xnXn+XnXn1)(ynYn)=Vn1+(xnXn1)(ynYn)

5.4 协方差的聚合计算

V n = ∑ i = 1 n ( x 1 , i − X n ‾ ) ( y 1 , i − Y n ‾ ) V m = ∑ i = 1 m ( x 2 , i − X m ‾ ) ( y 2 , i − Y m ‾ ) V n + m = ∑ i = 1 n ( x 1 , i − X n + m ‾ ) ( y 1 , i − Y n + m ‾ ) + ∑ i = 1 m ( x 2 , i − X n + m ‾ ) ( y 2 , i − Y n + m ‾ ) V_n = \sum_{i=1}^n (x_{1,i}-\overline{X_n})(y_{1,i}-\overline{Y_n})\\ V_m = \sum_{i=1}^m(x_{2,i}-\overline{X_m})(y_{2,i}-\overline{Y_m})\\ V_{n+m} = \sum_{i=1}^n(x_{1,i}-\overline{X_{n+m}})(y_{1,i}-\overline{Y_{n+m}})+\sum_{i=1}^m(x_{2,i}-\overline{X_{n+m}})(y_{2,i}-\overline{Y_{n+m}}) Vn=i=1n(x1,iXn)(y1,iYn)Vm=i=1m(x2,iXm)(y2,iYm)Vn+m=i=1n(x1,iXn+m)(y1,iYn+m)+i=1m(x2,iXn+m)(y2,iYn+m) 简化一下第一项,
∑ i = 1 n ( x 1 , i − X n ‾ + X n ‾ − X n + m ‾ ) ( y 1 , i − Y n + m ‾ ) = ∑ i = 1 n ( x 1 , i − X n ‾ ) ( y 1 , i − Y n + m ‾ ) + ( X n ‾ − X n + m ‾ ) ∑ i = 1 n ( y 1 , i − Y n + m ‾ ) = ∑ i = 1 n ( x 1 , i − X n ‾ ) ( y 1 , i − Y n + m ‾ ) + ( X n ‾ − X n + m ‾ ) ( n Y n ‾ − n Y n + m ‾ ) = ∑ i = 1 n ( x 1 , i − X n ‾ ) ( y 1 , i − Y n + m ‾ ) + n ( X n ‾ − X n + m ‾ ) ( Y n ‾ − Y n + m ‾ ) = ∑ i = 1 n ( x 1 , i − X n ‾ ) ( y 1 , i − Y n ‾ + Y n ‾ − Y n + m ‾ ) + n ( X n ‾ − X n + m ‾ ) ( Y n ‾ − Y n + m ‾ ) = ∑ i = 1 n ( x 1 , i − X n ‾ ) ( y 1 , i − Y n ‾ ) + ( Y n ‾ − Y n + m ‾ ) ∑ i = 1 n ( x 1 , i − X n ‾ ) + n ( X n ‾ − X n + m ‾ ) ( Y n ‾ − Y n + m ‾ ) = ∑ i = 1 n ( x 1 , i − X n ‾ ) ( y 1 , i − Y n ‾ ) + n ( X n ‾ − X n + m ‾ ) ( Y n ‾ − Y n + m ‾ ) = V n + n ( X n ‾ − X n + m ‾ ) ( Y n ‾ − Y n + m ‾ ) \sum_{i=1}^n(x_{1,i}-\overline{X_n}+\overline{X_n}-\overline{X_{n+m}})(y_{1,i}-\overline{Y_{n+m}})\\ =\sum_{i=1}^n(x_{1,i}-\overline{X_n})(y_{1,i}-\overline{Y_{n+m}}) + (\overline{X_n}-\overline{X_{n+m}})\sum_{i=1}^n(y_{1,i}-\overline{Y_{n+m}})\\ =\sum_{i=1}^n(x_{1,i}-\overline{X_n})(y_{1,i}-\overline{Y_{n+m}}) + (\overline{X_n}-\overline{X_{n+m}})(n\overline{Y_n}-n\overline{Y_{n+m}})\\ =\sum_{i=1}^n(x_{1,i}-\overline{X_n})(y_{1,i}-\overline{Y_{n+m}}) + n(\overline{X_n}-\overline{X_{n+m}})(\overline{Y_n}-\overline{Y_{n+m}})\\ =\sum_{i=1}^n(x_{1,i}-\overline{X_n})(y_{1,i}-\overline{Y_n}+\overline{Y_n}-\overline{Y_{n+m}}) + n(\overline{X_n}-\overline{X_{n+m}})(\overline{Y_n}-\overline{Y_{n+m}})\\ =\sum_{i=1}^n(x_{1,i}-\overline{X_n})(y_{1,i}-\overline{Y_n})+ (\overline{Y_n}-\overline{Y_{n+m}})\sum_{i=1}^n(x_{1,i}-\overline{X_n})+ n(\overline{X_n}-\overline{X_{n+m}})(\overline{Y_n}-\overline{Y_{n+m}})\\ =\sum_{i=1}^n(x_{1,i}-\overline{X_n})(y_{1,i}-\overline{Y_n})+ n(\overline{X_n}-\overline{X_{n+m}})(\overline{Y_n}-\overline{Y_{n+m}})\\ =V_n+n(\overline{X_n}-\overline{X_{n+m}})(\overline{Y_n}-\overline{Y_{n+m}}) i=1n(x1,iXn+XnXn+m)(y1,iYn+m)=i=1n(x1,iXn)(y1,iYn+m)+(XnXn+m)i=1n(y1,iYn+m)=i=1n(x1,iXn)(y1,iYn+m)+(XnXn+m)(nYnnYn+m)=i=1n(x1,iXn)(y1,iYn+m)+n(XnXn+m)(YnYn+m)=i=1n(x1,iXn)(y1,iYn+YnYn+m)+n(XnXn+m)(YnYn+m)=i=1n(x1,iXn)(y1,iYn)+(YnYn+m)i=1n(x1,iXn)+n(XnXn+m)(YnYn+m)=i=1n(x1,iXn)(y1,iYn)+n(XnXn+m)(YnYn+m)=Vn+n(XnXn+m)(YnYn+m) 同理,可将 V n + m V_{n+m} Vn+m 表达式的第二项简化为
V m + m ( X m ‾ − X n + m ‾ ) ( Y m ‾ − Y n + m ‾ ) V_m+m(\overline{X_m}-\overline{X_{n+m}})(\overline{Y_m}-\overline{Y_{n+m}}) Vm+m(XmXn+m)(YmYn+m)
注意到 n ( X n ‾ − X n + m ‾ ) + m ( X m ‾ − X n + m ‾ ) = n X n ‾ + m X m ‾ − ( n + m ) X n + m ‾ = 0 n(\overline{X_n}-\overline{X_{n+m}}) + m(\overline{X_m}-\overline{X_{n+m}}) = n\overline{X_n}+m\overline{X_m}-(n+m)\overline{X_{n+m}}=0 n(XnXn+m)+m(XmXn+m)=nXn+mXm(n+m)Xn+m=0
因此有 − n ( X n ‾ − X n + m ‾ ) = m ( X m ‾ − X n + m ‾ ) -n(\overline{X_n}-\overline{X_{n+m}})=m(\overline{X_m}-\overline{X_{n+m}}) n(XnXn+m)=m(XmXn+m)
于是 V n + m = V n + V m + n ( X n ‾ − X n + m ‾ ) ( Y n ‾ − Y n + m ‾ − Y m ‾ + Y n + m ‾ ) = V n + V m + n ( X n ‾ − X n + m ‾ ) ( Y n ‾ − Y m ‾ ) V_{n+m}=V_n+V_m+n(\overline{X_n}-\overline{X_{n+m}})(\overline{Y_n}-\overline{Y_{n+m}}-\overline{Y_m}+\overline{Y_{n+m}})\\ =V_n+V_m+n(\overline{X_n}-\overline{X_{n+m}})(\overline{Y_n}-\overline{Y_m}) Vn+m=Vn+Vm+n(XnXn+m)(YnYn+mYm+Yn+m)=Vn+Vm+n(XnXn+m)(YnYm) n ( X n ‾ − X n + m ‾ ) = n n + m ( ( n + m ) X n ‾ − ( n + m ) X n + m ‾ ) = n n + m ( n X n ‾ + m X n ‾ − ∑ i = 1 n x 1 , i − ∑ i = 1 m x 2 , i ) = n n + m ( ∑ i = 1 n x 1 , i + m X n ‾ − ∑ i = 1 n x 1 , i − m X m ‾ ) = n m n + m ( X n ‾ − X m ‾ ) n(\overline{X_n}-\overline{X_{n+m}})=\frac{n}{n+m}((n+m)\overline{X_n}-(n+m)\overline{X_{n+m}})\\ =\frac{n}{n+m}(n\overline{X_n}+m\overline{X_n}-\sum_{i=1}^n{x_{1,i}}-\sum_{i=1}^m{x_{2,i}})\\ =\frac{n}{n+m}(\sum_{i=1}^n{x_{1,i}}+m\overline{X_n}-\sum_{i=1}^n{x_{1,i}}-m\overline{X_m})\\ =\frac{nm}{n+m}(\overline{X_n}-\overline{X_m}) n(XnXn+m)=n+mn((n+m)Xn(n+m)Xn+m)=n+mn(nXn+mXni=1nx1,ii=1mx2,i)=n+mn(i=1nx1,i+mXni=1nx1,imXm)=n+mnm(XnXm) 于是 V n + m = V n + V m + n m n + m ( X n ‾ − X m ‾ ) ( Y n ‾ − Y m ‾ ) V_{n+m}=V_n+V_m+\frac{nm}{n+m}(\overline{X_n}-\overline{X_m})(\overline{Y_n}-\overline{Y_m}) Vn+m=Vn+Vm+n+mnm(XnXm)(YnYm)

你可能感兴趣的:(算法)