I do not currently have any paid positions available. Some positions may be available
for the summer of 2016. If that occurs, I will email the cs-grads and cs-ugrads
email lists in the spring asking for applications. If you would like to work
with me on a master's project (for CS 685/695) or for an undergraduate independent
study course, please stop by to talk.

A student working on research with me has two options in terms of the topic/project.
First, you could research on topics related to my own research - computational
complexity, theoretical computer science, some topics related to bioinformatics or
linguistics. For more on these, see the description
and links below. In this case, I would help you with background material and picking
a particular problem to look at. Second, if you already are interested in a topic,
you can propose a project to me. For example, a student in the past was interested
in neural networks and genetic algorithms, and we came up with a project in that
area for him/her to work on. In this case, I will help you as best I can with
background material, but it may be the case that we are both learning the area
together if you choose an area I am not an expert in.

My personal research is in theoretical computer science, specifically computational complexity.
For more on what this means, see my
research publications, see
Computational Complexity on wikipedia,
search the web, or come talk to me. The courses at Indiana State that are closest to my research
are the theory and algorithms courses (CS 620, 658, 621, 420/520, 458/558, 303) and some of
the math courses.
If you greatly enjoyed those courses, you may be interested in research in
theoretical computer science.

Unsure?
Suppose you are unsure if you are interested in theoretical computer science, or
you have not taken many (or any) of the courses I listed. Do the
following excite you? If so, you may be interested in theoretical
computer science.

The fact and proof that there are "more" real numbers than rational numbers.

The fact and proof that there are "uncomputable" problems that cannot be
solved by any computer.

The fact that if you could factor numbers fast then RSA cryptography
used on the internet would not be secure.

The "P versus NP" problem.
And in particular, the fact that for many important problems it is completely
wide-open how fast they can be solved (maybe really super fast, maybe/probably
incredibly ridiculously slow). And
the fact that some of the "NP-hard" problems
cannot even be approximated
unless they can be solved exactly/optimally.

Probability and randomized algorithms. For example, the
fact that you can
determine with high probability whether a string you look at
is the same as one your neighbor looks at
by only exchanging a very small number
of bits with someone else (much fewer bits than the whole string).

The fact that relatively simple "divide and conquer" algorithms
do better than you might expect for things such as
sorting numbers and
multiplying matrices.
And slightly more complicated algorithms give
fast algorithms for problems such as multiplying numbers.

If you are unsure, feel free to come talk to me
about what this research is like.

The basic format is to consider "things we don't know yet"
and try to figure them out. This entails learning what is already known and
trying to improve on current knowledge. This means most of your time would be
spent reading, thinking, and trying things out.

Programming?
Traditional research in theoretical computer science makes use of surprisingly
little actual programming: theoretical computer science research is a mix between math proofs
and computer science algorithms. However, I am interested in bringing theory of
computing and practical programming together more than is often done. So depending
on the interests and skills of the individual student, working on research with
me could involve large programming projects that have a strong theoretical
foundation.

Research Topic?
The exact problem you work on will depend on your interests. It will have
to be something I am interested in and can advise you on. But it is critical that
you are interested in the topic, so you will determine the direction
the research takes (under my guidance, of course). To begin the project,
I will take the lead in giving you some background on the types of problems
you could work on. Once you are getting comfortable, we will decide together
which direction you should go in.

Presentations.
Students will present to me what they have learned and discovered regularly -
at least weekly. These presentations will be informal, with me asking questions
and potentially helping on some steps (e.g., why is such and such probability
< 1?).

By the end of the research project, the goal is that the student has a good
background in some aspect of theoretical computer science and has made some
nice new observations. The student will write up these observations into a
written paper and present the results publicly at Indiana State, and more
broadly if appropriate.

Benefits.
Participating in this type of research project is particularly beneficial to
those thinking of pursuing further graduate study after leaving ISU. But the
project would be beneficial and fun for anyone interested in theory of computing.

Schedule.
There is some flexibility in terms of the schedule. If you have a
summer vacation planned, we can probably schedule your 10 work-weeks
around that.

Bioinformatics. Work with myself and Dr. Yongsheng Bai on
projects related to Bioinformatics. One project looks for novel
splice junctions in encoded RNA sequences. See
the RSR project website.

Linguistics. Work with myself, Dr. David Hutchison, and Eric Anderson
on analyzing databases of English text to construct language models that
can be used in automated reasoning. The work that is needed currently is
to write and run programs that collect data about how frequently different
words appear immediately after or near other words, and then use this
data in constructing or analyzing sentences.

Factoring. Factoring large numbers is a very difficult task which
RSA encryption relies on for security. The project would be to study
the best factoring algorithms and attempt to factor the largest
possible numbers with ISU's computing resources (e.g., using the HPC and
linux labs as a distributed computer).

Randomized algorithms. Some problems have much more simple or faster
algorithms if they can use random bits. This project would be to pick
one particular problem and study how fast we could make a deterministic
algorithm for the problem. One potential problem is prime testing.
Another is certain kinds of numerical integration.

Brain trauma research. When a patient with severe brain trauma reaches
the hospital, very specific protocols are followed to monitor their
condition and respond to changes in their condition. The project would
be to examine (with "smart" computer algorithms) extensive data that
has been collected on some patients to try to find relationships between
treatment choices and outcome.

Distributed graphics. Modern computer animated movies largely typically
use vast computer resources to render the movie. This project would be
to study these algorithms and see what can be achieved with ISU's
computing resources (e.g., using the HPC and linux labs as a distributed
computer for making movies).

Game theory and college athletics. Universities have recently been
changing athletic conference affiliation quite a bit. An interesting
question is when this will ever end, and if the universities are really
acting in their own interests? This project would be to try to model
and study the universities' choices in terms of game theory.