Due Friday, May 28 at 11:59 pm Pacific
- Submissions received by due date receive a small on-time bonus.
- All students are granted a pre-approved extension or "grace period" of 48 hours after the due date. Late submissions are accepted during the grace period with no penalty.
- The grace period expires Sun, May 30 at 11:59 pm Pacific, after which we cannot accept further late submissions.
- In this course, we express all date/times in Pacific time GMT -7. Our Paperless submission system also displays/records due dates and submission times in Pacific time.
The summit of Mt. CS106B is now in your sights – many congratulations on the hard work that got you here! The task for Assignment 7 is to write a program that uses the nifty Huffman coding algorithm to compress and decompress files. This program draws upon concepts from across the quarter including use of ADTs, recursive exploration, linked structures, trees, and streaming algorithms and will leverage the powerful skills for effective development, testing, and debugging that you have built up. You'll finish with an impressive piece of software that serves as a great testament to all that you have learned the quarter!
Working in pairs/groups is permitted for this assignment.
- Students will gain practice with constructing, manipulating, and traversing binary trees.
- Students will be able to synthesize a number of different data structures and algorithms to accomplish an important real-world task.
- Students will develop understanding of how compression algorithms take advantage of patterns and trends in data to allow for more space-efficient representation.
This assignment consists of a warmup exercise to get you thinking about the different components of Huffman encoding and a main programming task that asks you to implement the Huffman encoding algorithm.
This component consists of some conceptual exercises on Huffman coding, as well as developing some utility functions that you will later use to test your Huffman program.
You will implement an end-to-end compression-decompression tool that employs Huffman coding to optimally compress data.
As always, we have provided a ZIP of the starter project. Download the zip, extract the files, and double-click the
.pro file to open the project in Qt Creator.
Here are resources that will be helpful for this assignment:
- The YEAH Session is scheduled for Saturday Nov 7th 1:30pm Pacific. Zoom information can be found on the Zoom Information page.
- The CS106B Style Guide
- A Guide to Testing Code in CS106B
- Common Build/Run Errors Guide, put together by one of our wonderful section leaders, Jillian Tang.
- Stanford Libraries Documentation
- Lecture Slides: Friday Trees, Monday Binary Search Trees, Wednesday Huffman Coding
- Section: Trees
- Textbook Chapter 16 Trees
With lots of pointers flying around, drawing diagrams and lots of debugger time are key skills to rely on. As always, we're here to help you if you get stuck. You can reach out with a post on Ed, email your section leader, join in at office hours, or sign up for one-one-one help at the LaIR. For questions specific to your code, coming to Lair is your best bet. If you cannot attend LaIR due to timezone issues, you may post your question on Ed. However, you must use a private post if you are including code so that you are not posting your solutions for the whole class to see.
Before you call it done, run through our submit checklist to be sure all your
t's are crossed and
i's dotted. Then upload your completed files to Paperless for grading.
Please submit only the files you edited; for this assignment, these files will be
secretmessage.txt.huf, an encoded message for your section leader
Note: On Paperless, all due dates and submission times are expressed in Pacific time.