Skip to content

Камалетдинов Рамзан. Технология TBB. Поразрядная сортировка целых чисел. Вариант 17#529

Merged
allnes merged 1 commit into
learning-process:masterfrom
Ramzan8-88:kamaletdinov_r_bitwise_int_tbb
Apr 1, 2026
Merged

Камалетдинов Рамзан. Технология TBB. Поразрядная сортировка целых чисел. Вариант 17#529
allnes merged 1 commit into
learning-process:masterfrom
Ramzan8-88:kamaletdinov_r_bitwise_int_tbb

Conversation

@Ramzan8-88
Copy link
Copy Markdown
Contributor

Задача: Поразрядная сортировка целых чисел
Вариант: 17
Технология: TBB

Описание алгоритма

Алгоритм в задаче - поразрядная сортировка целых чисел с параллелизацией этапа сортировки подсчётом по каждому разряду. Идея в том, чтобы упорядочить массив без сравнения элементов попарно: последовательно обрабатываются разряды (в десятичной записи), а на каждом разряде применяется стабильная сортировка подсчётом

Основные шаги алгоритма

  1. Подготовка данных
    В соответствии с постановкой задачи формируется массив целых чисел (на этапе препроцессинга), при необходимости заполнение может распараллеливаться через parallel_for.

  2. Сортировка по разрядам
    Для каждого разряда (единицы, десятки, сотни и т.д.) выполняется проход counting sort:

    • массив логически делится на P блоков, где P согласуется с уровнем параллелизма TBB (например, max_concurrency() текущей арены задач);
    • параллельно в каждом блоке считаются локальные гистограммы по цифрам 0…9;
    • локальные счётчики суммируются, строятся префиксные смещения и позиции записи для каждого блока;
    • параллельно элементы блоков записываются в выходной буфер по соответствующим позициям (стабильный проход по каждому блоку);
    • вход и выход меняются ролями для следующего разряда.
  3. Корректная обработка отрицательных чисел
    Поскольку поразрядная сортировка естественно настроена на неотрицательные значения, массив предварительно разделяется на:

    • negative - отрицательные числа,
    • positive - неотрицательные числа.
      Далее:
    • для negative и positive отдельно выполняется radix sort по модулю;
    • для отрицательной части результат переставляется в обратном порядке (чтобы сохранить порядок величин со знаком: например, -100 < -2);
    • затем отрицательные значения возвращают знак - и записываются перед положительными.

Параллельная часть (TBB)

Параллелизм сосредоточен на фазах counting sort для каждого разряда:

  • parallel_for распределяет работу по блокам при подсчёте цифр;
  • parallel_for распределяет запись в выходной массив по тем же блокам после вычисления смещений.
    Сборка глобальных гистограмм и префиксных сумм по 10 корзинам выполняется последовательно и занимает мало времени по сравнению с проходами по n элементам.

Оценка сложности

  • Один полный проход по разряду: O(n) работы по данным плюс O(P) на слияние маленьких локальных счётчиков (константа по основанию 10); при подходящем P это хорошо масштабируется по ядрам.
  • Вся сортировка: O(k x n), где k — число обрабатываемых разрядов (для int в десятичной записи ограничено константой).
  • Память: O(n) на выходной буфер каждого прохода counting sort и вспомогательные массивы счётчиков/смещений.

Итог: реализована поразрядная сортировка целых чисел с поддержкой отрицательных значений; на каждом разряде стабильный counting sort распараллелен средствами TBB (parallel_for), без необходимости отдельного тяжёлого этапа попарного сравнения элементов.

Чек-лист выполнения

  • Статус CI: все задачи (сборка, тесты, генерация отчёта) успешно проходят в моей ветке
  • Директория и именование: используется папка kamaletdinov_r_bitwise_int с реализацией в подкаталоге tbb и корректной структурой проекта
  • Полное описание задачи: указано в теле pull request
  • clang-format: все изменения проходят проверку локально
  • clang-tidy: все изменения проходят проверку локально
  • Функциональные тесты: успешно проходят локально
  • Тесты производительности: успешно проходят локально
  • Ветка: работа ведётся в ветке kamaletdinov_r_bitwise_int_tbb (или иной, согласованной с ведением веток для TBB-версии этой задачи)
  • Все сведения в pull request точные и достоверные

@Ramzan8-88
Copy link
Copy Markdown
Contributor Author

@allnes падает тест Романа Петерсона: [ FAILED ] 1 test, listed below:
[ FAILED ] DefaultTests/PetersonGrahamScannerOMPFuncTests.MatmulFromPic/peterson_r_graham_scan_omp_omp_enabled_5_circle_5, where GetParam() = (32-byte object <60-C9 D4-E0 38-56 00-00 00-00 00-00 00-00 00-00 20-DC D4-E0 38-56 00-00 F0-DB D4-E0 38-56 00-00>, "peterson_r_graham_scan_omp_omp_enabled", (5, "circle_5"))

@Ramzan8-88 Ramzan8-88 closed this Apr 1, 2026
@Ramzan8-88 Ramzan8-88 reopened this Apr 1, 2026
@codecov-commenter
Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 98.59155% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 81.49%. Comparing base (9d9c13e) to head (27fe1c8).
⚠️ Report is 15 commits behind head on master.

Files with missing lines Patch % Lines
...sks/kamaletdinov_r_bitwise_int/tbb/src/ops_tbb.cpp 98.59% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #529      +/-   ##
==========================================
+ Coverage   81.36%   81.49%   +0.13%     
==========================================
  Files         406      409       +3     
  Lines       15651    15825     +174     
  Branches     6322     6412      +90     
==========================================
+ Hits        12734    12897     +163     
- Misses       2026     2027       +1     
- Partials      891      901      +10     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@allnes allnes merged commit bfdd0d2 into learning-process:master Apr 1, 2026
63 of 64 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants