Opened 6 years ago

Closed 6 years ago

#228 closed ожидается проверка (задача сдана)

Домашнее задание 2

Reported by: chernyaev.arsenij Owned by: rutsky,grabovoy.philipp
Priority: проверка Milestone: ha2-deadline
Component: HA#2 huffman Version: 1.0
Keywords: Cc:

Description


Change History (9)

comment:1 Changed 6 years ago by Филипп

Milestone: ha2-milestone2ha2-deadline
Type: ожидается проверкаожидаются исправления

Привет!

Замечания:

  1. Названия директорий: ha1, ha2
  2. Лучше использовать std::string::operator== вместо strcmp
  3. Выводимая при декомпрессе статистика выглядит подозрительно: первое число обычно больше или равно второму, и не совпадает с размером сжатых данных, выводимых при -c: по условию просят выводить это.
  4. #include <map> в huffman.cpp приезжает 2 раза -- как хорошо, что там есть стражи включения/#pragma once :)
  5. В компараторе нод предпочтительно учесть код символа, иначе можно собирать разные деревья: при равных частотах кто будет первым pop'нут?
  6. stream.close(); -- явно это делать нет необходимости, RAII очень удобно помогает :)
  7. Константность аргументов, где возможно: process_node, print_encodings
  8. encoding_table[node->symbol] = std::vector<uint8_t>(current_bit_sequence); -- объект будет скопирован и без явного вызова конструктора (потому что у класса есть copy-конструктор :) )
  9. Для хранения кодов символов лучше использовать std::vector<bool> -- он хорошо соптимизирован.
  10. В дефолтном кострукторе (для huffman в т.ч.) для членов класса "сложных" типов по-умолчанию вызовется их конструктор по-умолчанию. Явно их можно не ресетить, если только нет плана повторно использовать объект еще раз:
    void huffman::decompress(...) {
        ...
        frequencies_map_ = std::map<uint8_t, uint32_t>();
        ...
    }
    

И то, без чего и так работает: можно использовать std::vector, std::unordered_map вместо std::map.

Edit: дублирующий тикет #237 закрою

Last edited 6 years ago by Филипп (previous) (diff)

comment:2 Changed 6 years ago by chernyaev.arsenij

Прошу прощения за долгое молчание. Не уследил, что статус тикета был изменён. Должно ли приходить оповещение об этом на почту?
По 9 пункту, я не использовал вектор bool для того, чтобы использовать конструкции построения сжатого представления в более удобном виде.
В остальном, постарался исправить замечания. Странный аутпут был из-за того, что я выписывал его в битах.

comment:3 Changed 6 years ago by chernyaev.arsenij

Type: ожидаются исправленияожидается проверка

comment:4 Changed 6 years ago by Филипп

Type: ожидается проверкаожидаются исправления

Привет!

  1. Появились утечки памяти - освобождения потерялись при рефактиринге.
  2. priority_queue не дает гарантий на порядок равных элементов: чтобы дерево не получалось разным, нужно от этого защититься. Компаратор крутой и готов процессить ноды с одинаковыми частотами: он разрезолвит порядок по символу. А в "input"-нодах необходимый инвариант выполняется?

Поправить, пожалуйста, по возможности в течение 60 часов.

comment:5 Changed 6 years ago by chernyaev.arsenij

Type: ожидаются исправленияожидается проверка

comment:6 Changed 6 years ago by Филипп

Type: ожидается проверкаожидаются исправления

Привет! Утечки все еще есть. Посмотришь еще раз?

comment:7 Changed 6 years ago by chernyaev.arsenij

Type: ожидаются исправленияожидается проверка

comment:8 Changed 6 years ago by chernyaev.arsenij

Не учёл операторы копирования :(

comment:9 Changed 6 years ago by Филипп

Resolution: задача сдана
Status: newclosed

Дифф большеват, но в целом это лучше, чем +2 delete :)

Note: See TracTickets for help on using tickets.