Currently, when a validator finds a token range different in n replicas, data streams are initiated simultaneously between each possible pair of these n nodes, in both directions. It yields n*(n-1) data stream in total.
It can be done in a sequence - Replica -> R, R -> R, ... , R[n-1] -> R[n]. After this process, the data in R[n] are up to date. Then, we continue: R[n] -> R, R -> R, ... , R[n-2] -> R[n-1]. The active repair is done after 2*(n-1) data transfers performed sequentially in 2*(n-1) steps.