Неформальный алгоритм сортировки файла с применением битового сжатия в языке программирования C++ | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 11 мая, печатный экземпляр отправим 15 мая.

Опубликовать статью в журнале

Автор:

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №2 (344) январь 2021 г.

Дата публикации: 09.01.2021

Статья просмотрена: 272 раза

Библиографическое описание:

Визер, А. Н. Неформальный алгоритм сортировки файла с применением битового сжатия в языке программирования C++ / А. Н. Визер. — Текст : непосредственный // Молодой ученый. — 2021. — № 2 (344). — С. 12-14. — URL: https://moluch.ru/archive/344/77444/ (дата обращения: 02.05.2024).



В статье автор рассматривает сортировку файла при помощи битового массива на C++. А также сравнивает затраты оперативной памяти без использования битового массива.

Ключевые слова: алгоритм, сортировка, оперативная память, C++, битовое сжатие

Многие люди знают, как отсортировать массив, но довольно часто к этой задаче добавляются ограничения такие как малый объем памяти. Для эффективного использования памяти часто используются специфические типы данных или специальные алгоритмы. Цель данной статьи — показать один из методов оптимизации памяти при сортировке одномерного массива.

Постановка задачи:

Входные данные: Файл, содержащий не более n (n= ) целых положительных чисел, каждое из которых семизначное число, т. е. принадлежит диапазону [1000000…9999999] и среди них нет повторяющихся.

Результат: упорядоченный по возрастанию список чисел.

Ограничения:

  1. Оперативной памяти — приблизительно 2 Мб
  2. Дисковая память неограниченна
  3. Время выполнения программы — 10 секунд

Доказательство эффективности по памяти неформального алгоритма решения задачи:

Для начала рассмотрим алгоритм на небольшом количестве чисел.

Пусть имеется 20 целых чисел и их можно значения в диапазоне от 1 до 20 и их надо представить 20 битами. Последовательность чисел, вставляемая в битовую последовательность из 20 бит, будет такой {1, 2, 5, 9, 12, 8}. Сначала вся последовательность бит заполнена нулями. Биты в последовательности нумеруются с нуля.

Теперь создадим отображение, которое вставляет 1 в бит с номером, равным значению вставляемого числа, тогда получим следующую битовую последовательность: 011001001100100000000

Проведем небольшой сравнительный анализ приведенного примера:

Возьмем int8 как тип данных, в котором хранятся числа до обработки. Int8 имеет объем в 1 байт или 8 бит, чисел использовано 6 => 8*6 = 48 бит использовано в общем. Битовая строка, как описано выше, состоит из 20 бит и имеет такой же объем в оперативной памяти. Чем больше используется чисел и чем меньше строка, тем меньше памяти нам потребуется.

Докажем рентабельность этого алгоритма для поставленной задачи:

Изначальный тип данных для чисел будет int32, int16 слишком мал. Каждое число занимает 4 байта в памяти => *4 байта = 40 000 000 байт или 320 000 000 бит. 2 Мб это 2097152 байт или 16 777 216 бит. Очевидно, мы не можем воспользоваться простыми алгоритмами сортировки т. к. не хватит памяти.

Рассмотрим строку из бит. Она покрывает весь диапазон возможных чисел => ее использование возможно. 10 000 000 < 16 777 216 => программа так же удовлетворяет условию по памяти. Из всего вышесказанного можно сделать вывод, что данный алгоритм удовлетворяет требованиям задачи и его эффективность доказана.

Алгоритм решения:

В качестве файла с данными будет использован файл gen.txt, в качестве выходного файла будет out.txt. Сама сортировка будет происходить уже при выводе информации т. к. будут рассматриваться ненулевые элементы битовой строки от наименьшего индекса к наибольшему. Для дополнительного понимания информации код будет прокомментирован в важных участках

Часть содержимого файла gen.txt до сортировки

Рис. 1. Часть содержимого файла gen.txt до сортировки

Код программы будет выглядеть так:

#include

#include

#include

#include

using namespace std;

const int N = 10000000;

int main() {

//строка битов

auto * bitset = new std::bitset (0);

//поток ввода-вывода

fstream inout;

inout.open(«gen.txt»);

int k;

for (int i = 0; i < N; i++){

inout >> k;

//назначение индексу равному вводимому в битовой строке значения 1

bitset->set(k); }

inout.close();

inout.open(«out.txt»);

for (int i = 0; i < N; i++){

//вывод индекса в файл, если значение бита равно 1

if (bitset->test(i) == 1)

inout << i << " ";

}

inout.close();

}

Часть содержимого файла out.txt после сортировки

Рис. 2. Часть содержимого файла out.txt после сортировки

Вывод:

Исследовав метод хранения информации битовым сжатием и проведя сравнительный анализ с обычным методом хранения информации, была доказана большая эффективность использования памяти во время сортировки массива, несмотря на простоту реализации.

Литература:

  1. bitset: класс-контейнер для хранения битов. — Текст: электронный // cppstudio: [сайт]. — URL: http://cppstudio.com/post/5765/ (дата обращения: 08.01.2021).
  2. Битовые маски. Динамическое программирование по маскам. — Текст: электронный // brestprog: [сайт]. — URL: https://brestprog.by/topics/bitmasks/ (дата обращения: 08.01.2021).
  3. Примеры использования битового сжатия. — Текст: электронный // acm.math.spbu: [сайт]. — URL: http://acm.math.spbu.ru/~sk1/mm/lections/2014–08–20-bits.pdf (дата обращения: 08.01.2021).
Основные термины (генерируются автоматически): оперативная память, бит, число, алгоритм, байт, битовая последовательность, битовая строка, битовое сжатие, битовый массив, содержимый файл.


Ключевые слова

алгоритм, сортировка, оперативная память, C++, битовое сжатие

Похожие статьи

Применение стандарта криптосистем DES для шифрования...

DES предназначен для работы с 64-битовыми блоками данных, который преобразуется к зашифрованному блоку (64-бит) за 16-шагов.

Для этого необходимо выбрать переменную , где , которая обозначает число битов на выходе генератора потока ключей при каждой итерации.

Организация базы данных в автоматизированных системах

Массивами связей являются массивы, содержащие структурные связи между записями

Массив спецификаций представляется в банке данных в виде последовательного перечня

При записи данных в формат (GraphML или GraphSon) битовый массив конвертируется в...

Информационные технологии. Общие понятия и классификация

 «Тренировка памяти” (числовые ряды) — программа выводит на экран числовые ряды, которые нужно запомнить и в точности повторить при вводе;  Компьютерный тренажер для начальной школы «Математический Тетрис» — позволяет закрепить таблицу умножения в...

Алгоритм формирования пакетов данных для передачи по...

Битовые ошибки могут с некоторой вероятностью инвертировать биты, которые составляют информацию о разбиении пакета.

Пара программных модулей, которые реализуют описываемый алгоритм формирования пакетов встраиваются в пакетную сеть и работают в...

Big Data. Особенности и роль в современном бизнесе

В статье рассматриваются основные понятия, связанные с big data, основы и принципы работы с методами и подходами больших данных. Анализируются текущие тенденции на современном рынке предоставляемых услуг и продуктов, а также в каких случаях могут применяться...

Сравнительный анализ исполнения алгоритмов, содержащих...

Библиографическое описание: Буняева, Е. В. Сравнительный анализ исполнения алгоритмов, содержащих ветвления в архитектуре

Также стоит отметить, что предсказатель переходов имеет своей целью осуществление предварительной выборки инструкций и данных из памяти...

Алгоритмы помехоустойчивого кодирования и их аппаратная...

Аппаратная реализация алгоритмов в первую очередь нужна для получения максимального быстродействия выполнения операций кодирования и декодирования в устройстве.

Одним из битов регистра управления является СI — бит инициализации контрольной суммы.

BigData: анализ больших данных сегодня | Статья в журнале...

Это огромные хранимые и обрабатываемые массивы из сотен гигабайт, и даже петабайт данных.

С помощью SQL можно создавать и модифицировать данные, а управлением массива данных занимается соответствующая система управления базами данных.

Похожие статьи

Применение стандарта криптосистем DES для шифрования...

DES предназначен для работы с 64-битовыми блоками данных, который преобразуется к зашифрованному блоку (64-бит) за 16-шагов.

Для этого необходимо выбрать переменную , где , которая обозначает число битов на выходе генератора потока ключей при каждой итерации.

Организация базы данных в автоматизированных системах

Массивами связей являются массивы, содержащие структурные связи между записями

Массив спецификаций представляется в банке данных в виде последовательного перечня

При записи данных в формат (GraphML или GraphSon) битовый массив конвертируется в...

Информационные технологии. Общие понятия и классификация

 «Тренировка памяти” (числовые ряды) — программа выводит на экран числовые ряды, которые нужно запомнить и в точности повторить при вводе;  Компьютерный тренажер для начальной школы «Математический Тетрис» — позволяет закрепить таблицу умножения в...

Алгоритм формирования пакетов данных для передачи по...

Битовые ошибки могут с некоторой вероятностью инвертировать биты, которые составляют информацию о разбиении пакета.

Пара программных модулей, которые реализуют описываемый алгоритм формирования пакетов встраиваются в пакетную сеть и работают в...

Big Data. Особенности и роль в современном бизнесе

В статье рассматриваются основные понятия, связанные с big data, основы и принципы работы с методами и подходами больших данных. Анализируются текущие тенденции на современном рынке предоставляемых услуг и продуктов, а также в каких случаях могут применяться...

Сравнительный анализ исполнения алгоритмов, содержащих...

Библиографическое описание: Буняева, Е. В. Сравнительный анализ исполнения алгоритмов, содержащих ветвления в архитектуре

Также стоит отметить, что предсказатель переходов имеет своей целью осуществление предварительной выборки инструкций и данных из памяти...

Алгоритмы помехоустойчивого кодирования и их аппаратная...

Аппаратная реализация алгоритмов в первую очередь нужна для получения максимального быстродействия выполнения операций кодирования и декодирования в устройстве.

Одним из битов регистра управления является СI — бит инициализации контрольной суммы.

BigData: анализ больших данных сегодня | Статья в журнале...

Это огромные хранимые и обрабатываемые массивы из сотен гигабайт, и даже петабайт данных.

С помощью SQL можно создавать и модифицировать данные, а управлением массива данных занимается соответствующая система управления базами данных.

Задать вопрос