Opened 4 years ago
Closed 4 years ago
#954 closed ожидаются исправления (задача сдана)
HW #3
Reported by: | Vladislav Nosivskoy | Owned by: | Vladislav Nosivskoy |
---|---|---|---|
Component: | HW #3 (Huffman) | Version: | 1.0 |
Keywords: | Cc: |
Description
Attachments (1)
Change History (4)
Changed 4 years ago by
Attachment: | compress.err added |
---|
comment:2 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to Vladislav Nosivskoy |
---|---|
Type: | ожидается проверка → ожидаются исправления |
падение на пустом файле
статистика выводится некорректно:
файл с содержимым: "aaaaaaaaaaaaaaaa" (16 букв a
). Сжатый файл: 11 байт.
Вывод статистика: 16 + 9 байт.
Файл с каждый байтом по одному разу (всего 256 байт)
Running test normal input/00_to_ff.core Test failed -- invalid compressed size reported: 3332 instead of 1540 Test failed -- expected compressed data to be no longer than source data, got 2048 > 256
Размер сжатых данных (без доп. данных) в принципе не может быть больше, чем размер исходных.
Тесты только end-to-end.
Оба потока нужно открывать в бинарном режиме.
std::cout << "Parse arguments error:\n" << ex.what() << std::endl; return 0;
Как может быть 0, если ошибка?
HuffmanTree() = default; void construct(const std::unordered_map<unsigned char, int32_t>& frequencyTable);
Серьезно? Вы не хотите писать конструктор, но пишете метод construct, который делает то, что должен делать конструктор?
Логику TreeWalker? надо вынести из дерева в отдельный класс, оборачивающий дерево.
Размещайте публичные поля и методы перед приватными. Кишки никому не нужны.
void garbageCollector(HuffmanNode node);
- Обычно методы именуются глаголами.
- Умные указатели?
- Деструктор?
typedef HuffmanNode_* HuffmanNode;
using лучше чем typedef. У using нет проблем с пониманием того, где новое имя, а где старые тип.
Зачем в HuffmanArchiver? поля, если достаточно локальных переменных в методах compress/extract
readData(in); huffmanTree.construct(frequencyTable); countSizeOfData(); writeFrequenctTable(out); in.clear(); in.seekg(0, std::ios::beg);
Сбросьте поток в начало в функции readData (ее бы переименовать в соотсветсвии с тем, что она делает)
Верните построенную таблицу частот через возвращаемое значение явно. Явное всегда лучше неявного.
HuffmanNode firstNode = node->left, secondNode = node->right; if (gen() % 2) { // Theoretically speeds up the search std::swap(firstNode, secondNode); }
??? В среднем, никакого ускорения тут нет, только дополнительные накладные расходы на генератор случайных чисел.
Постройте таблицу кодов, если сильно хочется ускорить. Случайными блужданиями по дереву вы тут ничего не получите.
6 + 3 + 4 + 7
comment:3 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |