Opened 6 years ago

Closed 6 years ago

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

HW2 Huffman

Reported by: Igor Ryabtsev Owned by: rutsky,grabovoy.philipp
Priority: проверка Milestone: ha2-deadline
Component: HA#2 huffman Version: 1.0
Keywords: Cc:

Description


Change History (5)

comment:1 Changed 6 years ago by Igor Ryabtsev

Summary: HW2. HuffmanHW2 Huffman

comment:2 Changed 6 years ago by Vladimir Rutsky

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

Замечания:

  1. Вы используете uint32_t в заголовочном файле, но не включаете <cstdint>.
  1. Принимайте в компараторе Node_comparator Node по константному указателю (а также в других функциях, где Node не предполагается модифицировать).
  1. Node_comparator не гарантирует стабильного порядка для std::priority_queue, т.к. Node::character для не-листьев содержит сумму целочисленных значений символов в листьях в поддереве, эти суммы могут повторяться для подеревьев.
  1. В Huffman::write_codded_data_to_file() вы модифицируете frequencies, обращаясь по 256 индексам в std::unordered_map, что является неожиданным побочным эффектом.
	for (size_t i = 0; i < 256; ++i)
	{
		if (frequencies[i] == 0)
		{
			uint8_t zero = 0;
			out << zero << zero << zero << zero;
			continue;
		}
		uint32_t number_to_write = frequencies[i];
		out << (uint8_t)(number_to_write >> 24) << (uint8_t)(number_to_write >> 16) << (uint8_t)(number_to_write >> 8) << (uint8_t)number_to_write;
	}

Вместо continue лучше использовать else в данном случае.

  1. Для сериализации и десериализации двоичных данных лучше (и проще) использовать методы i/ofstream .write() и .read() (вмето побайтовой записи):
std::uint32_t zero = 0;
out.write(reinterpret_cast<char *>(&zero), sizeof(zero));

Также вы можете (де)сериализовать массивы:

vector<uint32_t> frequencies(256, 0);
...
out.write(reinterpret_cast<char *>(frequencies.data()), sizeof(frequencies[0]) * frequencies.size());

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

comment:3 Changed 6 years ago by Igor Ryabtsev

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

comment:4 Changed 6 years ago by Igor Ryabtsev

Все пункты исправил.

comment:5 Changed 6 years ago by Vladimir Rutsky

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

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

Note: See TracTickets for help on using tickets.