This is a collection of my Computer Science coursework from classes that I have completed so far at IU. For each course, I've listed a brief summary of the topics we discussed in the course, as well as links to some of the major projects and assignments for each course.
All data structures assignments were completed in Java. This was by far the most important course I took at IU. I learned a lot about various topics and fundamental Computer Science data structures. Some of the important things we covered in my class were:
- Runtime Analysis (Big-O)
- Balanced Binary Search Trees
- Hash Tables, Heaps, Priority Queues
- Graphs and Search Algorithms (BFS, DFS, Dijkstra)
- Sorting (Quicksort, Mergesort, Heapsort)
- Dynamic Programming
Here are the projects and assignments most relevant to my coursework:
- Flood It!
- Implementing a Hash Table
- Implementing Heaps
- Routing Wires on a Chip (Graph Algorithms)
- DNA Sequence Alignment (Dynamic Programming)
- SeamCarving (More Dynamic Programming!)
This course allowed students to use any programming language they were comfortable with, so I used Python. We explored several interesting areas of Bioinformatics including DNA sequence alignment, cyclopeptide sequencing, and evolutionary tree construction from genomes.
While the biological topics were interesting, the computer science topics taught in the course focused on dynamic programming and graph algorithms. These are of particular interest to biologists due to the large search space when dealing with genomes that contain billions of nucleotides.
Most of the code I've written for this course is based off of homework problems from a bioinformatics website called Rosalind. Here are the solutions to some of those problems:
- Finding the Longest Common Sequence
- Constructing a DeBruijn Graph
- [Median String Problem](bioinformatics/rosalind-problems/Median String/src/Twelve.java)
This course was taught using the C programming language exclusively. The purpose of the course was to expose students to very difficult programming challenges in preparation for the International Collegiate Programming Contest. Many of the students (myself included) had never programmed in C previously, so this added an additional level of difficulty for those of us unfamiliar with pointers, structures, or working without our cozy, built-in list data structures.
All of the problems were worked on came from the UVa Online Judge. Some of the problems I successfully completed are given below:
All software systems assignments were completed in Java. This was the first course in imperative programming and its purpose is to introduce students to Object Oriented Programming with Java. We spent most of the course learning about how to create effective class hierarchies to organize components of a larger software system. Additionally, we spent a lot of time working on graphical user interfaces in Swing.