Участник:Kiryan/Алгоритм сортировки слиянием: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
Новая страница: «== Свойства и структура алгоритмов == ''' === Общее описание алгоритма === ''' '''Сортировка слия...»
 
Строка 27: Строка 27:
=== Макроструктура алгоритма ===
=== Макроструктура алгоритма ===
'''
'''
Алгоритм сортировки слиянием реализует стратегию «разделяй и властвуй» (divide and conquer) и состоит из трех макрофаз:
# Разделения (Divide). Рекурсивная декомпозиция на подмассивы
# Базовые случаи (Conquer). Обработка тривиальных подзадач
# Слияние (Combine). Иерархическое объединение результатов
'''
'''
=== Схема реализации последовательного алгоритма ===
=== Схема реализации последовательного алгоритма ===
'''
'''

Версия от 13:09, 7 ноября 2025

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

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

Сортировка слиянием (англ. merge sort) — алгоритм сортировки, который упорядочивает списки (или другие структуры данных, доступ к элементам которых можно получать только последовательно, например — потоки) в определённом порядке. Эта сортировка — хороший пример использования принципа «разделяй и властвуй». Сначала задача разбивается на несколько подзадач меньшего размера. Затем эти задачи решаются с помощью рекурсивного вызова или непосредственно, если их размер достаточно мал. Наконец, их решения комбинируются, и получается решение исходной задачи.

Алгоритм был изобретён Джоном фон Нейманом в 1945 году

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

Пусть задано множество элементов: S = {a1, a2, ..., an} с определенным на нем отношением линейного порядка ≤. Требуется найти такую перестановку π ∈ Sn, что:∀i,j ∈ {1, 2, ..., n}: i < j ⇒ aπ(i) ≤ aπ(j)

Алгоритм реализует стратегию «разделяй и властвуй», состоящую из трех этапов:

  1. Разделение: Исходный массив рекурсивно делится на две примерно равные части до достижения базового случая (массивы длины 1)
  2. Упорядочивание: Базовые случаи (массивы длины 1) по определению являются отсортированными
  3. Слияние: Отсортированные подмассивы объединяются в один отсортированный массив

Операция разделения: SPLIT(A, p, r) = (A[p..q], A[q+1..r]), где q = ⌊(p + r)/2⌋

Операция слияния: MERGE(L, R) = S, где L и R — отсортированные массивы, S — отсортированный массив, содержащий все элементы L и R.

Вычислительное ядро алгоритма

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

Макроструктура алгоритма

Алгоритм сортировки слиянием реализует стратегию «разделяй и властвуй» (divide and conquer) и состоит из трех макрофаз:

  1. Разделения (Divide). Рекурсивная декомпозиция на подмассивы
  2. Базовые случаи (Conquer). Обработка тривиальных подзадач
  3. Слияние (Combine). Иерархическое объединение результатов

Схема реализации последовательного алгоритма

Последовательная сложность алгоритма

Информационный граф

Ресурс параллелизма алгоритма

Входные и выходные данные алгоритма

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

Программная реализация алгоритма

Особенности реализации последовательного алгоритма

Возможные способы и особенности параллельной реализации алгоритма

Результаты прогонов

Выводы для классов архитектур

Литература

Knuth D.E. The Art of Computer Programming. Volume 3: Sorting and Searching. – 2nd ed. – Addison-Wesley, 1998. – 780 p.