I. Introduction
Over this past quarter, we've studied many different data structures together as a class. For this assignment, you will have the ability to choose, research, and implement a data structure of your choice. Although we will be providing several "suggested" assignments, which are listed at the bottom of this document, the final decision is up to you. For grading, you will (among other things) demo your project to us in Sieg.
For this project, we recommend developing using C/C++/Java, and working on the Linux machines simply because we know you are all capable of using both. However, you are free to develop your project using any language you wish on any platform you wish as long as you can demo the program (during the demos, you'll have access to the Unix servers and a Windows 2000 machine). Also, all of your team members should be able to answer questions about the code and project; so, make sure they're up to speed on the platform and language.
II. Learning Objectives
For this assignment, you will:
III. Teams
In keeping with the spirit of freedom for this assignment, you may work on a team of arbitrary size for this project. If you are looking for a team (or for more team members), please feel free to use the cse326@cs mailing list. You must have your group and project selected by lecture on Friday afternoon. More information about team selection will be provided later in this document.
You may choose how to divide the work, under three conditions: first, document each team member's effort in the README file; second, work together and make sure everybody understands your answers to the README questions below; and third, understand (at least) at a high level how your team members' code is structured and how it works.
Remember to test your team's code as a whole to make sure that your portions work together properly! Also, be aware that except in extreme cases when you notify us in advance of the deadline, all team members will receive the same grade for the project.
Lastly, keep in mind that larger groups will be expected to do more work than groups of one or two people, so please choose your project (and its difficulty) appropriately.
IV. What We've Provided
We are providing only references for this assignment. However, we encourage you to help each other. Please make sure your team's code is its own, but feel free to share references, ideas, pseudo-code, or even small code snippets among teams. This project is not curved; so, helping other teams cannot hurt your team and may well help it.
I want to see plenty of project #4 traffic on the cse326@cs discussion list or in office hours. I get so lonely in this little office. ;)
By the way, feel free to use data structures from libraries such as the Standard Template Library or the Java Foundation Classes. You may also use resources such as any other book, code base, paper, or buffalo that you may find. The main part, or "meat", of your project, however, should be your own work. Moreover, you are responsible for understanding all the code you use.
Lastly, we will be providing share project space (on Unix) for each group. You may use this space for sharing files, although we would highly recommend the use of a source control system such as CVS, which is available in Unix and Windows flavours.
V. The Project Proposal
So that we know what kind of resources to provide, and to ensure that the project you have selected is of manageable size, we are requiring each group to submit a one- to two-paragraph project proposal via email to Brian, Hannah, and Albert by 5 PM on Friday, August 9. This proposal should include the following information:
We will review your proposals and attempt to return our comments by that night, although it we may need the entire weekend to return your proposal back to you.
VI. Submitting Your Work
You are expected to turn in all your code (use the turnin utility to submit your project. This project is called "project4" in the turnin system). You will also need to include a README which contains the following information:
We are aware that this code may not compile on the Linux instructional machines, but we want to see it nonetheless. Also, please note that the README and other documentation is even more important on this project than it usually is! Construct a complete and clear README. Moreover, don't feel limited by what we list here. Make your documentation complete, even (especially) if it means going beyond what we mention here.
This is not something to leave to the last minute. It would even be reasonable to have one team member responsible for just documentation (and it will not be an easy task)!
Finally, you may, if you like, construct a Web site to document your project and have your README file contain just the first two items listed below (names, option) plus the URL of that page.
VII. Project Demos
Every group will be required to demonstrate their project to the 326 staff in a 30 minute demo session. As many of your group members as possible should attend this session. Those who do not attend should be aware that their grade will largely depend on the demo nonetheless. You are required to submit your available times by Friday, August 16th!.
The demo session will involve a discussion of the project and code including some question and answer, a demonstration of your program (possibly on inputs provided by us), and consumption of tasty items (provided by the staff). We reserve the right to add more serious or silly content to these demos without notice. Be prepared!
The fundamental principles we grade you on will be: what have you accomplished (how much and how well?), what have you learned, and how well do you understand your creation?
VII. Project Timeline
To summarize the dates mentioned in this document:
Thursday, Aug 8 | Project 4 specification released |
Friday, Aug 8 (5 PM) | Project proposals due via email |
Friday, Aug 8 (midnight) | Most project proposals returned |
Friday, Aug 16 | Last day to sign up for project demos |
Wednesday, Aug 21 (10 PM) | Project 4 due |
Thursday, Aug 22 - Friday, Aug 23 | Project demos |
VIII. Going Above and Beyond
Extra credit on this assignment will be difficult and will be based on exceeding our expectations. Where possible, we have defined what this means. However, a project that doesn't work or is fragile or ill-written will not exceed our expectations no matter what amazing things it sometimes does or was designed to do!!! I cannot stress robustness enough! Do not even think about pondering exceeding expectations until you are confident you have met them! I still haven't stressed this enough! Do I need to resort to a blink tag or a marquee tag just to stress ? Would I so hideously pervert HTML for a lesser cause? MAKE YOUR PROGRAM ROBUST!! Just do it!
IX. At Last! The Project Options