Opened 3 years ago
Closed 3 years ago
#679 closed ожидается проверка (задача сдана)
HW_Huffman kozlovceva.mariya hw_02
Reported by: | Maria Kozlovtseva (kozlovceva.mariya) | Owned by: | Дмитрий Лапшин (lapshin) |
---|---|---|---|
Component: | HW #3 (Huffman) | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (10)
comment:1 Changed 3 years ago by
comment:2 Changed 3 years ago by
Так, я там почистила немного, теперь конец не путается, всё нормально.
Но большие файлы (и вообще файлы) сворачивает ужасно просто. Там разница несколько процентов((
И фотку разжать в исходное состояние не вышло, не открывается( с текстовыми всё нормально при этом, хотя я в бинарном режиме открываю, не понимаю, в чем разница.
comment:3 Changed 3 years ago by
Я без понятия, вторая это посылка уже или нет.
Исправила структуру (убрала наследование), улучшила проверку аргументов, упростила исключения, чтобы было удобнее их в тестах проверять, исправила проблему с файлом из одного символа, убрала очередь из полей.
comment:4 Changed 3 years ago by
Owner: | changed from Дмитрий Лапшин (lapshin) to Maria Kozlovtseva (kozlovceva.mariya) |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Прости, проверка чего было, успеешь исправить.
cannot find file doctest.h :( А потом двойной мейн (в тестах). Очень плохо.
Рекомендую OBJECT библиотеку а не STATIC в CMake
.
Корректность: когда в файле всего один вид символов становится грусть. А вообще-то работает, Войну и Мир сжало нормально, почти в 2 раза. Помни, что на маленьких файлах оверхед таблички и всего убивает что бы ты ни делала. Ещё есть грусть когда в файле есть 0x80, его как будто забывают. 10.
Тесты: заголовка лишь.
Стиль:
- А ну понятно почему один чарик теряется. Кстати, знаковость
char
по стандарту неизвестна. Лучше воспользуйся заведомоunsigned
и притащи его границы из приличных мест. - Про указатели уже поговорили.
- И про структуру классов тоже.
this->
стараемся не писать.- Ты бы сильно упростила себе жизнь если бы включила у файловых потоков исключения) Тем более ты опять сначала проверяешь fail, потом читаешь, ну ааа.
std::bitset<8> buf;
Обожаю магические числа!std::vector<std::pair<...
:std::map
/std::unordered_map
? Или просто уже вектор размера 256?- Хранить битстрочки в виде чаровых кажется избытком, ведь есть вектора булов, ноо предположим.
-
friend void tree_traversal_archiver(std::shared_ptr<HuffmanTree::HuffmanTreeNode>& node, std::map<char, std::string>& coding_table, const std::string& cur_code); friend void tree_traversal_unzip(std::shared_ptr<HuffmanTree::HuffmanTreeNode>& node, std::map<std::string, isNotDefaultCharAndChar>& coding_table, const std::string& cur_code);
Ну и зачем нам два класса, когда всё умеют деревья?)
5.
comment:5 Changed 3 years ago by
Owner: | changed from Maria Kozlovtseva (kozlovceva.mariya) to Дмитрий Лапшин (lapshin) |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
Вроде всё исправила, кроме тестов.
И ещё стринг на вектор булов не меняла. Мне кажется, абсолютная разница в памяти не такая большая, а выглядит красивей, на мой вкус.
comment:6 Changed 3 years ago by
Да, оставила отдельно от failure исключения с открытием файлов намеренно. Мне кажется, их нужно как-то отдельно выделять, так что пусть так будет.
comment:7 Changed 3 years ago by
Добавила тесты. Пришлось выделить проверку аргументов в отдельный файл, чтобы иметь возможность её затестить.
comment:8 Changed 3 years ago by
Owner: | changed from Дмитрий Лапшин (lapshin) to Maria Kozlovtseva (kozlovceva.mariya) |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Корректность: Разжатие почему-то медленно на больших тестах, но лишь слегка: в оптимизирующей сборке всё ок. 15.
Тесты: а что-то падают молча, очень грустно. Хотя вроде как бы доктест, всё такое, но просто будто exit 1
. Я пробовал запустить из папки со сборкой, пробовал в корне проекта.
Стиль:
- Зачем у структуры публичные поля с подчёркивания? Очень странные дефолты в виде пробела.
const size_t BYTE_SIZE = 8;
давай привяжемся к стандартной константе.typedef std::pair<bool, char> isNotDefaultCharAndChar;
здесь ок, но вообще такие мягкие кортежи в сложных случаях. На сложные случаи лучше структуры-аггрегаты. Менять не надо.strcmp
:string_view
+==
.- Имена методов сложные:
unzip_process_algo
: почемуunzip
? Какой алгоритм? Можно было бы простоcompress
/decompress
. - А ну так понятно почему медленно: ты в памяти держишь
fine_in_coding
(что это за слово такоеcoding
? кодинг?) как ПОЛНУЮ строчку. Лучше без этого. И когда дерево обходишь постоянно создаются новые строчки копиями, это не шустро. - У
HuffmanAlgo
почти всё публичное зачем-то. И что он сам печатает вstd::cout
слегка смущает. - Магическое число 6.
- Из мейна полезно бы вернуть код не 0 в случае ошибки.
7.
Плюс время на исправления.
comment:9 Changed 3 years ago by
Owner: | changed from Maria Kozlovtseva (kozlovceva.mariya) to Дмитрий Лапшин (lapshin) |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 2.0 → 3.0 |
Всё, теперь тесты запускаются из корня проекта.
comment:10 Changed 3 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Тесты: можно было бы конечно ещё статистику потестить или построение дерева, но и так хорошо. 15 / 4 / 10.
Пока нет тестов и иногда почему-то в самом конце перевод строки и "y" путает. Если скажете, почему, буду очень рада. Но я просто пока не вникала, на самом деле.
И хотелось бы знать, насколько нормально сжимает. На очень маленьких файлах просто таблица слишком много места занимает, больше, чем исходник.