📘 О чем эта работа
В работе подробно рассматриваются приёмы работы с битовым представлением беззнаковых целых чисел и реализуется эффективный алгоритм внешней сортировки на основе битового массива. Кроме того, приводится набор программ на C++ для работы с бинарными файлами записей (структура Enterprise), реализованы линейный поиск и поиск по индексу.
📚 Что внутри
Материалы содержат конкретные примеры кода и пояснения:
- Примеры побитовых операций: установка 5‑го бита в 0 (x = x & ~(1<
- Программа‑пример для ввода до 8 чисел (0..7) и хранения набора в одном unsigned char с последующей сортировкой и выводом битовой последовательности (bitset<8>).
- Адаптация для 64 чисел: использование unsigned long long и альтернативно — массива unsigned char для представления непрерывного битового вектора (разбиение по байтам и индексирование input/8 и input%8).
- Реализация внешней сортировки файла чисел до MAX_NUMBERS = 10^7: расчёт размера битового массива, хранение в векторе unsigned int, установка битов при чтении входного файла и последовательный проход по битовому массиву для записи отсортированных индексов в выходной файл.
- Подсчёт занимаемой памяти: формулы и вывод size_t memorySizeInBytes = (MAX_NUMBERS + 7) / 8; практические комментарии по объёму в байтах.
- Работа с бинарными записями: структура Enterprise { int licenseNumber; char name[50]; char founder[50]; } (размер записи 104 байта), запись в enterprises.dat через outFile.write(reinterpret_cast(&enterprise), sizeof(enterprise)).
- Алгоритмы поиска: линейный поиск по файлу с измерением времени (chrono) и индексный поиск с предпостроенной таблицей (std::unordered_map) ключ→смещение и чтением записи через seekg.
📊 Для кого подходит
Материал полезен студентам кафедр программирования и информатики (2–4 курсы), слушателям курсов по системному программированию, разработчикам, работающим с низкоуровневой обработкой данных и созданием быстрых сортировок для больших объёмов чисел.
✨ Особенности
В комплекте — конкретные рабочие листинги на C++ (работают в среде Windows с SetConsoleCP/SetConsoleOutputCP), тестовые примеры и скриншоты результатов. Приведены методы оптимальной упаковки набора данных в битовый вектор, инструкция по переходу от одного целого для 64 бит к массиву байтов для произвольных объёмов, а также рекомендации по оценке и оптимизации потребления памяти и времени выполнения.
❓ Частые вопросы
Подойдет ли для моего ВУЗа?
Структура лабораторной работы соответствует стандартным требованиям: цель, математическая модель, листинги, тесты и выводы — легко адаптируется под локальные методички.
Можно адаптировать?
Да — код модульный: заменой константы MAX_NUMBERS и типа контейнера можно расширять диапазон, подключать многопоточную обработку или заменять формат ввода/вывода.
Практическая выгода: готовые реализации позволяют быстро получить рабочую лабораторную работу с демонстрацией принципов битовой маскировки, эффективной внешней сортировки и быстрых методов доступа к бинарным записям (индексация для O(1) чтения по ключу).