Автор оригинала: Team Python Pool.
Битоническая сортировка: Алгоритм и реализация в Python
Привет, кодеры!! В этой статье мы познакомимся с алгоритмом битонической сортировки python и его реализацией в Python. Сортировка-это способ расположения элементов в определенном порядке, то есть в порядке возрастания или убывания. Существуют различные алгоритмы сортировки, каждый из которых имеет свои плюсы и минусы. Битоническая сортировка-это параллельный алгоритм сортировки, который сортирует элементы с помощью сравнений.
Что такое Битонический сорт?
Это алгоритм сортировки, который работает параллельно. В этом алгоритме существует O(n2 log n) сравнений. Хотя число сравнений больше, оно более подходит для параллельной реализации, поскольку элементы сравниваются в заранее определенной последовательности (битонической последовательности), которая не зависит от данных. Поэтому он оптимален для реализации в аппаратном обеспечении и href=”https://en.wikipedia.org/wiki/Massively_parallel_processor_array”>массив параллельных процессоров. href=”https://en.wikipedia.org/wiki/Massively_parallel_processor_array”>массив параллельных процессоров.
Что такое Битоническая последовательность?
В этой последовательности после некоторого определенного индекса элементы начинают уменьшаться, тогда как до этого индекса элементы идут в порядке возрастания.
x0 and xi+1…..-1
- Последовательность в возрастающем порядке называется битонической, а убывающая часть-пустой. Аналогично, убывающая последовательность называется Бионической, а возрастающая-пустой.
- Битоническая последовательность при вращении также является битонической.
Как преобразовать случайную последовательность в битоническую?
Рассмотрим сначала следующие элементы массива
Элементы Случайной Последовательности
Сначала мы составим пары элементов. Затем мы создадим его битоническую последовательность таким образом, чтобы одна была в порядке возрастания, а другая-в порядке убывания и так далее.
Беря пары по два и сортируя сначала по возрастанию, а затем по убыванию
Теперь мы сделаем пары из каждой пары так, чтобы каждая последовательность имела четыре элемента.
Группы из четырех элементов
Сортировка первой последовательности в порядке возрастания:
- Сначала сравните элементы
- Затем сравните соседние элементы
Сортировка первой половины в порядке возрастания
Аналогично, мы будем сортировать вторую последовательность в порядке убывания:
Сортировка второй половины в порядке убывания
Теперь мы объединим эти две части, чтобы получить нашу окончательную битоническую последовательность
Теперь мы объединим эти две части, чтобы получить нашу окончательную битоническую последовательность
Битонический алгоритм Сортировки:
- Сначала мы создадим битоническую последовательность.
- Далее нам нужно сравнить и отсортировать соответствующие элементы обеих половин последовательности
- Теперь мы сравним и поменяем местами каждый второй элемент последовательности
- Наконец, мы сравним и поменяем местами соседние элементы последовательности
Иллюстрация алгоритма битонической сортировки:
Рассмотрим созданную выше битоническую последовательность.
Сначала мы сравним и отсортируем соответствующие элементы обеих половин последовательности
Теперь сравните и поменяйте местами каждый второй элемент последовательности
Теперь мы сделаем то же самое для соседних элементов
Исходный код на Python:
def compare_swap(a, i, j, d): if (d and a[i] > a[j]) or (d and a[i] < a[j]): a[i],[j], a[i] def merge(a, l, cnt, d): if cnt > 1: (cnt / 2) for i in range(l, l + k): compare_swap(a, i, i + k, d) merge(a, l, k, d) merge(a, l + k, k, d) def bitonic_sort(a, l, cnt, d): if cnt > 1: (cnt / 2) bitonic_sort(a, l, k, 1) bitonic_sort(a, l + k, k, 0) merge(a, l, cnt, d) def sort(a, N, u): bitonic_sort(a, 0, N, u) a = [3, 4, 1, 9, 2, 7, 5, 6](a) sort(a, n, u) print("\nSorted array is") for i in range(n): print("%d" % a[i])
Выход:
Анализ Сложности:
- Временная сложность: O(log 2 n)
- Сложность пространства: O(n log 2 n)
Преимущества:
- Память хорошо обрабатывается процессом
- Лучше всего подходит для массива параллельных процессоров
Bitonic Sort vs Merge Sort:
Битоническая сортировка | Сортировка слиянием |
Параллельный алгоритм на основе сравнения | Алгоритм “Разделяй и властвуй” |
O(n Log 2n) производится сравнение | O(nLogn) сравнения сделаны |
меньшие числа каждой пары перемещаются влево, а большие-вправо. | входной массив делится на две половины, а затем функция вызывает саму себя для этих двух половин, и в конечном итоге сортированные половины объединяются |
Временная сложность: O(log 2 n) | Временная сложность: O(nLogn) |
Надо Читать
- TimSort: Алгоритм и реализация в Python
- Сортировка по ячейкам в Python С алгоритмом и фрагментом кода
- Понимание Сортировки прядей в Python На примере
- Алгоритм сортировки оболочки и программа на Python
- Понимание Python Bubble Sort с примерами
- Сортировка вставки в Python [Программа, алгоритм, Пример]
Вывод:
Все алгоритмы сортировки имеют свои плюсы и минусы. Несмотря на то, что количество сравнений в bitonic sort python больше, он лучше всего подходит для параллельных массивов.
Однако, если у вас есть какие-либо сомнения или вопросы, дайте мне знать в разделе комментариев ниже. Я постараюсь помочь вам как можно скорее.
Счастливого Пифонирования!