Background

This project gives you a chance to deeply explore a topic in data structures and algorithms. It will consist of four parts:

  1. (10 points) Meet With Me to Discuss a Plan
  2. (30 points) Reproduce Something That Has Already Been Done
  3. (30 points) Expand on Your Work With Your Own Ideas
  4. (30 points) Analyze Your Work

Meet With Me to Discuss a Plan

Schedule a 10 - 15 minute meeting with me with the goal of finalizing the details for your project. The meeting can be virtual or in-person. We will talk about what your project will entail, the estimated time it will take to complete, and what you will have to submit for each part.

You should prepare for the meeting by doing the following:

  1. Select a potential topic that you want to complete. It is ok to come to the meeting with two ideas in mind, and we can narrow it down to one.
  2. Find an online tutorial that you will follow to reproduce something that has already been done. It is ok to have a few resources in mind, and we can narrow them down.
  3. Come up with one or two ideas on how you want to expand on your topic. See the “Expand on Your Work With Your Own Ideas” section for details. We will narrow them down to one, together.
  4. Reflect on the analysis of your code.
    • How will you determine if you succeeded?
    • What resources might be useful in your analysis?
    • What calculations might you want to do to support your claims?

Once I approve your idea, you are free to start work in earnest!

Reproduce Something That Has Already Been Done

Your goal in this section is to learn about your topic and reproduce the work of someone else. This might take the form of implementing some code by following an online tutorial, watching a lecture and reimplementing their project, or cloning a repository built by someone else and doing a thorough analysis of its contents.

When you finish this section, you should feel confident in your ability to describe the topic and the inner workings of the code that you wrote. This is the platform upon which you will implement your own ideas!

Expand on Your Work With Your Own Ideas

Once you have reproduced the work of an expert, I want you to take it a step further and build onto it with your own ideas. You are in control here! What interests you about this topic? What might you like to accomplish?

Some ideas might be:

If you chose this topic…You might consider doing this…
Build the bucket tool from MS PaintFind a square coloring grid online and use your tool to color the picture
Implement a First Generation Spell CheckerTake a paper that you wrote for an English class and test your spell checker on it
Build your own neural networkUse a dataset from Kaggle to teach your network to do a simple task
Simulate billions of interacting particles in a galaxyCreate a small-scale simulation of a galaxy of your choice

You are allowed to select an idea that might not succeed. To be perfectly clear:

You can get FULL CREDIT for this part, even if you select a topic that has a real chance of failure! During our initial meeting, we will discuss what specific things need to be accomplished, even if your idea does not work out!

You are scientists and explorers. Failure is part of the job! We must be willing to fail in order to discover cool new things 😀

Analysis of Your Work

Now that you have implemented your code, it is time to analyze your work.

  1. If I tried to implement a solution using “brute force”, would it work effectively? Why or why not?
  2. Did your solution work effectively to solve your problem? Why or why not?
  3. What are some of the issues with your solution?
  4. What are some of the edge cases with your solution?
  5. How might you improve your idea in the future?

Support your answers to the questions above by using what we learned over the semester.