Project 1 (Zip) Design Document
Part 1: ZIP Files
-
Briefly describe the data structures you used, if any, to manage the ZIP file format structures.
TODO: Answer this question
-
What approach to reading and writing files from disk did you take? Why did you choose this approach?
TODO: Answer this question
-
How does your unzip program find the start of the file data?
TODO: Answer this question
-
Does your solution have any error handling capabilities? What happens when a user provides an invalid or non-existant file? What happens if a file read or write fails?
TODO: Answer this question
Part 2: Inflating DEFLATE Streams
- How does your program handle reading sequences of bits from the DEFLATE stream (keeping in mind that they may not be byte-aligned)? Give an overview of any data structures or abstractions you used, and why.
TODO: Answer this question
-
How does your program decompress DEFLATE streams (that may include both fixed and dynamic blocks)? Provide a brief overview of the program-flow involved in the decompression. Include the names of important functions and explain their purpose.
TODO: Answer this question
-
How did you compute and store dynamic Huffman codes? What data structures did you use and what is the time complexity of matching a single symbol in your implementation? (Matching a symbol is the operation of reading some bits from the stream until a valid code is encountered and then decoding which symbol the code represents.) Why did you choose to store them in this way?
TODO: Answer this question
-
How did you implement repeating already-decompressed bytes when you encountered an LZ77 length-distance pair? Could you have implemented it more efficiently or elegantly?
TODO: Answer this question
Part 3: Compressing files with DEFLATE
-
How did you implement an efficient search for possible repetitions when implementing LZ77 compression? Why did you implement it this way? Could your implementation be more efficient or elegant?
TODO: Answer this question
-
How did you implement converting the literal / LZ77 symbols into their Huffman code equivalents? Why did you implement it this way? Could your implementation be more efficient or elegant?
TODO: Answer this question
Part 4: Combining all the pieces
- When it came time to put all the parts of the assignment together, were
there any major architectural issues that needed to be resolved before
everything would work together? Did you need to rework portions of the
previous parts? If so, what could have been done differently to avoid this
in the future?
TODO: Answer this question
Logistics
-
How much time did each partner spend on the project (in hours)?
TODO: Answer this question
-
Did both partners do an equal amount of work? If not, why not? If so, what did each person do? What happened?
TODO: Answer this question
Project Enjoyment
-
What was your favorite part of the project? What was your least favorite part of the project? How would you fix your least favorite part of the project so it is better?
TODO: Answer this question
-
Did you enjoy the project? Why or why not?
TODO: Answer this question
Above and Beyond
- Did you do any Above and Beyond? Describe exactly what you
implemented.
TODO: Answer this question