Doing a project is optional, it is a way to improve your grade if you did not do well on the exams, or just want to get some extra credit.

All projects will be due by the end of the semester. You will have to:

- make a short (5-8 minutes) presentation in the last class, showing your work.
- Also, you will have to write a 5-6 page report, describing the problem, your solution, and the results obtained.

Before you start working on the topic, I have to approve it.
The topic should be chosen **before** the end of Spring Recess, **April 18**.

**Report you progress regularly (for example, once a week), so I can guide you, and you don’t waste time**.

Read Rosen’s book, in the end of each chapter, there is a section
*Computer Projects*, where you can find some ideas.
Also, you can look in the chapters we have not talked about yet (Graphs, Sets, Probability, for example).

Find something that is interesting and seems to be related to the course.

If you can write code, choose a project that requires programming. We can always find a project that matches your current proficiency in programming.

Try to find something you are interested in, and we will find a way to add some math to make a project out of it.

- A simple propositional satisfiability solver. (A program that checks whether the given compound proposition is satisfiable or not).
- Programming fractals, L-systems, etc.
- Another fractal drawing topic: Context-free art program.
- Analysis of social network data. (You will need a specific topic / research goal here).
- Solving logical puzzles with SMT solvers or Prolog.
- Experimental analysis of the running time complexity of various standard algorithms.

I will add more topics, but, maybe you already know something interesting you would like to work on.

- Sudoku solver.
- Wolfram cellular automata.
- Maze generation with Prim’s algorithm.
- Maze path finding algorithm.
- Fractals visualization with OpenGL.
- RSA enctryption/decryption.
- Procedural music generation using ChucK.
- Logical paradoxes (essay).
- Automatic summarization of texts.
- Stochastic simulation of the Predator-Prey (Lotka-Volterra) model.
- Generation of permutations and combinations (described in Rosen, for example).
- Experimental analysis and Big-O time complexity of sorting algorithms.
- Map coloring game.
- Connectivity of random graphs. Giant connected component.
- Generating large prime numbers.
- A probabilistic strategy for solving the game Minesweeper.
- Random graphs. Experimental comparison of Erdos-Renyi and Barabasi–Albert random graph models.
- 2048: The best strategy to play the game.
- Dijkstra’s shortest path algorithm.
- Breaking the Substitution cipher using frequency analysis.
- De Bruijn Graphs and Genome Assembly.
- Shortest path algorithms (A-star and Dijkstra’s).
- Optimality of Change in Currency Systems.
- Friendship paradox. Its verification using real social network data.
- Finding the optimal strategy in 5 card draw poker.
- Catalan numbers and Gambler’s ruin problem.
- Finding Euler cyles in Eulerian graphs.
- Implementing Huffman coding.
- Graph coloring.
- Dynamic programming.
- Prime numbers generation.
- Random word generation with Markov chains.
- Bioinformatics: Sequence alignment algorithm.
- Solving the Graceful Tree conjecture with SMT solvers.