if |scope(child 1 ) ∪ scope(child 2 ) | ≥ nV ars then createM ixture(root , child 1 , child 2 ) else createM ultivariateGaussian(root , child 1 , child 2 ) end if end if for each child of root do oSLRAU ( child , data ) end for else if isSum(root ) then for each child of root do subset ← { x ∈ data | likelihood(child , x ) ≥ likelihood(child , x ) ∀child of root } oSLRAU ( child , subset ) w root , child ← n child +1 nroot+#children end for else if isLeaf ( root ) then update mean µ ( root ) based on Eq . 3 update covariance matrix Σ ( root ) based on Eq . 4 end if Figure 3 shows the data points along the first two dimensions and the Gaussian components learned . We can see that the algorithm generates new components to model the correlation between x 1 and x 2 as it processes more data .