Участник:Ashabokov 415/Алгоритм быстрой сортировки

Материал из Алговики
Версия от 02:26, 21 октября 2019; Ashabokov 415 (обсуждение | вклад) (Новая страница: «'''Алгоритм быстрой сортировки''' == Свойства и структура алгоритмов == === Общее описание а…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Алгоритм быстрой сортировки

1 Свойства и структура алгоритмов

1.1 Общее описание алгоритма [1]

Основной идеей данного алгоритма является разбиение всего массива данных на блоки меньшего размера таким образом, что между соответствующими блоками после разбиения можно установить отношение упорядоченности. Сортировка производится следующим образом: выбирается некоторым образом ведущий элемент, после чего происходит разделение исходного массива данных на два блока относительно ведущего элемента: в первый блок помещаются элементы, меньшие ведущего, а во второй --- большие ведущего. Таким образом, можно утверждать, что наибольший элемент первого блока меньше наименьшего элемента второго блока. Это означает, что повторив эту операцию для каждого из блоков отдельно некоторое количество раз и объединив результаты, получим массив с исходными данными в отсортированном виде. Из описания становится очевидно, что данный алгоритм можно легко обобщить для параллельной вычислительной системы с количеством процессоров [math]p = 2^n[/math]. Для этого алгоритм необходимо лишь дополнить методом выбора процессоров, между которыми будут происходить обмены данными на i-ом шаге. Распределим произвольным образом данные между процессорами, далее выбираем некоторым образом ведущий элемент и рассылаем его всем процессорам системы. Т.к. топология системы имеет вид n-мерного куба, номер каждого процессора имеет двоичное представление длины [math]n[/math], следовательно, можно ввести правило: на каждом процессоре происходит сравнение имеющегося блока данных с текущим ведущим элементом, после чего элементы меньше ведущего отправляются от процессора с номером [math]n_1[/math] процессору номер [math]n_2[/math], где [math]n_1[/math] отличается от [math]n_2[/math] только в n-том разряде двоичного представления, в двоичном представлении числа [math]n_1[/math] на n-той позиции стоит 1, а [math]n_2[/math] — 0. Таким образом, после данной операции все данные будут разделены между процессорами, образующими n-1-мерные кубы таким образом, что элемент блока данных любого процессора из первого куба больше любого элемента блока данных процессора из второго куба. Повторив аналогичные действия для каждого из n-1-мерных кубов, получим 4 n-2-мерных куба и т.д. Последним этапом работы алгоритма является объединение разрозненных блоков отсортированных данных в единый массив в правильном порядке. Порядок объединения не трудно восстановить исходя из двоичных представлений номеров процессоров.

1.2 Математическое описание алгоритма

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

[math]\sum_{i=1}^{n} i = n(n+1)/2 ≈ \log^2 p [/math] [2],

где [math] p [/math] — количество задействованных процессоров.

2 Литература

  1. https://en.wikipedia.org/wiki/Quicksort — From Wikipedia, the free encyclopedia
  2. http://ssd.sscc.ru/ru — Supercomputer Software Department