Opened 7 years ago

Closed 7 years ago

Last modified 7 years ago

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

HW2

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

Description


Change History (7)

comment:1 Changed 7 years ago by Arseny Tsypushkin

Cc: arsenytsypushkin@… added

comment:2 Changed 7 years ago by Vladimir Rutsky

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

Замечания:

  1. Используйте std::ifstream/std::ofstream для ввода/вывода. У них есть методы read(), write(), seekg().
  1. Файлы необходимо открывать в двоичном режиме.
  1. Придерживайтесь единого стиля включения заголовочных файлов: сначала системные, затем свои, или наоборот.
  1. Не используйте глобальные переменные.

Если вам нужно сохранить состояние между вызовами каких-то функций (а вам нужно), тот стоит либо сохранить это состояние в статических переменных внутри функции (что всё равно плохо, т.к. это по сути те же глобальные переменные), либо сделать encode_file, decode_file и некоторые другие функции методами класса, а в полях класса хранить состояние, которое должно быть сохранено между вызовами частей encode_file()/decode_file().

  1. При кодировании/декодировании пустого файла вы выводите, что доп. данные занимают 8 байт, хотя вы их не записываете.
  1. Пустой файл кодируется/декодируется некорректно.
  1. Нет необходимости сохранять количество символов в исходном файле при сжатии --- вы можете его вычислить просуммировав количества каждого встречающегося символа.
  1. Выводимая статистика распаковки в случае распаковки файла, состоящего из одного повторяющегося байта некорректна: всегда выводится 0.
  1. Передавайте code по ссылке в fill_in_letters_table. Сейчас вы не выделяете вектор в динамической памяти (что приводит к утечке памяти, кстати), что не требуется здесь. Передавайте std::vector<bool> по ссылке, где хотите избежать лишнего копирования, а где нужно получить копию, делайте явно копию (в letters_codes_map).
  1. Вместо повторения длинных типов, заведите typedef:
//std::map < std::uint8_t, std::vector<bool>* > letters_codes_map;
//std::map < std::uint8_t, std::vector<bool>* >::iterator it = ...

typedef std::map < std::uint8_t, std::vector<bool>* > letters_codes_map_t;
letters_codes_map_t letters_codes_map;
letters_codes_map::iterator it = ...

comment:3 Changed 7 years ago by Arseny Tsypushkin

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

comment:4 Changed 7 years ago by Vladimir Rutsky

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

Замечания:

  1. std::priority_queue не гарантирует, что при добавлении элементов с одним приоритетом они будут извлечены в каком-то определённом порядке, поэтому теоретически ваше решение может строить различные деревья при кодировании и декодировании, если у каких-то символов одинаковый частота встречаемости, при приведёт к ошибочному декодированию.

Сделайте сравнение в LessByPriority стабильным (для всех вершин, не только листьев).

  1. Выводимая статистика распаковки некорректна. Например, при распаковке сжатого 00_to_ff.256.in выводится:
32
256
1284

а должно

256
256
1284
  1. Вы не освобождаете память для объектов, хранимых в letters_codes_map_t letters_codes_map;.

Почему вы храните в letters_codes_map_t в качестве значения std::vector<bool>* а не std::vector<bool>?

  1. Используйте тип size_t для индексов и размеров:
for (int i = 0; i < number_of_different_letters; i++) {

Я не могу зачесть решение с утечками памяти, исправьте, пожалуйста, в ближайшее время, тогда я зачту исходя из неполного балла.

Last edited 7 years ago by Vladimir Rutsky (previous) (diff)

comment:5 Changed 7 years ago by Arseny Tsypushkin

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

comment:6 Changed 7 years ago by Vladimir Rutsky

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

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

comment:7 Changed 7 years ago by Vladimir Rutsky

Milestone: ha2-deadline

Milestone ha2-deadline deleted

Note: See TracTickets for help on using tickets.