The return format is not very easy to understand. For each user block, we want to know three estimates:

1. how much incoming data in a user iteration.
2. how much computation (YtY and LS) in a user iteration.
3. how much outgoing data in a product iteration.

We can create a case class `Cost(index, n, numRatings, dataOut, dataIn)` where `n` is number of users/products in this block. Then the output type becomes `(Seq[Cost], Seq[Cost])` -> user block costs and product block costs.