#65 closed ожидается проверка (задача сдана)
HA#2 huffman
Reported by: | Luchko Serega | Owned by: | Vladimir Rutsky |
---|---|---|---|
Priority: | проверка | Milestone: | |
Component: | HA#2 huffman | Version: | |
Keywords: | Cc: |
Description
Отсылаю на проверку. По поводу чтения и записи: использовал рекомендованные ссылки. Надеюсь не будете ругаться за каст операторы. Так как на данных ресурсах, а так же stackoverflow утверждает что это нормальный путь.
http://en.cppreference.com/w/cpp/io/basic_istream/read
http://en.cppreference.com/w/cpp/io/basic_ostream/write
Change History (8)
comment:1 Changed 7 years ago by
Milestone: | ha2-milestone1 → ha2-milestone2 |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 7 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
Здравствуйте.
1) Папка с решением должна называться ha2, а у вас называется hw2.
Решено
2,3) Не используйте глобальные переменные:
Перенесите это состояние в члены класса Huffman (и сделайте методы endode/decode не статическими).
Сделал
4) Передавайте объекты, которые не планируете модифицировать по константной ссылке:
Сделал
5) Не используйте using namespace std; в заголовочном файле --- в противном случае вы "загрязняете"
Сделал
6) Используйте тип size_t для индексов и размеров:
Поправил
7) huffman_algorithm не возвращает значения, если вызывается от пустого набора символов.
На практике этого не проиходит, т.к. вы не вызываете этот метод на пустом наборе, но компилятор выдаёт предупреждение.
Поправил
8) При кодировании/декодировании пустого файла вы выводите, что доп. данные занимают 8 байт, хотя вы их не записываете.
Сделал
9) std::priority_queue не гарантирует, что при добавлении элементов с одним приоритетом они будут извлечены
в каком-то определённом порядке, поэтому теоретически ваше решение может строить различные деревья
при кодировании и декодировании, если у каких-то символов одинаковый частота встречаемости, при приведёт
к ошибчному декодированию.
Добавил поля accumulator в класс Tree, теперь поддерево помнить все символы в себе, и два поддерева можно уникально
отличить используя это переменную, даже если частоты у них совпали.
10) Вместо -output должен поддерживаться флаг --output.
Сделал
11) Нет необходимости сохранять количество символов в исходном файле при сжатии
--- вы можете его вычислить просуммировав количества каждого встречающегося символа.
Сделал
12) Ваше решение очень похоже на решение Александра Лучко.
Да, мы с ним живём в одной комнате. И когда писали код, то объяснили друг другу что как можно решить.
Ссылки на ввод вывод, на написание бит в стаковерфлов юзали те же. Да и на вывод.
=======================
Попытался успеть в 60 часов.
comment:3 Changed 7 years ago by
Milestone: | ha2-milestone2 → ha2-deadline |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Замечания:
- Заголовочный файл должен быть самодостаточным: в
huffman.hpp
вы используетеstd::ofstream
,std::ifstream
и другие типы. Плюс вы неявно предполагаете, что пользовательhuffman.hpp
делаетusing namespace std;
--- вы используетеstd::uint8_t
и аналогичные типы без указанияstd
.
Исправьте, пожалуйста, в ближайшее время.
comment:4 Changed 7 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
Я добавил std к типам. Но я не понял первого предложения.
Заголовочный файл должен быть самодостаточным: в huffman.hpp вы используете std::ofstream, std::ifstream и другие типы. (Надеюсь эти типы можно использовать, не понял как они на самодостаточность влияют.)
comment:5 Changed 7 years ago by
Сергей, под самодостаточностью заголовочного понимается в частности то, что файл можно включить в "пустой" main.cpp
, и он скомпилируется (т.е. не будет ошибок, вроде неизвестый класс std::ofstream
, или неизвестный тип uint8_t
).
Это корректное использование
reinterpret_cast
:Здесь не подходит динамическое приведение типа (
dynamic_cast
) и не подразумевается статическое приведение типа (static_cast
), здесь вы именно хотите посмотреть на область памяти, которая представлена указателем одного типа, как на массив байт ---reinterpret_cast
предназначен именно для такой операции.Замечания:
ha2
, а у вас называетсяhw2
.using namespace std;
в заголовочном файле --- в противном случае вы "загрязняете" глобальную область видимости для всех пользователей вашего заголовочного файла. Используйтеusing namespace std;
в*.cpp
файлах (или в своей области видимости).size_t
для индексов и размеров:huffman_algorithm
не возвращает значения, если вызывается от пустого набора символов. На практике этого не проиходит, т.к. вы не вызываете этот метод на пустом наборе, но компилятор выдаёт предупреждение.std::priority_queue
не гарантирует, что при добавлении элементов с одним приоритетом они будут извлечены в каком-то определённом порядке, поэтому теоретически ваше решение может строить различные деревья при кодировании и декодировании, если у каких-то символов одинаковый частота встречаемости, при приведёт к ошибчному декодированию.-output
должен поддерживаться флаг--output
.Исправьте, пожалуйста, в течение 60 часов.