/cit-596-plus

A resource for students to accompany CIT-596 (Algorithms & Computation)

Primary LanguageJava

CIT-596 Plus

This is a community-repository created by and for the students of the UPenn MCIT Program. In CIT-596, we cover a number of algorithms; however, most of our assignments are more proof-focused in nature and don't require us to actually implement the algorithm in code.

So this is CIT-596 Plus, where we've prepared a number of leetcode questions that correspond directly to the algorithms we cover in the course, as well as other related questions of increasing difficulty to accompany each topic from each week, in hopes of preparing you for the practical questions that you may encounter in technical intereviews.

We encourage future students of CIT-596 to tackle these bonus problems each week as they're studying the algorithms to give them a chance to practically implement the algorithms in code, and encounter other problems that apply the same principles and algorithms in different ways.

Module Algorithm # Questions
1 Introduction 1
2 Induction & Recursion 1
3 Divide & Conquer Algorithms
4 Randomized Algorithms
6 Graph & Graph Traversals
7 Greedy Algorithms
8 Spanning Trees (Kruskal’s and Prim’s)
8 Shortest Paths (Dijkstra’s)
9 / 10 Dynamic Programming
11 Network Flow
Total 2

How to use this repository

Please fork your own version of this repository.

Each folder has a README file that will provide a recommended order for the different topics. Please follow the recommended order as you tackle each problem as they serve to reinforce your learning.

When you tackle each problem:

  1. Copy and paste the base .java file into the solutions folder and number it; rename the class and update the package declaration
package [Topic].Solutions;
  1. Implement your solution and run the basic tests provided. Go to the corresponding leetcode link and run it through their tests. (We also encourage students to contribute new tests to the base file as they encounter or think about more edge cases!)

  2. Once both sets of tests pass, sign your solution in the solution notes section, and add some comments on your implementation.

  3. Review implementations that other students have done. (Please don't change your solution after this though.)

  4. Make a pull request to the original repository using the 'Solution' tag! (Please try your best to avoid committing configuration files and add to the .gitignore as necessary.)

Further Contributions

We welcome other contributions beyond your solutions.

Perhaps you believe there's a really important problem that students need to have experience with that you believe needs to be added to this repository and prioritized more above other questions. Please make a pull request with the 'New Question' tag.

Perhaps you want to contribute to documentation. We want to build a wiki describing in detail the different patterns that students can use as a resource in the future. (Writing about these topics helps cement your learning as well!). Please make a pull request with the 'Documentation' tag.