There’s too many kids in the world!

See, you set up a great system going on for tracking a kid’s actions and determining how much coal or candy they get. It’s easy, and it’s foolproof. Why, it’s so good that Santa cut the budget for North Pole Behavior Psychology Lab, because he thinks you’re capable enough to do it without money.

Now, this is a problem. More and more kids are believing in Santa every day. And the computers you’ve got running the matrix multiplications to determine each kid’s presents? They’re *slow*. Relics from the 80s.

In fact, you just crossed a scary threshold — given the number of children Santa needs to deliver to next Christmas, you *don’t have enough computing power and time* to determine presents for every kid by Christmas Eve. Christmas can’t happen.

There’s three ways you can fix this problem:

- Reduce the number of kids to compute presents for
- Increase the number of computers to run math
- Decrease the amount of time it takes a computer to compute presents

Unfortunately, thanks to budget cuts and your lack of desire to kill children, you can’t implement the first two solutions. Sounds like you have to make optimizations if you want to *save Christmas again*.

So let’s re-examine our pipeline. Identify anything we can simplify.

Alright! So we go from knowing the *actions per child* (matrix **A**), to knowing the *points per child* (**A*****B**), to knowing the *presents per child* (**A*****B*****C**).

Huh. So, when we look at our system this way… why do we even bother with matrix **B**, the *points per action* matrix? I mean, we cancel out both terms belonging to **B** when we multiply **A*****B*****C** — we don’t ultimately care about points or actions. Can we fold **B** into **C**? Create one *presents per action* matrix, and discard the idea of “points” entirely?

Ooooooh. That’s a good idea.

Yes! That is totally possible! In fact, this is one of the most awesome and convenient things about matrix multiplication. All you need to do to combine **B** and **C** into a *presents per action* matrix is… multiply them.

And if we multiply our actions per child matrix with this new presents per action matrix…

It’s the same result as we got before! That’s our exact presents-per-child matrix from previous chapter, but we only did one matrix multiplication to get it!

This is called the *associative property* of multiplication — previously, we did (**A*****B**)***C**, and now we’re doing A*(**B*****C**), and we get the same results. That is, matrix **B** can *associate* with **A** or **C**. If **B** and **C** are both constant matrices, we can just multiply them together into a new matrix **D**=**B*****C** and use it everywhere.

So with one quick calculation of **D**=**B*****C**, you just *halved* the amount of processing time your computers need to calculate presents per kid! You are really good at saving Christmas, dude.