In this project, you will select a problem and a solution algorithm to contribute to the online, interactive, knowledge base of canonical CS problems, Redux.
This will be a group project on which you will all work in teams of 2-3 students. As a team you will hand in one report and also do one group presentation on the last day of class. Your team will all receive the same base grade for the project. To augment this, each team member will e-mail me a thoughtful and honest evaluation of the contributions of their team members, including themselves. For each individual, this evaluation should include a score from 1 to 10 indicating your evaluation of their work (10 meaning they were a valuable member of the team that made significant contributions to the project and were good to work with, 1 meaning they contributed nothing and were difficult to work with). If you would like, you may also include any clarifying comments, etc. (especially for low scores). If a person receives consistently low evaluations from peers, then their score will be proportionally decreased.
Information is available on the Redux site for how to get started and how to contribute to the project. In short, you will fork any repos that you plan on contributing to (likely only the backend repo) and clone any repos you don't need to change (likely only the frontend repo). Then you can run a local version of Redux that will reflect your changes and allow you to develop and debug. When your contributions are ready, you will submit them as a pull request to the appropriate repository.
You should choose a problem requiring an algorithmic solution. This may or may not be a problem currently implemented in Redux. It may be a problem we considered this semester or another problem of your choosing. When choosing, take note of which complexity class the problem is from (P, NP-complete, NP-hard) as it will affect how you approach your implementation. You must get your problem and solution algorithm approved by me. First come, first serve. Groups may choose to add a new solution algorithm to a problem that is already in Redux, and/or multiple groups may choose add a common problem and then add different solution algorithms. The goal is to add something of value to Redux.
redux-test for your solver (and, if necessary, the problem and/or verifier) to demonstrate correctness. Make sure unit tests cover edge cases. Run tests with: dotnet test.While contributing your work to Redux has some potential benefits to you (e.g., showing prospective employers examples of your work on a real-world, full-stack development project), there may be some who do not want their work to be made public. As a general rule, FERPA prohibits requiring students to post work in a public space without providing a private alternative or a signed waiver. I want to respect this right, and you will not be penalized if you do not want to contribute your work to Redux. If you do not want your work included in Redux, you need to take the following steps:
A verifier takes in a proposed solution and verifies that it, in fact, solves the problem instance. For P-time problems, this can be implemented simply as a call to your solver and then a check to see if the proposed solution and the solver's solution are equivalent (be sure to account for problems having multiple correct solutions , e.g., Shortest Path). For NP-complete problems, a polynomial-time verifier may not use a solution algorithm because polynomial-time solutions do not exist (but typically have very simple implementations all the same).
No report will be required for this project. Your grade will be determined from the pull request submitted based on the following criteria:
Each group will give a short oral presentation of their project on the last day of class (5 minutes). The presentation should introduce the problem you chose and the algorithm you chose to solve the problem. Explain why you chose the problem/algorithm (while giving appropriate attribution, any challenges/detours along the way, and the pros and cons of your approach) Your presentation should primarily consist of a live demo of your contribution in Redux (a locally running instance is fine). Be sure to point out and explain all information in each dialog box. The presentation should be professional, and will need to be practiced to make sure it fits the time constraint.