Opened 7 years ago

Closed 7 years ago

Last modified 7 years ago

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

HW2

Reported by: Andrey Owned by: Vladimir Rutsky
Priority: проверка Milestone:
Component: HA#2 huffman Version:
Keywords: Cc: andreypestov82@…

Description

Класс Хафман написан, но программа еще не работает. Сдаю с надеждой получить замечания, чтобы позже доделать.

Change History (9)

comment:1 Changed 7 years ago by Andrey

Cc: andreypestov82@… added
Milestone: ha2-milestone1ha1-milestone2

comment:2 Changed 7 years ago by Andrey

Ко второму дедлайну.

comment:3 Changed 7 years ago by Andrey

Milestone: ha1-milestone2ha2-milestone2

comment:4 Changed 7 years ago by Andrey

После того как я перешел на uint8_t, программа перестала выполнять декомпозицию. Выдает segmentation fault. Я так и не понял как читать из файла или переводить из char в uint8. Долго уже бъюсь над задачей - не выходит.

comment:5 Changed 7 years ago by Vladimir Rutsky

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

Замечания:

  1. Все методы класса huffman статические. В данном случае нет смысла использовать класс в качестве интерфейса. Реализуйте в huffman.hpp две функции compress и decompress, а остальные детали реализации кодирования/декодирования перенесите в huffman.cpp.
  1. Вы не включили в размер дополнительных данных 4 байта от размера таблицы символов, и 4 байта количества закодированных символов.
  1. std::priority_queue не гарантирует, что при добавлении элементов с одним приоритетом они будут извлечены в каком-то определённом порядке, поэтому теоретически ваше решение может строить различные деревья при кодировании и декодировании, если у каких-то символов одинаковый частота встречаемости, при приведёт к ошибчному декодированию.

Node сравнивает листья стабильно, но не-листья --- не стабильно (т.к. symbol у них всегда равен 0).

  1. Память для узлов дерева освобождается некорректно.

Здесь вы делаете очень плохую вещь:

priority_queue <Node> frequencies;
...

        Node * first = new Node(frequencies.top());
        frequencies.pop();
        Node * second = new Node(frequencies.top());
        frequencies.pop();
        Node * X = new Node(first, second);
        frequencies.push(*X);

Тип priority_queue <Node> frequencies подразумевает, что frequencies владеет объектами Node, и они должны быть копируемыми. Вы же создаёте Node в куче и затем явно приводите его к Node.
Храните в priority_queue Node * и передавайте собственный компаратор в priority_queue.
Пусть Node владеет своими left и right и освобождает их память в десткруторе.

Исправьте, пожалуйста, в ближайшее время.

comment:6 Changed 7 years ago by Andrey

Замечания исправил.

comment:7 Changed 7 years ago by Andrey

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

comment:8 Changed 7 years ago by Vladimir Rutsky

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

Решение зачтено.

comment:9 Changed 7 years ago by Vladimir Rutsky

Milestone: ha2-deadline

Milestone ha2-deadline deleted

Note: See TracTickets for help on using tickets.