Your report should be about 10-20 pages long. However, depending on your topic and writing style your paper could be longer or shorter. I will check the quality of the contents and not the length of the report. I mention the 10-20 page size range, just to give you an idea of what is the average size of reports that students have written in the past.

Read the papers related to your topic and pay attention to the way in which they are organized. Your report should be organized in a similar way. Here are some suggestions about how you should structure your manuscript.

1. Title and author

Choose a title that describes, both, the topic that you have chosen and the content of your report.

2. Abstract

The abstract is a very concise description of the contents of the paper. Here you say what your paper is about, but do not give any details (details belong in the body of the paper). The abstract should be one or two paragraphs long.

3. Introduction

Organize the introduction as follows.

1. First describe the problem(s) that you have studied.

2. Say why you think that the problem(s) is (are) important/interesting/worth knowing about. Mention possible applications for the problem(s).

3. Describe research that has been done about the problem(s) that you are studying. Give a brief description of the papers that you have read. You can also mention works that are referenced in those papers. Do not give here many details. For every work that you describe you must give the appropriate reference. Try to mention as many relevant works as you can.

4. If there is a problem x that is related to the one(s) that you are studying, mention that here along with a description of the relationship and a few references about work done on problem x.

5. List the contributions of your paper. Say something like: "We review the algorithms x, y, and z and make a comparison of their time/space complexities/conceptual complexities. Our findings indicate that algorithm x is better than algorithm y in the following cases ...".
6. End the introduction with a description of the remaining sections of the paper.

4. Body of the paper

Here is where you give all the details of your work. Write as many sections as you need to describe all your work. I suggest that you devote one section to each algorithm that you describe. Of course, you might decide that it makes more sense to describe several algorithms within the same section.

For each algorithm that you describe, first give a high-level description of it. Explain some of the intuition that justifies why the algorithm works. Do not just copy the description of the algorithm. I need you to show me that you understand the ideas behind the algorithm. Then, if appropriate, give a more detailed description of the algorithm in pseudocode. Use the same kind of pseudocode that we used in class.

Show that the algorithm is correct. If the proof is too long or too complicated, you do not have to explain it all. An insightful sketch of the proof is more valuable than a long tedious formal proof.

If relevant, perform an analysis of the performance of the algorithm. Once more, if the analysis is too long or too complicated you might simplify it without providing all the details.

Mention the modifications/improvements/simplifications that you think can be made to the algorithms that you have studied. Mention new applications for the algorithms. Mention new applications for the problems studied, and for related problems. Mention the drawbacks and strong points of the works that you have studied. Highlight your original contributions, since this is what I am particularly interested in reading.

For a report describing an implementation you must give details about the algorithms implemented, and details about the implementation itself. Mention interesting challenges that you have found while doing the implementation. Describe any data structures that you had to implement. Give an overall description of the architecture of your system, and explain how all parts interact.

If appropriate put in an appendix a manual describing how to compile, run, and use your system.

If you are making an experimental comparison of the performance of several algorithms, include a table with all your results. Give details as to how the test cases were chosen and how the performance of each algorithm was measured.

5. Conclusions

Give a summary of your findings. Mention here anything interesting that you have discovered/observed/learned. Briefly review the algorithms that you have studied, and briefly mention how they can be improved/how they can be specialized to situations not mentioned in the literature. Mention new applications for the algorithms or problems that you studied.

6. References

Include all the references that are mentioned in your report.