# Senior Year

# CL Computer Science: Algorithms and Structures

Studied topics such as Computer Vision, Algorithms, Graph Theory and Artificial Intelligence.

Worked on a combination of structured lessons and independent projects connecting to fields outside of the strict confines of computer science.

## Linked Lists

My first Python project involved designing my own Linked List class that uses a linked list as the backing data structure instead of the array-based 'lists' used in Python. This project taught me how to create and test the various functions and methods required for data manipulation. This project also involved analysis of the Big-O of the methods we wrote.

## Priority Queues

This project focused on creating Priority Queues in Python. In this project, I learned about priority queues and how to implement them using binary trees. Specifically, I worked on implementing the isAHeap(), heapifyUp(), and heapifyDown() methods in Python to ensure that the priority queue data structure is correctly ordered and maintains the heap property. I also learned about dynamic types and variable types in Python, as well as how to use unit testing to ensure that my code is working correctly.

## Huffman Encoding/Decoding

In this project on Huffman encoding, I learned how to use trees and priority queues to efficiently encode and decode messages. I worked with the TreeNode class and created two subclasses of it: LeafNode and JointNode. I also used dictionaries to build a frequency dictionary and sorted the values into a min-heap priority queue of TreeNodes. Finally, I used the priority queue to generate a Huffman Encoding tree for a given string, and used that tree to encode and decode messages.

## Word Pathways

In this project, I learned how to create a graph to find a path from one word to another of the same length, via single letter changes. I used breadth-first search on the graph to find the path. I also had to make a design decision about whether to store numbers or words in the graph, and whether to make edges bidirectional or unidirectional. Additionally, I wrote tests for three methods: num_mismatched_letters(), build_edges(), and get_neighbors().

## Transit Times

In this project, I was tasked with finding the fastest route from one city to another, based on the transit times between the cities. The vertices represent the cities, and the edges represent the transit routes between them. I learned how to represent a graph as a set of vertices and edges, and how to load this data from a file or other data source. I learned how to implement Uniform Cost Search to find the shortest path between two vertices in a graph, and I also learned how to visualize the search progress and the resulting path using OpenCV. I practiced working with various data structures such as lists, dictionaries, and tuples to store and manipulate data.

Shortest Time from LA -> NYC

Shortest Distance from LA -> NYC

Least Turns from LA -> NYC

## Matrices

This project was focused on implementing basic matrix operations using Python. I wrote methods to perform various matrix operations on nested lists of numbers.