Overview of Requirements
- Sign up for both a topic and partner on the Piazza post titled:
Final Project sign-up form
- A one-paragraph abstract emailed to me by Friday, April 3, at 4pm.
- A 1-2 page initial report and proposed action plan
emailed to me by Friday April 10, at 4pm.
- A brief status update checkpoint emailed to me on Friday April 17.
- A second status update checkpoint emailed to me on Friday April 24.
- A (maximum) 10 page paper discussing your algorithm due
on Friday May 1.
- (Optional) A 20-30 minute presentation presenting
your algorithm, to be given in lab/lecture the last week of
class.
- (Optional) well-documented code implementing the algorithm
or data structure you've chosen, due on Friday May 1.
Do
not blow off the initial report or checkpoints. The action
plan should describe what tasks you plan on accomplishing in the
remaining three weeks. Each checkpoint should describe how tasks from
the action plan have been accomplished, or what issues have arisen
that prevented intermediate tasks from being completed on time.
This final project should be done with one partner*, but you don't have
to work with your usual partner. In fact, I recommend looking at
possible topics on your own and then finding a student with similar
interests. You are welcome and encouraged to discuss ideas with
anyone in the class (not just your lab or final project partner).
*Working in a group of three is OK as long as the overall work is
roughly 50% more. Mention that you have a group of three in your
project proposal, and in your action plan describe the additional
goals you plan to achieve with the extra person in your group.
*Working alone is allowed but not encouraged. There is no workload
discount for working alone -- your project will be judged as if it was
a partnered project.
Frequently Asked Questions
- Can I choose a topic I'm learning about in
AI/Databases/etc?? Yes, you can choose a topic related to another
course you're taking and/or some research you're currently interested
in. However you cannot just submit the same work for both
courses. In your one-two page writeup, specify what you're
doing particularly for this final project. Also specify how
this final project relates to/builds off/augments the work you're
doing for the other course.
- What formatting should I use? As mentioned below, your
document should not exceed 10 pages using 1.5 spacing, 11 point font,
and 1 inch margins. If you use the LaTeX article document class, you
should get reasonable default settings. Feel free to use
single-column or double-column format. A good default setting is:
\documentclass[11pt]{article}<\center>
- ...more questions to come...
Introduction
Throughout the course, we we have seen several algorithms and
structures for organizing and manipulating data and performing
computational tasks. With each, you have built the foundations of
your computational knowledge base that will aid you as you continue to
mature as scientists.
The constraints of a 14-week course limited the number of algorithms
topics we considered, as well as the variations and nuances of some
that we did cover.
The central goal of this course, however, was not to memorize every
algorithm technique and problem ever considered. Rather, it was to
develop the skills of design and analysis that are a prerequisite to
becoming a competent computer scientist.
For your final project, you will demonstrate these newly acquired
skills by exploring algorithms and data structures at a deeper level
than what we've been able to cover in class. You will write a
medium-length paper which will discuss your chosen topic. Your report
should introduce the topic, provide a motivating example, compare and
contrast to a related course data structure, and analyze a few
important operations. You will demonstrate not only your conceptual
understanding of the topic(s), but also your ability to analyze
algorithmic efficiency.
You will be evaluated on your written communication skills, as well as
your oral communication if you propose to give a presentation, so be
sure to understand the motivation of your topic.
Project Format and Deliverables
The default end deliverable
for your final project is an 8-10 page paper. However, to encourage
creativity and enable a wider variety of projects, I am flexible as to
what the main output will be. Some alternate examples include:
- In addition to a shorter (4-5) page paper, a set of code
implementing a data structure or algorithm. This code should be
well-documented of course. For data structures (say for a balanced
binary search tree like red-black trees) you should provide benchmarks
comparing your code to existing implementations.
- In addition to a shorter (6-8) page paper, make a final
presentation (see below for presentation tips and logistics)
Original research will carry some weight but less than you'd get
from a directed reading or summer research project.
Every project should include a final writeup of some length, and the
intermediary requirements described above.
Choosing a Topic
The choice of topic (algorithm, data structure, problem, ...) to
consider is largely open-ended. However, you must send a short
abstract (one paragraph) explaining your plan by Friday April 3.
This should include the topic you plan to cover, what you aim to
discuss in your paper, and what else you plan on producing (say C++
code if you plan on implementing an algorithm or data structure).
You can use either book (Kleinberg/Tardos or CLRS) to find example
algorithmic topics we did not cover, or explore resources online.
While Wikipedia is not a primary source, it is a reliable repository
of algorithms, data structures, and complexity classes that can be
easily explored and there are usually good examples.
Other resources include:
Some example algorithm topics include:
- Stable Matching, including polarization of interest, stable roomates
- The Travelling Salesman Problem
- Matrix Multiplication algorithms
- Factoring and/or Primality Testing algorithms
- SAT, both attempts to solve SAT in e.g. polynomial-time, and real-world heuristics
- linear programming
- The Planar Seperator Theorem and resulting Divide and Conquer algorithms
- Graph Sparsification
- Randomized and/or Approximation algorithms
- Algorithms for social networks
- Network Flow algorithms
- Error-correcting codes
- Communication Complexity
- Streaming Algorithms
- Property Testing
- Online Algorithms (such as the Hiking Problem)
- Parallel Algorithms
- Algorithms for Machine Learning
- Algorithms for Computational Biology
- Alternate models of computation, including the I/O model or external memory model.
Some Complexity-related topics include:
- P vs NP
- The PCP Theorem
- Pseudo-random generators
- L vs NL
- Hardness of Approximation
- Fixed-parameter tractability
- (unconditional) Lower Bounds
Some example data structures include:
- Skip Lists
- Tries/Prefix trees
- Bloom filters
- Ternary Search Trees
- Red-black tree
- Splay tree
- (2,3) Trees
- Treap (a combined heap/binary search tree)
- B+ Tree
- Fibonacci heap
- Probablistic graphs
Writeup Requirements
Your writeup should be well-structured and follow scientific writing principles. You
can structure as you see fit, but at a minimum, your paper should include:
- An introduction - this can include a history and a preview
of the central features of the algorithm/data structure
- Motivation - what is the problem that needs to be solved?
It is recommended that you come up with real-world application and
describe it here.
- Background/related work - what does this relate to from class?
What are the conceptual differences? Are there other algorithms/data structures
that generally compete with your choice?
- Interface - If you are considering a data structure, what
are the major operations? This may not apply for an algorithm, but
you discuss assumptions for the structure of the data.
- Illustration - walk through an example run of your
algorithm or data structure. (This might not apply for some
complexity-related topics) You should have some sort of diagram that illustrates
how the algorithm/data structure works.
- Analysis - If you are investigating an algorithm, provide
pseudocode. For a data structure, provide pseudocode for a few key
operations and analyze their run time. This does not need to be
exhaustive, and e.g. how many operations you cover depends on the
complexity of the problem. For example, inserting/removing from
linked lists was fairly simple so it would be good to cover most of
the methods. Removing/inserting into an AVL tree is quite complex, so
be sure to limit your discussion to one or two key operations. You
should then summarize the other operations.
Your paper should be typed in LaTeX; no hand-written writeups will be
accepted. The exception is with illustrations, which can
be neatly drawn and attached to your writeup. I would prefer
you scan and attach the images to your PDF document, if possible. If
you are interested, feel free to email me any LaTeX questions.
In terms of the length of your writeup, it is really up to you to
judge how much material adequately describes your data
structure/algorithm. Your writeup, excluding figures,
should not exceed 10 pages using 1.5 spacing, 11 point font, and 1
inch margins.
Presentation
A presentation is not required but could be a nice component for a
final project. If you choose to do a presentation, it should run
20-30 minutes and will be given in lecture or lab during the final
week.
Depending on how many groups want to do presentations, all other
students will evaluate your presentation on the following criteria:
- Rate the introduction/motivation for the material
- How effective was the presenters sample illustration in conveying the
high-level features of the data structure/algorithm?
- Overall, how effective was the presentation in explaining the data structure
or algorithm?
- Briefly, describe the strongest part of the discussion
- Briefly, list one thing the presenter could improve upon to help you understand
the topic better
Both partners are expected to contribute equally to the presentation and
lab writeup
Presentation Logistics and Tips
- You should use powerpoint/slides for your presentation. Also,
be prepared to show up a few minutes early to set up your
laptop.
- Some students in the past have provided a worksheet to help in their
presentation, or to supplement their presentation with more details that had
tobe omitted due to time.
- Be sure to practice! 20 minutes goes by much faster than you'll expect.
- Do not try to cover every aspect of your topic. Specifically,
the presentation does not need to cover all the aspects of
your paper. People usually overestimate how much can be fit
into a 20 talk.
- Moreover, a good strategy is to concentrate on one sub-problem and give
a high-level intuition of other topics.
- Be sure to think of a good example/illustration - this is the
best way to help your peers understand the algorithm or data structure in a short
amount of time.