#68 closed ожидается проверка (задача сдана)
Huffman
Reported by: | Kravtsov Pavel | Owned by: | Vladimir Rutsky |
---|---|---|---|
Priority: | проверка | Milestone: | |
Component: | HA#2 huffman | Version: | 1.0 |
Keywords: | Cc: |
Description
Change History (10)
comment:1 Changed 7 years ago by
Milestone: | ha2-milestone2 → ha2-deadline |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:4 Changed 7 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
Все исправлено, извиняюсь за задержку
comment:5 Changed 7 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Замечания:
-
std::priority_queue
не гарантирует, что при добавлении элементов с одним приоритетом они будут извлечены в каком-то определённом порядке, поэтому теоретически ваше решение может строить различные деревья при кодировании и декодировании, если у каких-то символов одинаковый частота встречаемости, при приведёт к ошибочному декодированию.
Сейчас ваш компаратор
Node
стабильно сравнивает только листья:
bool operator < (Node const & other) const { if (frequency != other.frequency) { return frequency > other.frequency; } else { return byte > other.byte; } }
т.к. у не-листьев у вас неинициализированное поле
byte
.
- При сжатии файла с одним байтом происходит чтение неинициализированной памяти:
==11475== Conditional jump or move depends on uninitialised value(s) ==11475== at 0x4020CF: Encoder::write_data(std::basic_ifstream<char, std::char_traits<char> >&, std::basic_ofstream<char, std::char_traits<char> >&, Node*, unsigned long) (huffman.cpp:157) ==11475== by 0x402C2B: Encoder::encode(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (huffman.cpp:70) ==11475== by 0x401940: main (main.cpp:28) ==11475==
comment:8 Changed 7 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
comment:9 Changed 7 years ago by
Resolution: | → задача сдана |
---|---|
Status: | new → closed |
Решение зачтено, но с минусом из-за последних исправлений.
Note: See
TracTickets for help on using
tickets.
Замечания:
<climits.h>
вместо<limits.h>
.UINT32_MAX
используйте C++ шаблонный вариант:std::numeric_limits<std::uint32_t>::max()
.ababab.1.in
должен сжиматься в один байт сжатых данных, а у вас получается два.0D0A0A0A0B.in
у вас пишутся несоответствующие друг-другу результаты.std::priority_queue
(но не забудьте реализовать стабильный компаратор, т.к.std::priority_queue
не гарантирует порядок извлечения элементов с одинаковым приоритетом).Исправьте, пожалуйста, в ближайшее время.