[an error occurred while processing this directive]
[PDF version for printing]
Problem Set 8
Crossing Abstractions
Out: 24 April
Due: Monday, 1 May (or later, see below for details)

Due Date

After we grade Exam 2, you will receive an email assessing your current performance in the class. It will include a recommendation for what you should do for Problem Set 8 and (possibly) the Final Exam. The recommendation might be one of these:

Collaboration Policy - Read Very Carefully

If you receive the excellent or good performance assessment, you may work alone or with one, two, or three other people of your choice on PS8. If you receive the unconvincing performance assessment, you should work alone on PS8.

You may consult any outside resources including books, papers, web sites and people you wish. You are also encouraged to discuss these problems with students in the class. You must acknowledge any people and outside resources you work with on your assignment. If you discuss the assignment with people other than your partner, you may not take any written materials out of your discussion. It is fine to bounce ideas off other people, but the answers you turn in must be your own.

You are strongly encouraged to take advantage of the staffed lab hours posted on the CS216 web site.



For this problem set, your goal is to create (or modify) a program that satisfies these goals:
  1. It involves at least 2 program representation levels (most likely from Python, C, JVML, x86 Assembly) for sensible reasons
  2. It involves at least 1 interesting algorithm and data structure
  3. It is useful
  4. It is creative
  5. It is finished by the due date
To receive a green star on this assignment you must accomplish at least three of the goals. Acheiving four of the goals is worth a gold star. Acheiving all five may be worth a double gold star, especially if you find a good reason to incorporate the lowest representation levels (either JVML or x86 Assembly).

To satisfy the first goal, you should find a way to combine multiple programming levels to accomplish something that could not be easily accomplished using a single level alone. Some possibilities include:

To satisfy the second goal, your program should involve an interesting algorithm and data structure. Ideally, it would be something you invent to solve a unique problem, but more likely it will involve implementing an established data structure and algorithm. To satisfy goal #2, your report should include an analysis of the asymptotic running time and memory use of the relevant part of your program.

To satisfy the third and fourth goals you will need to do something that actually has value (at least to yourselves, but ideally to many potential users) and that has not already been done by other people. If you are at a loss for ideas, you can satisfy goal 3 (but not goal 4) by improving the performance or functionality of SpamBayes, a spam filter implemented in Python.

To satisfy the fifth goal, you need to turn in a report and email a zip file containing a working implementation of your program by the due date. If you do not satisfy the fifth goal (finished), you should still turn in something by the due date. If you do not have a complete implementation, you should turn in a partil implementation, design description, and explanation of what is left to do.

If you are unsure if your idea for this problem set is acceptable, send me email describing it before Thursday, April 27. (You can, of course, ask questions or refine your idea after that, but it may be too late to get general feedback on your idea after Thursday.)


On or before the due date (see above), you should turn in a paper report (either in class, or at my office, Olsson 236A). The report should contain these sections:
  1. Description (no more than 1 page) — describe the program you created or the modifications you did to an existing program. If you aim to satisfy goal 3, you should also explain why it is useful and interesting. If you aim to satisfy goal 4, you should explain why it is original and how it differs from previous work on the same goal or why your goal is new and unique.
  2. Programming Tools (no more than 1 page) — Identify the programming tools you used (or would plan to use to complete the program). Explain why you choose the tools you did. Discuss the advantages and disadvantages for the choices you made and consider alternatives.
  3. Data Representation and Algorithm Analysis — If you aim to satisfy the second goal, describe the data representation and/or algorithmic problem you had to solve and describe your solution. Include an analysis of the asymptotic running time and memory use of your solution.
  4. Status — Describe how much of your program is complete, and what is left to do.
In addition to submitting the report on paper, send a zip file of all your code and a README file explaining clearly how to run it, to cs216-staff@cs.virginia.edu. If you have test cases (you probably should!), include them in your zip file also. If your program is deployed as a web application, send the URL for the application in your email.


Have Fun! — If you can't think of any program that it would be fun to work on, you might want to consider if computing is the right field for you.

Be Creative! — You can do anything you want so long as it is not distructive or unethical.

Be Realistic! — You only have 1 or 2 weeks for this. Try to think of something that you can make a good start on in a limited amount of time, but could continue to improve and expand later.

Try and pick something to work on that you find interesting and important enough that you will want to keep working on it over the summer, and that will have an impact if you are successful.

CS216: Program and Data Representation
University of Virginia
David Evans
Using these Materials