If you’re a student thinking about applying to Utah and/or working with me, then you’ve come to the right place. Welcome !
The first thing you’ll want to do is get to know the kinds of things I’m interested in. Broadly speaking, I’m interested in algorithms , computational geometry, and data mining, with a special interest in problems that come from large data sets. Perhaps the best way to get a better idea of what I’m interested in is to (in order)
- Read (or scan the introductions of) some of my papers.
- Talk to my students
- Attend my seminar, and take my classes.
- Scan my blog.
- Come to my group meeting
If you’ve done at least two of the above, email me to schedule a meeting. You don’t have to have a crystal clear idea of what problems you’re interested in, but something along the lines of, ‘You mumbled about this in your paper about X, and I have a much better idea‘ or even, ‘I have no clue what you were talking about in paper Y, but the topic sounds interesting‘ is a great way to start the conversation.
Generally speaking, if you’re interested in algorithms, computational geometry, or data mining, we can find something interesting to do together.
I often get asked, “how does one go about doing research ?”. Like most simple questions, this one has a complicated answer. A few maxims I have found to be useful though:
- Be curious, like a child. Watch a baby playing with a new toy. They’ll turn it around, fiddle with all its ins and outs, and will pay no heed to what the toy is “supposed to do”. They’re not worried about getting the “right answer”, or even getting any answer. This works particularly well when you’re starting with a problem
- Be bold, and relentless. Take a problem and OWN it – know everything there is to know about it, and throw every idea in the box at it. Stamina is as much a part of doing research as inspiration.
- Be willing to wander. Sometimes the question you start with isn’t the one you end up with. Allow yourself the flexibility to spot something even more interesting lurking alongside the path.
I have an ‘organic whole’ view of research in algorithms, which means that any courses you take in the realm of algorithms (and theory in general) will help strengthen your fundamentals. This goes double for math classes that you might have taken, or wish to take.
Material that you need to cover to be literate in algorithms (with recommended texts in parentheses: also see the Theory@Princeton list of useful texts in theory and math in general) include:
- Basic algorithms (CLRS, KT)
- Randomization (MR, MU)
- Approximations (V)
- Geometry (OdBvKC)
- Complexity theory (P, BA)
For general math literacy, you should be familiar with
- Linear Algebra
- Basic graph theory and combinatorics
- Probability theory
You should have covered all of this in undergraduate work (and if you’re an undergraduate, make sure you do!).
In addition to the basics, much of modern theoryCS requires a passing familiar with basic concepts in
- Topology (combinatorial, algebraic, differential)
- Differential geometry
- Fourier Analysis
Problems are the lifeblood of algorithms research, and some of the most fascinating problems in algorithms come from outside application areas. Some areas use algorithms much more heavily than others, and you’ll find that a basic familiarity with the qua of these areas will help immensely. You’ll also find these areas heavily infested with theory folk
- Machine Learning
- Graphics and Visualization
- Computational biology, and bioinformatics in general
- Economics, game theory, and e-commerce.
Many (if not all) of these classes are offered at the School of Computing. Check out the CS course catalog for more information.
On surviving graduate school
Yes, surviving. And maybe even (if you’re a Ph.D student), wrestling the snake.