Research Interests

Last updated: March 6, 2004

On this page, I'll briefly outline my academic and research goals. For those of you who hate math, I suggest you leave this page as quickly as you can manage, before I drown you in a sea of algebraic and combinatorial goodness.

As I type this, I'm completing my Master's thesis in computer science at the University of Ottawa, where I'm studying combinatorics. I've always been interested in this field, and my research up-to-date has involved studying certain problems from design theory, as well as trying to solve highly symmetric problems efficiently using branch-and-cut techniques.

My work in design theory began in the summer of 2001, when I was the recipient of an NSERC research undergraduate award, and worked under the supervision of Dr. Lucia Moura to enumerate 2-(v,3,1) packing designs (also known as partial Steiner Triple Systems, or PSTS) with the avoidance of 2-(6,3,1) subdesigns (also known as Pasches). We managed to construct an isomorph-free catalogue of these designs for v = 3, ..., 15 via backtracking on point configurations using a distributed technique. A very outdated, and poorly written paper can be found below, if you're interested.

For the course component of my Master's degree, I studied a variety of different subjects and wrote several research papers. The topic I studied for my course in finite fields and coding theory was Reed-Muller codes; I wrote a paper explaining them, and wrote a small ANSI C library to perform encoding and decoding. For my combinatorial algorithms course, I studied a paper, "Pruning by Isomorphism in Branch-and-Cut", by Francois Margot (2001), and devised two algorithms to determine the symmetry group of an arbitrary ILP. To fulfill the requirements of my software usability course, I wrote a Java program called CookBook and performed a usability study on it, and also wrote a paper comparing three widely used UNIX GUI toolkits (Motif, Qt, and GTK+). I chose to investigate several algebraic algorithms (mostly pertaining to polynomials over fields) for my parallel algorithms course. All of these are available below.

Upon the completion of my Master's degree, I will be leaving the study of computer science and instead attempt a Ph.D. in mathematics (more specifically algebra). While I am still interested in combinatorics (most notably graph theory and design theory), I hold stronger interests in algebraic structures and would like to pursue research in finite fields and commutative algebra. My current research interests and questions include:

  1. Given a finite field Fpn = Fp[x]/(f) and an element x in Fpn* (the multiplicative group of the field), as x is a unit, it is a 1 divisor. It is possible to find some power j of f such that x | fj + 1, i.e., fj + 1 = xy for some y in Fpn*. If we can find this j, the problem of finding multiplicative inverses is reduced to polynomial division. Are there cases where we may easily determine j, and how?
  2. If R and S are both rings with multiplicative identities, and f1: R -> S and f2: R -> S are ring homomorphisms, is it possible to find r in End(R) and s in End(S) such that sf1r = f2?
  3. Consider the vector space Fqn. If we consider all k-subspaces of Fqn, can we find an ordering of subspaces and selection of bases such that we can write the bases in a universal cycle? If not generally, in what cases is this possible? Can we devise a certain construction? Can we enumerate all nonisomorphic universal cyycles given q, n, and k?

In my spare time, I am currently dedicated to examining the third question for the case q=2 and k=2. I have written a backtracking program to enumerate all universal cycles, but due to the combinatorial nature of the problem, I cannot even get results for n=5. If I can find a technique to test partial cycles for isomorphism (by imposing some lexicographical ordering on cycles where a cycle is canonical if and only if the subcycle of which it is an extension is canonical), then I can reduce the number of cycles we test dramatically. However, at the present moment, I have not found a feasible technique to do so - due to a structural restriction I place on the cycles to avoid a large number of isomorphisms, nauty is not feasible, and a pure brute-force method of building permutations using backtracking to test canonicity of incidence matrices of cycles can map a valid cycle to an invalid one (where vector spaces are repeated - it is likely this would happen with the nauty approach as well). More thought on this is needed in order to proceed.