Рекламодатель: ЗАО «Топ Системы»

ИНН 7726601967 ОГРН 1087746953557

Рекламодатель: ООО «ЛС-Технологии»

ИНН 7807258360 ОГРН 1227800102375

Рекламодатель:
ООО «С3Д Лабс»

ИНН 7715938849 ОГРН 1127747049209

4 - 2023

Block sort — фундаментальный алгоритм сортировки со сложностью O

Юрий Вагин, инженер-физик. Специальность — автоматика и электроника.

В статье рассматривается новый Blocksort— фундаментальный алгоритм сортировки со сложностью O(n*log(n/2)), прекрасный для работы во многопотоковом исполнении на многоядерных процессорах, поскольку позволяет запускать следующий проход сортировки, не ожидая завершения предыдущего прохода, что в разы уменьшает время сортировки.

Сортировка — один из фундаментальных алгоритмов программного обеспечения. Много изобретено в данном направлении, но оптимальных решений так и не найдено, сложность решений и скорость обработки данных оставляют желать лучшего. Все алгоритмы многократно описаны и опубликованы в специальных изданиях и в Internet. Краткая информация для сравнения по часто применяемым алгоритмам сортировки данных приведена в табл. 1.

В данной статье рассматривается совершенно другой алгоритм, более простой и эффективный, — блочный (Block sort), с двумя уровнями  сложности: лучшей (min) —  O((n/2)*log(n)) и худшей (max) —  O(n*log(n/2)),

соотношением max/min = 2*(1-1/log(n)) и всегда известным количеством проходов при сортировке = log(n).

Весь массив записей (чисел) представляется в виде блоков и полублоков:

  • на первом проходе размер блока равен 2, полублока — 1;
  • на втором проходе размер блока равен 4, полублока — 2;
  • на третьем проходе размер блока равен 8, полублока — 4;
  • на четвертом проходе размер блока равен 16, полублока — 8;
  • и так далее, то есть размер блока всегда равен 2 в степени номера прохода.

Для примера при количестве записей 64 необходимо выполнить log(64) = 6 проходов и сравнить: в лучшем случае (n/2)*log(n) = (64/2)*log(64) = 192 записи (числа), в худшем случае n*log(n/2) = 64*log(64/2) = 320 записей (чисел).

Для более полного понимания алгоритма Block sort на рис.1-3 показана сортировка массива из 16 чисел:

--- черным цветом показаны операции сравнения;

--- красным цветом показаны операции переноса после сравнения;

--- синим цветом показаны операции переноса без сравнения.

При нечетном проходе данные из массива 1   переносятся в массив 2, при четном — из  массива 2 в массив 1.

Рис. 1. Сортировка отсортированного массива в обратном порядке

Рис. 2. Сортировка произвольного массива в порядке убывания

Рис. 3. Сортировка произвольного массива в порядке возрастания

Теперь об использовании памяти:

  • если сортируются массивы чисел, то дополнительной памяти потребуется в размере n — первоначальный размер массива;
  • если сортируются записи, то дополнительной памяти потребуется 2n — под указатели.

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

Большие массивы записей (чисел) можно сортировать, разделив их на меньшие части на компьютерах в сети, что еще больше сокращает время сортировки.

Алгоритм Block sort практически реализован на языке C в СУРБД Start-RTS+ — кроссплатформенной системе управления реляционными базами данных, предназначенной для использования в приложениях, которые работают без каких-либо изменений кода в среде операционных 64-разрядных систем MX-Linux и Windows.

На базе Start-RTS+  разработана прикладная технологическая система Смета-RTS для расчета смет в области строительства с нормативными базами регионов России.

Регистрация | Войти

Мы в телеграм:

Рекламодатель:
ООО «Нанософт разработка»

ИНН 7751031421 ОГРН 5167746333838

Рекламодатель: ООО «НТЦ ГеММа»

ИНН 5040141790 ОГРН 1165040053584

Рекламодатель: ЗАО «Топ Системы»

ИНН 7726601967 ОГРН 1087746953557