Focusing on data Structures and algorithms

In this assignment I implemented a 2-D tree. The keys of this tree were 2-dimensional points in the nodes structured in an alternating sequence starting with the x values. The 2-D tree is able to support efficient range search, nearest neighbor, and k-nearest neighbor search.

In this project, I created a set of programs to solve the 8-Puzzle problem. The 8-Puzzle problem is a puzzle played on 3x3 grid with 8 blocks numbered one through 8, and one blank square. When this program was completed, it was able to discover a series a steps that would allow for putting the blocks in order. The program is also able to tell apart solvable and unsolvable board.

The purpose of this project was to reaffirm the atomic nature of matter by tracking the motion of particles undergoing Brownian motion, fit the data to Einstein’s model, and estimate Avogadro’s number. I was provided with image data of polystyrene spheres (“beads”) suspended in water, undergoing Brownian motion. I then created a computer program that analyzed this data by first finding the beads, then figure out how much each bead moved from one frame to the other, and then using this data to fit it into Einstein's modal and estimating Avogadro's number.

In this project I created a computer program that computed the optimal sequence alignment of two DNA strings. To do this, I had to measure the similarity between two genetic sequences by their edit distance. This project focused on dynamic programming to reduce the number of computations necessary. After the edit distance program was created and tested, I then created a program to produce the optimal alignment.

The goal of this project was to create a statistical model from English text, and use the model to generate stylized pseudo-random text and decode noisy messages. This model was built using a dictionary that contained kgrams as keys, and a dictionary with the succeeding letter after the kgram, and how many times it occured. A kgram is group of characters of a certain size. By using the frequency of the number of times the kgram appeared in the text, and the number of times a certain character succeeded it, the probability of the next character being that character can be calculated. This data was then used to decode noisy("~") text by replacing the tilde with the most likely character.

The goal of this project was to implement two methods to find good solutions to the traveling salesperson problem. The goal of the traveling salesperson is to visit all locations (points) provided, while keeping the total distance traveled at a minimal. However, the methods used in this project does not guarantee the minimum distance traveled. One method was the nearest neighbor approach. This involved creating a tour, which is a series of points that have been visited. The next step is to read a point and add the closest point to it to the tour and so on. The other approach was the smallest increase approach. In this approach a point is read and added after a point in the tour where it results in the smallest possible tour length.

This was an extra credit assignment for my Linear Algebra course. It involved using rotational matrices to produce rotation of images. I then created an animation and speed feature for continuous rotation at different rates. The code can be found on my github.