Рубрики
Без рубрики

Битоническая сортировка: Алгоритм и реализация в Python

Bitonic sort в Python-это алгоритм сортировки, который работает параллельно. В этом алгоритме существует O(n2 log n) сравнений. Bitonic => Параллельный

Автор оригинала: 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
  • Последовательность в возрастающем порядке называется битонической, а убывающая часть-пустой. Аналогично, убывающая последовательность называется Бионической, а возрастающая-пустой.
  • Битоническая последовательность при вращении также является битонической.

Как преобразовать случайную последовательность в битоническую?

Рассмотрим сначала следующие элементы массива

Элементы Случайной Последовательности
Элементы Случайной Последовательности

Элементы Случайной Последовательности

Сначала мы составим пары элементов. Затем мы создадим его битоническую последовательность таким образом, чтобы одна была в порядке возрастания, а другая-в порядке убывания и так далее.

Взятие пар по два и сортировка сначала по возрастанию, а затем по убыванию
Беря пары по два и сортируя сначала по возрастанию, а затем по убыванию

Беря пары по два и сортируя сначала по возрастанию, а затем по убыванию

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

Группы из четырех элементов
Группы из четырех элементов

Группы из четырех элементов

Сортировка первой последовательности в порядке возрастания:

  • Сначала сравните элементы
  • Затем сравните соседние элементы
bitonic sort python
bitonic sort python

Сортировка первой половины в порядке возрастания

Аналогично, мы будем сортировать вторую последовательность в порядке убывания:

Сортировка второй половины в порядке убывания
Сортировка второй половины в порядке убывания

Сортировка второй половины в порядке убывания

Теперь мы объединим эти две части, чтобы получить нашу окончательную битоническую последовательность

Теперь мы объединим эти две части, чтобы получить нашу окончательную битоническую последовательность
Теперь мы объединим эти две части, чтобы получить нашу окончательную битоническую последовательность

Теперь мы объединим эти две части, чтобы получить нашу окончательную битоническую последовательность

Битонический алгоритм Сортировки:

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

Иллюстрация алгоритма битонической сортировки:

Рассмотрим созданную выше битоническую последовательность.

Сначала мы сравним и отсортируем соответствующие элементы обеих половин последовательности

bitonic sort python
bitonic sort python

Теперь сравните и поменяйте местами каждый второй элемент последовательности

сортировка с помощью битонической сортировки
сортировка с помощью битонической сортировки

Теперь мы сделаем то же самое для соседних элементов

bitonic sort python
bitonic sort python

Исходный код на 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 больше, он лучше всего подходит для параллельных массивов.

Однако, если у вас есть какие-либо сомнения или вопросы, дайте мне знать в разделе комментариев ниже. Я постараюсь помочь вам как можно скорее.

Счастливого Пифонирования!