On my last trip through the Phantom Tollbooth, I met up with my old friend, the Mathemagician. The first words out of his mouth were not, "Hi, Tim! How are you doing?" but "Somebody has ripped all the labels off of my irreducible characters of the symmetric group!" Now, if you don't know what irreducible characters of the symmetric group are, then you should run, not walk, to your nearest copy of EC2, and read up about it. (And if you didn't recognize my allusion to the Phantom Tollbooth, then that's another book you should read.) But for now, just think of an irreducible character as a machine that takes as input a partition mu of some fixed integer n, shown in red here, and outputs an integer according to a certain rule. There is a whole family of these irreducible characters, and they are indexed by partitions lambda of n. The Mathemagician had a whole warehouse full of these machines, and they were all carefully labeled in green. But alas, some vandal had come in and ripped all the labels off these irreducible characters, so he was no longer able to distinguish one of them from another. So he asked me and my co-author, Jennifer Paulhus, for some help in restoring these missing labels. Now this problem is not that hard in theory---at least if you know the value of n, which I'm always going to assume you do know---because in principle, you could just go through all possible input partitions mu, tabulate the outputs, and then compare the results against your favorite computer algebra package, and restore the labels that way. That works, but it's very inefficient, because first of all, there are a whole lot of input values you can try---a constant to the root n, in fact---and then it's also true that for a lot of those input values, it takes a long time for the answer to pop out. It has high computational complexity. So what you really want is an efficient algorithm, that uses as few inputs as possible, and has low computational complexity. The good news is that Jennifer and I were able to solve the Mathemagician's problem. But in order for me to tell you a little bit more about that, I have to say more about what irreducible characters are. Irreducible characters can be computed in terms of these combinatorial gadgets called "border-strip tableaux." A border-strip tableau is a Young diagram filled with integers that weakly increase across rows and weakly increase down columns, and such that for each integer, the boxes containing that particular integer form what's called a "border strip." A border strip is a connected set of boxes such that the rightmost box in each row is directly beneath the leftmost box in the row above it. So for example, the rightmost 2 in row 2 is directly beneath the leftmost 2 in row 1. The Murnaghan-Nakayama rule tells you that the irreducible character indexed by lambda, evaluated at mu, is given by some signed sum over all border-strip tableaux of shape lambda and type mu. "Type mu" just means that the parts of mu give the lengths of the border strips. Don't worry about the sign; what I want to emphasize is if there are no border-strip tableaux of shape lambda and type mu, then this is an empty sum, and the character value is zero. That is important. So for example, let's take n = 8, and let's take as our input value mu = (8), meaning the partition with one part of size 8. If you think about it for a moment, for most shapes lambda, you just can't fit a border strip of length 8 inside it. It's just too big---unless lambda is a hook. If lambda is a hook, then the character value is plus or minus 1; but if it's not a hook then you're going to get an empty sum and it's going to be zero. That's kind of nice! So you can tell just from one input value whether or not lambda is a hook. If lambda is not a hook, then you can try the input (7,1), and by similar reasoning, you can show that you're going to get zero unless the length of the longest hook is at least 7. More generally, there is a Proposition that if you try the sequence of inputs (n), (n-1,1), (n-2,1,1), and so forth, then the first nonzero character value you get in that sequence tells you the length of the largest hook. That's the first step in our algorithm. I'm not going to go through the whole algorithm, but just to give you a sketch, there's a forward pass and a backward pass. In the forward pass, we use ideas similar to the ones I've just described to recover the principal hook lengths of lambda one at a time, starting from the outside and going in. (A principal hook just means that the corner of the hook lies on the main diagonal of the Young diagram.) Once you've got the principal hook lengths, that's a lot of information, but it doesn't tell you everything because it still doesn't tell you for each hook, how many boxes are in the arm versus how many are in the leg. So there's a second pass where we recover the arm lengths and leg lengths, starting from the inside out. This part of the algorithm is complicated to describe in words, and it takes up most of our paper, but fortunately, it has low computational complexity. Anyway, our main result is that this algorithm works, and in the worst case it takes only about n^1.5 inputs, which is a lot better than a constant to the root n. That's not actually the end of the story; there's been an improvement by my colleague Alex Miller at the Center for Communications Research. Using a bit more character theory than we did, he was able to reduce the number of inputs to n. Again, these values are easy-to-compute values of the characters. And even that's not the end of the story, because n is almost certainly not optimal. As far as I know, the true minimum number could be as low as log n or maybe even a constant. If you think about the hook-length formula or hook-length formulas for skew shapes, you might think that you could possibly get close to a constant number. I don't know how to prove that, but I hope some of you will be tempted to try to improve on our results, so that the next time the Mathemagician has this vandal, we'll be able to solve his problem even faster!