Minimax — the principle:
In a zero-sum two-player game, assume your opponent plays optimally.
Back up values from the leaves: MAX nodes take the maximum child value,
MIN nodes take the minimum child value.
The root value is the score you can guarantee no matter what MIN does.
Alpha-beta pruning: skip any branch where you already know its value cannot
influence the backed-up result — it prunes without changing the answer.
Reduces worst-case O(bd) to O(bd/2) with good move ordering.