🗊Презентация Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла

Нажмите для полного просмотра!
Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №1Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №2Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №3Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №4Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №5Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №6Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №7Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №8Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №9Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №10Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №11Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №12Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №13Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №14Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №15Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №16Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №17Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №18Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №19Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №20Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №21Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №22Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №23Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №24Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №25Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №26Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №27Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №28Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №29Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №30Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №31Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №32Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №33Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №34Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №35Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №36Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №37Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №38Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №39Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №40Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №41Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №42Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №43Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №44Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №45Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №46Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №47Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №48

Содержание

Вы можете ознакомиться и скачать презентацию на тему Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла. Доклад-сообщение содержит 48 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

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


Слайд 1





Лекция 11 
 Улучшенные сортировки
Описание слайда:
Лекция 11 Улучшенные сортировки

Слайд 2





Сортировка включениями с убывающим шагом. Метод Шелла
Хоар, Флойд, Шелл: для алгоритмов сортировки, перемещающих в последовательности запись вправо или влево только на одну позицию, среднее время работы будет в лучшем случае пропорционально N2. 

Хотелось бы, чтобы записи перемещались «большими скачками, а не  короткими шажками». 
Д. Шелл предложил в 1959 г. метод, названный сортировкой с  убывающим шагом.
Описание слайда:
Сортировка включениями с убывающим шагом. Метод Шелла Хоар, Флойд, Шелл: для алгоритмов сортировки, перемещающих в последовательности запись вправо или влево только на одну позицию, среднее время работы будет в лучшем случае пропорционально N2. Хотелось бы, чтобы записи перемещались «большими скачками, а не короткими шажками». Д. Шелл предложил в 1959 г. метод, названный сортировкой с убывающим шагом.

Слайд 3





Пример работы сортировки Шелла
На первом проходе выделим в подпоследовательности элементы, отстоящие друг от друга на четыре позиции:
Полученные 4 последовательности отсортируем на месте независимо друг от друга методом простых включений. 
Этот процесс называется 4-сортировкой.
Описание слайда:
Пример работы сортировки Шелла На первом проходе выделим в подпоследовательности элементы, отстоящие друг от друга на четыре позиции: Полученные 4 последовательности отсортируем на месте независимо друг от друга методом простых включений. Этот процесс называется 4-сортировкой.

Слайд 4





Пример работы сортировки Шелла, продолжение
В результате 4-сортировки получим последовательность:
            _________________________________
          |                       |                        |                         |
40       14        2       38       90        51        8        63
 |__________|__________|__________|
На следующем шаге элементы, отстоящие друг от друга на две позиции, объединяются в подпоследовательности и сортируются  простыми вставками независимо друг от друга.
Этот процесс называется 2-сортировкой.
После 2-сортировки получим последовательность:
2        14        8        38       40       51       90       63
Ее сортируют методом простых вставок.
К последнему шагу элементы довольно хорошо упорядочены, 
поэтому требуется мало перемещений. 
Данный процесс называется 1-сортировкой.
Описание слайда:
Пример работы сортировки Шелла, продолжение В результате 4-сортировки получим последовательность: _________________________________ | | | | 40 14 2 38 90 51 8 63 |__________|__________|__________| На следующем шаге элементы, отстоящие друг от друга на две позиции, объединяются в подпоследовательности и сортируются простыми вставками независимо друг от друга. Этот процесс называется 2-сортировкой. После 2-сортировки получим последовательность: 2 14 8 38 40 51 90 63 Ее сортируют методом простых вставок. К последнему шагу элементы довольно хорошо упорядочены, поэтому требуется мало перемещений. Данный процесс называется 1-сортировкой.

Слайд 5





Выбор шага в сортировке Шелла
В сортировке методом Шелла можно использовать любую убывающую последовательность шагов 
			ht,  ht-1, ...,  h1
Чтобы выбрать некоторую хорошую последовательность шагов сортировки, нужно проанализировать время работы как функцию от этих шагов.
До сих пор не удалось найти наилучшую возможную последовательность шагов ht, ht-1, ..., h1 для больших N. 
Выявлен примечательный факт, что элементы последовательностей приращений не должны быть кратны друг другу. 
Это позволяет на каждом проходе сортировки перемешивать цепочки,  которые ранее никак не взаимодействовали. 
Желательно, чтобы взаимодействие между разными цепочками  происходило как можно чаще.
Кнут:
..., 121, 40, 13,  4, 1,  где hk+1= 3  hk + 1,   h1 = 1 
..., 31, 15,  7,  3,  1,    где hk+1 = 2 hk + 1,   h1 = 1
Описание слайда:
Выбор шага в сортировке Шелла В сортировке методом Шелла можно использовать любую убывающую последовательность шагов ht, ht-1, ..., h1 Чтобы выбрать некоторую хорошую последовательность шагов сортировки, нужно проанализировать время работы как функцию от этих шагов. До сих пор не удалось найти наилучшую возможную последовательность шагов ht, ht-1, ..., h1 для больших N. Выявлен примечательный факт, что элементы последовательностей приращений не должны быть кратны друг другу. Это позволяет на каждом проходе сортировки перемешивать цепочки, которые ранее никак не взаимодействовали. Желательно, чтобы взаимодействие между разными цепочками происходило как можно чаще. Кнут: ..., 121, 40, 13, 4, 1, где hk+1= 3  hk + 1, h1 = 1 ..., 31, 15, 7, 3, 1, где hk+1 = 2 hk + 1, h1 = 1

Слайд 6





Анализ эффективности метода
Утверждение
Если k-отсортированная последовательность i-сортируется (k > i), то она остается k-отсортированной.
→ C каждым следующим шагом сортировки с убывающим приращением количество отсортированных элементов в последовательности возрастает.
Для последовательности шагов 2k + 1, ..., 9, 5, 3, 1 
количество пересылок пропорционально	    N1.27, 
для последовательности 2k – 1, ..., 15, 7, 3, 1 — 	    N1.26, 
для последовательности (3k – 1)/2, ..., 40, 13, 4, 1 — N1.25
		Общая оценка: величина порядка  N3/2
Описание слайда:
Анализ эффективности метода Утверждение Если k-отсортированная последовательность i-сортируется (k > i), то она остается k-отсортированной. → C каждым следующим шагом сортировки с убывающим приращением количество отсортированных элементов в последовательности возрастает. Для последовательности шагов 2k + 1, ..., 9, 5, 3, 1 количество пересылок пропорционально N1.27, для последовательности 2k – 1, ..., 15, 7, 3, 1 — N1.26, для последовательности (3k – 1)/2, ..., 40, 13, 4, 1 — N1.25 Общая оценка: величина порядка N3/2

Слайд 7





Алгоритм 
процедура Вставка(b, h)
 //  b — номер первого элемента последовательности
  //  h – величина шага
начало процедуры                  
  // Пусть i – номер первого элемента в несортированной части массива
    i := b + h;
  пока i  N выполнять         
     x:= A[i]; 			    
     j := i – h;
     пока j  b и A[j]>x выполнять
     // Все элементы из отсортированной части, большие
             // x, сдвинуть на величину шага h вправо,
        A[j+h] := A[j];	    
	 j := j – h; 		    
     конец пока	 
     // Элемент x поставить на свое место по порядку:
     A[j+h] := x;		    
     i := i + h;			    
  конец пока
конец процедуры
Описание слайда:
Алгоритм процедура Вставка(b, h) // b — номер первого элемента последовательности // h – величина шага начало процедуры // Пусть i – номер первого элемента в несортированной части массива i := b + h; пока i  N выполнять x:= A[i]; j := i – h; пока j  b и A[j]>x выполнять // Все элементы из отсортированной части, большие // x, сдвинуть на величину шага h вправо, A[j+h] := A[j]; j := j – h; конец пока // Элемент x поставить на свое место по порядку: A[j+h] := x; i := i + h; конец пока конец процедуры

Слайд 8





Алгоритм, продолжение
Основная программа:
// Выбор начального шага:
h := 1; 
пока h < N/3 выполнять  
   h := 3*h + 1;
конец пока 
// Сортировка:
пока h  1 выполнять
   цикл по i от 1 до h с шагом 1 выполнять
      Вставка (i, h);
   конец цикла    
   h := (h – 1) / 3;
конец пока
Описание слайда:
Алгоритм, продолжение Основная программа: // Выбор начального шага: h := 1; пока h < N/3 выполнять h := 3*h + 1; конец пока // Сортировка: пока h  1 выполнять цикл по i от 1 до h с шагом 1 выполнять Вставка (i, h); конец цикла h := (h – 1) / 3; конец пока

Слайд 9





Пример работы сортировки Шелла для массива:
5  12  4  21 7  2  13  16  1  10  3
Описание слайда:
Пример работы сортировки Шелла для массива: 5 12 4 21 7 2 13 16 1 10 3

Слайд 10





Пирамидальная сортировка
При сортировке методом простого выбора на каждом шаге выполняется линейный поиск минимального элемента. Линейная сложность этого поиска делает сложность всей сортировки квадратичной.
Возможно ли найти минимальный элемент за время лучшее линейного? 
Оказывается, что это возможно, если использовать на каждом следующем шаге информацию о взаимных отношениях элементов, накопленную на предыдущих шагах. 
Идея бинарного выбора может быть эффективно применена, если организовать входные данные в виде так называемой пирамиды (или сбалансированного бинарного дерева поиска) и поддерживать их в этом виде в процессе сортировки. 
Метод сортировки с использованием такой пирамиды был предложен Р. У. Флойдом в 1964 г. под названием «Heap sort» — пирамидальной сортировки или  сортировки кучей.
Описание слайда:
Пирамидальная сортировка При сортировке методом простого выбора на каждом шаге выполняется линейный поиск минимального элемента. Линейная сложность этого поиска делает сложность всей сортировки квадратичной. Возможно ли найти минимальный элемент за время лучшее линейного? Оказывается, что это возможно, если использовать на каждом следующем шаге информацию о взаимных отношениях элементов, накопленную на предыдущих шагах. Идея бинарного выбора может быть эффективно применена, если организовать входные данные в виде так называемой пирамиды (или сбалансированного бинарного дерева поиска) и поддерживать их в этом виде в процессе сортировки. Метод сортировки с использованием такой пирамиды был предложен Р. У. Флойдом в 1964 г. под названием «Heap sort» — пирамидальной сортировки или сортировки кучей.

Слайд 11


Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №11
Описание слайда:

Слайд 12





Свойство пирамиды
Пусть дана последовательность h1, ..., hn. 
Элемент hi образует пирамиду в этой последовательности,
если выполнены следующие условия:
 если 2  i ≤ n, то hi ≥ h2i и h2i образует пирамиду;
 если 2  i + 1 ≤ n, то hi ≥ h2i+1 и h2i+1 образует пирамиду.
Элементы hn/2+1, ..., hn  всегда образуют тривиальные пирамиды, поскольку для них приведенные условия имеют ложные посылки.
Если элемент h1 образует пирамиду, то и каждый элемент последовательности образует пирамиду. 
В этом случае будем говорить, что вся последовательность является полной пирамидой.
Описание слайда:
Свойство пирамиды Пусть дана последовательность h1, ..., hn. Элемент hi образует пирамиду в этой последовательности, если выполнены следующие условия: если 2  i ≤ n, то hi ≥ h2i и h2i образует пирамиду; если 2  i + 1 ≤ n, то hi ≥ h2i+1 и h2i+1 образует пирамиду. Элементы hn/2+1, ..., hn всегда образуют тривиальные пирамиды, поскольку для них приведенные условия имеют ложные посылки. Если элемент h1 образует пирамиду, то и каждый элемент последовательности образует пирамиду. В этом случае будем говорить, что вся последовательность является полной пирамидой.

Слайд 13





Полная пирамида при n=15
Полная пирамида может быть изображена в виде корневого бинарного дерева, в котором элементы h2i и h2i+1 являются сыновьями элемента hi. 
Элемент в любом узле численно не меньше всех своих потомков, а вершина полной пирамиды h1 содержит максимальный элемент всей последовательности.
Описание слайда:
Полная пирамида при n=15 Полная пирамида может быть изображена в виде корневого бинарного дерева, в котором элементы h2i и h2i+1 являются сыновьями элемента hi. Элемент в любом узле численно не меньше всех своих потомков, а вершина полной пирамиды h1 содержит максимальный элемент всей последовательности.

Слайд 14





Пример полной пирамиды при n=12
Если число элементов в полной пирамиде не равно 2k – 1, самый нижний уровень дерева будет неполным: недостающих сыновей можно достроить, добавив в пирамиду несколько заключительных «минимальных» элементов «0», не нарушающих условия пирамиды.
Последовательность, упорядоченная по убыванию, является полной пирамидой.
Например, последовательность из 12 элементов 
		12, 11, 7, 8, 10, 6, 3, 2, 1, 5, 9, 4 
является полной пирамидой с вершиной 12.
Описание слайда:
Пример полной пирамиды при n=12 Если число элементов в полной пирамиде не равно 2k – 1, самый нижний уровень дерева будет неполным: недостающих сыновей можно достроить, добавив в пирамиду несколько заключительных «минимальных» элементов «0», не нарушающих условия пирамиды. Последовательность, упорядоченная по убыванию, является полной пирамидой. Например, последовательность из 12 элементов 12, 11, 7, 8, 10, 6, 3, 2, 1, 5, 9, 4 является полной пирамидой с вершиной 12.

Слайд 15





Идея метода пирамидальной сортировки
Подготовка к сортировке: входная неупорядоченная последовательность перестраивается в пирамиду.
Сортировка: входная и готовая последовательности хранятся в одном массиве, причем готовая последовательность формируется в хвосте массива, а входная остается в начале массива.
Основой реализации метода является следующая процедура просеивания. 
Пусть в последовательности h1, ..., hn элементы hi+1, ..., hn  уже образуют пирамиды. 
Требуется перестроить последовательность так, чтобы пирамиду образовывал элемент hi.
На каждой итерации цикла наибольший из трех элементов hi, h2i и h2i+1 путем обмена оказывается в корне текущего поддерева, что обеспечивает истинность условий пирамиды в этом корне. 
Если при этом изменяется корень левого или правого поддерева, то просеивание продолжается для него.
Описание слайда:
Идея метода пирамидальной сортировки Подготовка к сортировке: входная неупорядоченная последовательность перестраивается в пирамиду. Сортировка: входная и готовая последовательности хранятся в одном массиве, причем готовая последовательность формируется в хвосте массива, а входная остается в начале массива. Основой реализации метода является следующая процедура просеивания. Пусть в последовательности h1, ..., hn элементы hi+1, ..., hn уже образуют пирамиды. Требуется перестроить последовательность так, чтобы пирамиду образовывал элемент hi. На каждой итерации цикла наибольший из трех элементов hi, h2i и h2i+1 путем обмена оказывается в корне текущего поддерева, что обеспечивает истинность условий пирамиды в этом корне. Если при этом изменяется корень левого или правого поддерева, то просеивание продолжается для него.

Слайд 16





Построение пирамиды
                       a1   a2    a3  a4   a5   a6   a7   a8   a9   a10
Шаг 1, i=5:    52   81   42   23   11   76   91   63   37   20
Шаг 2, i=4 :   52   81   42   23   20   76   91   63   37   11
Шаг 3, i=3 :   52   81   42   63   20   76   91   23   37   11
Шаг 4, i=2 :   52   81   91   63   20   76   42   23   37   11
Шаг 5, i=1 :   52   81   91   63   20   76   42   23   37   11
	Выход:      91   81   76   63   20   52   42   23   37   11
Описание слайда:
Построение пирамиды a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 Шаг 1, i=5: 52 81 42 23 11 76 91 63 37 20 Шаг 2, i=4 : 52 81 42 23 20 76 91 63 37 11 Шаг 3, i=3 : 52 81 42 63 20 76 91 23 37 11 Шаг 4, i=2 : 52 81 91 63 20 76 42 23 37 11 Шаг 5, i=1 : 52 81 91 63 20 76 42 23 37 11 Выход: 91 81 76 63 20 52 42 23 37 11

Слайд 17





Сортировка
На каждом шаге сортировки первый элемент массива, т. е. максимальный элемент пирамиды, переносится в начало готовой последовательности путем обмена с последним элементом пирамиды, занимающим его место. 
Затем остаток входной последовательности вновь перестраивается в пирамиду, обеспечивая корректность следующего шага. 
В начале i-го шага элементы a1, .., ai, по предположению, хранят входную последовательность как пирамиду, а ai+1, .., aN  – упорядоченную по возрастанию готовую последовательность (изначально пустую).
На i-м шаге текущий максимальный элемент пирамиды а1 обменивается  с аi, становясь началом новой готовой последовательности, где он будет новым минимальным элементом.  Входная последовательность (пирамида) при этом претерпевает два изменения:
— она теряет последний элемент, что не нарушает условий пирамиды ни в одном узле;
— ее первый элемент становится произвольным, что может нарушать условие пирамиды только в первом узле.
Описание слайда:
Сортировка На каждом шаге сортировки первый элемент массива, т. е. максимальный элемент пирамиды, переносится в начало готовой последовательности путем обмена с последним элементом пирамиды, занимающим его место. Затем остаток входной последовательности вновь перестраивается в пирамиду, обеспечивая корректность следующего шага. В начале i-го шага элементы a1, .., ai, по предположению, хранят входную последовательность как пирамиду, а ai+1, .., aN – упорядоченную по возрастанию готовую последовательность (изначально пустую). На i-м шаге текущий максимальный элемент пирамиды а1 обменивается с аi, становясь началом новой готовой последовательности, где он будет новым минимальным элементом. Входная последовательность (пирамида) при этом претерпевает два изменения: — она теряет последний элемент, что не нарушает условий пирамиды ни в одном узле; — ее первый элемент становится произвольным, что может нарушать условие пирамиды только в первом узле.

Слайд 18





Сортировка, продолжение
Таким образом, для новой входной последовательности 
			a1, ..., ai-1 
условия пирамиды выполнены для всех элементов, кроме первого. 
Применение процедуры просеивания к a1 восстанавливает полную пирамиду в a1, ..., ai-1, что обеспечивает условия осуществимости следующего шага.
Описание слайда:
Сортировка, продолжение Таким образом, для новой входной последовательности a1, ..., ai-1 условия пирамиды выполнены для всех элементов, кроме первого. Применение процедуры просеивания к a1 восстанавливает полную пирамиду в a1, ..., ai-1, что обеспечивает условия осуществимости следующего шага.

Слайд 19


Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №19
Описание слайда:

Слайд 20





Алгоритм
процедура Просеивание (i, n) 	
	// i – номер элемента, который нужно просеять
         	 // n – номер последнего элемента массива
начало процедуры
 	пока 2*i <= n 
   	      r := 2*i;				
      		если (r+1  n) и (A[r] < A[r+1])
		то r := r + 1;			 	
          	// i-тый элемент массива ставится на то место,
          		// где он удовлетворяет свойству пирамиды:
	          	// A[i]  max(A[2*i], A[2*i + 1])
         	если A[i] < A[r] 			
         	то начало 
               	Обмен (i, r); 			 
               	i := r;
            	    конец
		иначе выход из процедуры;
      	конец пока
конец процедуры
Описание слайда:
Алгоритм процедура Просеивание (i, n) // i – номер элемента, который нужно просеять // n – номер последнего элемента массива начало процедуры пока 2*i <= n r := 2*i; если (r+1  n) и (A[r] < A[r+1]) то r := r + 1; // i-тый элемент массива ставится на то место, // где он удовлетворяет свойству пирамиды: // A[i]  max(A[2*i], A[2*i + 1]) если A[i] < A[r] то начало Обмен (i, r); i := r; конец иначе выход из процедуры; конец пока конец процедуры

Слайд 21





Алгоритм, продолжение
Основная программа:
Шаг 1. Построение пирамиды:
i := N / 2;
пока i  1 выполнять
		Просеивание (i, N);
  		i := i – 1;
конец пока
Шаг 2. Сортировка на пирамиде:
i := N;
пока i > 1 выполнять
   Обмен (1, i);
   i := i – 1;
   Просеивание (1, i);
конец пока
конец основной программы
Описание слайда:
Алгоритм, продолжение Основная программа: Шаг 1. Построение пирамиды: i := N / 2; пока i  1 выполнять Просеивание (i, N); i := i – 1; конец пока Шаг 2. Сортировка на пирамиде: i := N; пока i > 1 выполнять Обмен (1, i); i := i – 1; Просеивание (1, i); конец пока конец основной программы

Слайд 22





Анализ
Число итераций цикла в процедуре просеивания не превосходит высоты пирамиды. 
Высота полного бинарного дерева из N узлов, каковым является пирамида, равна [log2 N]. 
Просеивание имеет логарифмическую сложность.
Итоговая сложность пирамидальной сортировки ~N  log2 N.
Наилучший случай – обратное упорядочение входной последовательности.
Описание слайда:
Анализ Число итераций цикла в процедуре просеивания не превосходит высоты пирамиды. Высота полного бинарного дерева из N узлов, каковым является пирамида, равна [log2 N]. Просеивание имеет логарифмическую сложность. Итоговая сложность пирамидальной сортировки ~N  log2 N. Наилучший случай – обратное упорядочение входной последовательности.

Слайд 23





Построение пирамиды
Описание слайда:
Построение пирамиды

Слайд 24





Сортировка на пирамиде (продолжение примера)
Описание слайда:
Сортировка на пирамиде (продолжение примера)

Слайд 25





Сортировка на пирамиде (продолжение примера)
Описание слайда:
Сортировка на пирамиде (продолжение примера)

Слайд 26





Сортировка на пирамиде (продолжение примера)
Описание слайда:
Сортировка на пирамиде (продолжение примера)

Слайд 27





родился 11 января 1934, 
Коломбо, Цейлон, 
Британская империя, 
ныне Шри Ланка) — английский учёный, специализирующийся в области информатики и 
вычислительной техники. Наиболее известен как разработчик алгоритма 
«быстрой сортировки» (1960), на сегодняшний день являющегося наиболее популярным алгоритмом сортировки
Сэр Чарльз Э́нтони Ри́чард Хо́ар 
(англ. Charles Antony Richard Hoare 
или Tony Hoare или C.A.R. Hoare)
Описание слайда:
родился 11 января 1934,  Коломбо, Цейлон,  Британская империя, ныне Шри Ланка) — английский учёный, специализирующийся в области информатики и  вычислительной техники. Наиболее известен как разработчик алгоритма  «быстрой сортировки» (1960), на сегодняшний день являющегося наиболее популярным алгоритмом сортировки Сэр Чарльз Э́нтони Ри́чард Хо́ар  (англ. Charles Antony Richard Hoare  или Tony Hoare или C.A.R. Hoare)

Слайд 28





Другие известные результаты его работы: 
Язык Z спецификаций и параллельная модель взаимодействия последовательных процессов (CSP, Communicating Sequential Process). 
В числе его заслуг — разработка логики Хоара (англ. Hoare Logic), научной основы для конструирования корректных программ, используемой для определения и разработки языков программирования. 
Хоар создал ряд трудов по созданию спецификаций, проектированию, реализации и сопровождению программ, показывающих важность научных результатов для увеличения производительности компьютеров и повышения надежности программного обеспечения.
Описание слайда:
Другие известные результаты его работы: Язык Z спецификаций и параллельная модель взаимодействия последовательных процессов (CSP, Communicating Sequential Process). В числе его заслуг — разработка логики Хоара (англ. Hoare Logic), научной основы для конструирования корректных программ, используемой для определения и разработки языков программирования. Хоар создал ряд трудов по созданию спецификаций, проектированию, реализации и сопровождению программ, показывающих важность научных результатов для увеличения производительности компьютеров и повышения надежности программного обеспечения.

Слайд 29





Биография
Родился в Коломбо в Шри-Ланке. Получил степень бакалавра по классическим языкам в Оксфордском университете в 1956 году. 
Проходил службу в Королевском военно-морском флоте Великобритании в 1956—1958 годы. 
Изучив русский язык, в 1959 году Хоар обучался в Московском университете компьютерному переводу, а также теории вероятностей в школе Колмогорова. 
В 1960, из-за политического кризиса, связанного с уничтожением разведывательного самолета У-2, он покинул Советский Союз и начал работать в небольшой компании по производству компьютеров Elliott Brothers, где занимался реализацией языка ALGOL60. Там же он начал заниматься разработкой алгоритмов.
В 1968 году стал профессором информатики и вычислительной техники в Королевском университете Белфаста (англ. Queen's University, Belfast).
Описание слайда:
Биография Родился в Коломбо в Шри-Ланке. Получил степень бакалавра по классическим языкам в Оксфордском университете в 1956 году. Проходил службу в Королевском военно-морском флоте Великобритании в 1956—1958 годы. Изучив русский язык, в 1959 году Хоар обучался в Московском университете компьютерному переводу, а также теории вероятностей в школе Колмогорова. В 1960, из-за политического кризиса, связанного с уничтожением разведывательного самолета У-2, он покинул Советский Союз и начал работать в небольшой компании по производству компьютеров Elliott Brothers, где занимался реализацией языка ALGOL60. Там же он начал заниматься разработкой алгоритмов. В 1968 году стал профессором информатики и вычислительной техники в Королевском университете Белфаста (англ. Queen's University, Belfast).

Слайд 30





Биография, продолжение
В 1977 году вернулся в Оксфорд, как профессор вычислительной техники, чтобы возглавить исследовательскую группу Programming Research Group, в задачу которой входило укрепление связей промышленных, академических и государственных структур, работающих в сфере информационных технологий. Тематика его исследований в Оксфорде: корректность программных спецификаций, проектирование и разработка критичных и некритичных систем.
В 1999 году вышел на пенсию в звании почетного профессора и перешёл на должность ведущего исследователя в Microsoft Research в Кембридже, где и работает на момент 2011 года.
В 1980 году стал лауреатом Премии Тьюринга (премия ACM) за «его выдающиеся достижения в определении и дизайне языков программирования».
В 1990 году награждён медалью «Пионер компьютерной техники».
В 2000 году был удостоен рыцарского титула за заслуги в области образования и компьютерных наук, Премии Киото.
Описание слайда:
Биография, продолжение В 1977 году вернулся в Оксфорд, как профессор вычислительной техники, чтобы возглавить исследовательскую группу Programming Research Group, в задачу которой входило укрепление связей промышленных, академических и государственных структур, работающих в сфере информационных технологий. Тематика его исследований в Оксфорде: корректность программных спецификаций, проектирование и разработка критичных и некритичных систем. В 1999 году вышел на пенсию в звании почетного профессора и перешёл на должность ведущего исследователя в Microsoft Research в Кембридже, где и работает на момент 2011 года. В 1980 году стал лауреатом Премии Тьюринга (премия ACM) за «его выдающиеся достижения в определении и дизайне языков программирования». В 1990 году награждён медалью «Пионер компьютерной техники». В 2000 году был удостоен рыцарского титула за заслуги в области образования и компьютерных наук, Премии Киото.

Слайд 31





Хоар в Академгородке (PSI 2003)
Описание слайда:
Хоар в Академгородке (PSI 2003)

Слайд 32





Среди участников конференции
Описание слайда:
Среди участников конференции

Слайд 33





Сортировка с разделением. 
Быстрая сортировка Ч. Э. Р. Хоар 
Это  метод сортировки, при котором обмениваются местами пары несоседних элементов, а задача сортировки последовательности рекурсивно сводится к задачам сортировки ее меньших частей.
Допустим сначала, что мы уже переупорядочили некоторым образом элементы входной последовательности, после чего оказалось возможным разделить ее на две непустые части по границе некоторого индекса т: 
		левую (индексы 1...т) и 
		правую (индексы т+1...N); 
	причем значения всех элементов левой части не превосходят значений всех элементов правой части:
  i, j:   1   i   m  и  m <  j   N  выполнено:   аi  aj.          (*)
Индекс т назовем медианой.
Описание слайда:
Сортировка с разделением. Быстрая сортировка Ч. Э. Р. Хоар Это метод сортировки, при котором обмениваются местами пары несоседних элементов, а задача сортировки последовательности рекурсивно сводится к задачам сортировки ее меньших частей. Допустим сначала, что мы уже переупорядочили некоторым образом элементы входной последовательности, после чего оказалось возможным разделить ее на две непустые части по границе некоторого индекса т: левую (индексы 1...т) и правую (индексы т+1...N); причем значения всех элементов левой части не превосходят значений всех элементов правой части:  i, j: 1  i  m и m < j  N выполнено: аi  aj. (*) Индекс т назовем медианой.

Слайд 34





Сортировка разделением, идея алгоритма
Отсортируем любым методом обмена отдельно левую часть, не затрагивая элементов правой части, а затем отдельно правую, не трогая левой. 
При этом обмениваться могут только пары элементов, находящиеся в одной части, поэтому никакой обмен не нарушает свойство (*). 
Значит, оно будет верно и для результирующей последовательности, которая в силу этого оказывается упорядоченной в целом.
 СортировкаРазделением (l, r)
		/* l, r –  границы сортируемой подпоследовательности */
			/* Разделение */
	привести подпоследовательность аl,…, аr к условию (*)
	и определить медиану m;
			/* Рекурсивный спуск */
	если l < m то     // части длины 0 и 1 не сортируем
		СортировкаРазделением (l, m);
	если m + 1 < r   то  // части длины 0 и 1 не сортируем
		СортировкаРазделением (m + 1, r); 
конец
Описание слайда:
Сортировка разделением, идея алгоритма Отсортируем любым методом обмена отдельно левую часть, не затрагивая элементов правой части, а затем отдельно правую, не трогая левой. При этом обмениваться могут только пары элементов, находящиеся в одной части, поэтому никакой обмен не нарушает свойство (*). Значит, оно будет верно и для результирующей последовательности, которая в силу этого оказывается упорядоченной в целом. СортировкаРазделением (l, r) /* l, r – границы сортируемой подпоследовательности */ /* Разделение */ привести подпоследовательность аl,…, аr к условию (*) и определить медиану m; /* Рекурсивный спуск */ если l < m то // части длины 0 и 1 не сортируем СортировкаРазделением (l, m); если m + 1 < r то // части длины 0 и 1 не сортируем СортировкаРазделением (m + 1, r); конец

Слайд 35





Получается, что в процессе дробления исходной задачи на подзадачи мы приходим к тривиальным подзадачам: сортировке последовательностей длины 0 и 1. 
Получается, что в процессе дробления исходной задачи на подзадачи мы приходим к тривиальным подзадачам: сортировке последовательностей длины 0 и 1. 
Не приходится ничего делать и для слияния решений подзадач в решение исходной задачи во время возврата из рекурсии: упорядоченные последовательности образуются сами собой по мере упорядочения их частей.
Где же тогда фактически выполняется сортировка?
- На фазе разделения, иллюстрируя, как хорошая подготовка условий для решения зачастую уже и дает решение! 
В качестве критерия разделения нам понадобится так называемый пилотируемый элемент  х. 
В классической версии алгоритма в качестве x выбирается произвольный элемент сортируемой последовательности: первый, последний, расположенный в середине или иначе. 
Влияние его выбора на эффективность алгоритма мы обсудим ниже.
Описание слайда:
Получается, что в процессе дробления исходной задачи на подзадачи мы приходим к тривиальным подзадачам: сортировке последовательностей длины 0 и 1. Получается, что в процессе дробления исходной задачи на подзадачи мы приходим к тривиальным подзадачам: сортировке последовательностей длины 0 и 1. Не приходится ничего делать и для слияния решений подзадач в решение исходной задачи во время возврата из рекурсии: упорядоченные последовательности образуются сами собой по мере упорядочения их частей. Где же тогда фактически выполняется сортировка? - На фазе разделения, иллюстрируя, как хорошая подготовка условий для решения зачастую уже и дает решение! В качестве критерия разделения нам понадобится так называемый пилотируемый элемент х. В классической версии алгоритма в качестве x выбирается произвольный элемент сортируемой последовательности: первый, последний, расположенный в середине или иначе. Влияние его выбора на эффективность алгоритма мы обсудим ниже.

Слайд 36





В процессе разделения мы соберем в левой части последовательности все элементы аi   х, а в правой — все элементы aj    x. 
В процессе разделения мы соберем в левой части последовательности все элементы аi   х, а в правой — все элементы aj    x. 
Условие (*) при этом будет выполнено даже при возможном наличии одинаковых элементов x в обеих частях.
Введем два бегущих индекса-указателя i и j, которые делят разделяемую подпоследовательность на три участка: 
левый (al ... ai-1), 
правый (aj+1 ... ar),  
средний (ai ... aj). 
В левом и правом участках будут накапливаться элементы левой и правой частей, подлежащих затем рекурсивной сортировке, а в среднем находятся остальные, еще не распределенные элементы.
Описание слайда:
В процессе разделения мы соберем в левой части последовательности все элементы аi  х, а в правой — все элементы aj  x. В процессе разделения мы соберем в левой части последовательности все элементы аi  х, а в правой — все элементы aj  x. Условие (*) при этом будет выполнено даже при возможном наличии одинаковых элементов x в обеих частях. Введем два бегущих индекса-указателя i и j, которые делят разделяемую подпоследовательность на три участка: левый (al ... ai-1), правый (aj+1 ... ar), средний (ai ... aj). В левом и правом участках будут накапливаться элементы левой и правой частей, подлежащих затем рекурсивной сортировке, а в среднем находятся остальные, еще не распределенные элементы.

Слайд 37





Процесс разделения
i = l;  j = r;
цикл 
   пока ai < х цикл  /* проверка i < r не нужна: х где-то есть */ 
   	i := i + 1; /*  в конце ai   х */
   конец цикла; 
   пока х < aj цикл   /* проверка j > i не нужна: х есть */
	j := j – 1;    /* в конце aj   х */
   конец цикла; 
   если i ≤ j  то  /* если i = j, a[i = j] = x, нужен сдвиг индексов 
		   	для выхода из цикла */ 
	обменять ai и aj ; /*  теперь ai  х   aj  */ 
	i := i + 1; /*на случай ai = х : добавить в левую часть */
	j := j – 1; /* на случай aj = х : добавить в правую часть */ 
пока i < j;
Описание слайда:
Процесс разделения i = l; j = r; цикл пока ai < х цикл /* проверка i < r не нужна: х где-то есть */ i := i + 1; /* в конце ai  х */ конец цикла; пока х < aj цикл /* проверка j > i не нужна: х есть */ j := j – 1; /* в конце aj  х */ конец цикла; если i ≤ j то /* если i = j, a[i = j] = x, нужен сдвиг индексов для выхода из цикла */ обменять ai и aj ; /* теперь ai  х  aj */ i := i + 1; /*на случай ai = х : добавить в левую часть */ j := j – 1; /* на случай aj = х : добавить в правую часть */ пока i < j;

Слайд 38





Комментарии
Циклы по встречным индексам переносят из средней части в левую или правую элементы, строго меньшие или большие х, которые могут быть добавлены в эти части без перестановки. 
После их выполнения процесс разделения либо заканчивается (если i   j), либо пара ai  и  aj образует инверсию. 
В последнем случае их следует обменять и включить в левую и правую части.
Вот здесь и происходят упорядочивающие обмены с уменьшением числа инверсий в последовательности!
Описание слайда:
Комментарии Циклы по встречным индексам переносят из средней части в левую или правую элементы, строго меньшие или большие х, которые могут быть добавлены в эти части без перестановки. После их выполнения процесс разделения либо заканчивается (если i  j), либо пара ai и aj образует инверсию. В последнем случае их следует обменять и включить в левую и правую части. Вот здесь и происходят упорядочивающие обмены с уменьшением числа инверсий в последовательности!

Слайд 39





Проверка того, что бегущие индексы не выходят за границы l...r, строго говоря, необходима, но фактически не нужна: 
Проверка того, что бегущие индексы не выходят за границы l...r, строго говоря, необходима, но фактически не нужна: 
на первом проходе выход за границы невозможен, так как в массиве есть сам элемент х и оба цикла остановятся на нем. 
В конце же первого прохода происходит обмен элементов и обе части становятся не пусты, что гарантирует остановку циклов по встречным индексам в пределах интервала l...r и на следующих проходах.
Описание слайда:
Проверка того, что бегущие индексы не выходят за границы l...r, строго говоря, необходима, но фактически не нужна: Проверка того, что бегущие индексы не выходят за границы l...r, строго говоря, необходима, но фактически не нужна: на первом проходе выход за границы невозможен, так как в массиве есть сам элемент х и оба цикла остановятся на нем. В конце же первого прохода происходит обмен элементов и обе части становятся не пусты, что гарантирует остановку циклов по встречным индексам в пределах интервала l...r и на следующих проходах.

Слайд 40





Цикл оканчивается при i  j.
Цикл оканчивается при i  j.
Однако нам еще надо определить медиану. 
Определенные границы левой части – l...i – 1, 
правой – j + 1...r,  однако интервал j + 1...i – 1 может быть не
вырожден и заполнен элементами х (почему?). 
Эти элементы останутся на своих местах в процессе
сортировки (почему?), поэтому их можно исключить из
левой и правой частей.
Окончательно границами левой части можно считать l...j,  
а  правой –  i...r.
Описание слайда:
Цикл оканчивается при i  j. Цикл оканчивается при i  j. Однако нам еще надо определить медиану. Определенные границы левой части – l...i – 1, правой – j + 1...r, однако интервал j + 1...i – 1 может быть не вырожден и заполнен элементами х (почему?). Эти элементы останутся на своих местах в процессе сортировки (почему?), поэтому их можно исключить из левой и правой частей. Окончательно границами левой части можно считать l...j, а правой – i...r.

Слайд 41





Процесс разделения, пример
 Разделение:  40    51    8    38    89    1    15   63
    Начало:   i                x                     j
Первый проход:i                                 j             Сближение
                                                                                          Обмен
	       15    51    8    38    89    1    40    63 
Второй проход:      i                      j                    Сближение
                                                                                              Обмен
		       i                     j
             15     1    8    38    89    51   40    63
Третий проход:           i          j                                   Сближение                     ij                                 Обмен
             15    1     8    38    89    51   40    63
Четвертый проход:        j          i		            Сближение
Описание слайда:
Процесс разделения, пример Разделение: 40 51 8 38 89 1 15 63 Начало: i x j Первый проход:i j Сближение Обмен 15 51 8 38 89 1 40 63 Второй проход: i j Сближение Обмен i j 15 1 8 38 89 51 40 63 Третий проход: i j Сближение ij Обмен 15 1 8 38 89 51 40 63 Четвертый проход: j i Сближение

Слайд 42


Улучшенные сортировки. Сортировка включениями с убывающим шагом. Метод Шелла, слайд №42
Описание слайда:

Слайд 43





Анализ
Процессу разбиения подвергается весь массив, следовательно  выполняется N сравнений. 
Число обменов? 
Пусть после разделения х будет  занимать в массиве позицию k. 

Число требующихся обменов равно числу элементов в левой части массива (k - 1), умноженному на вероятность того, что элемент нужно обменять. 
Элемент обменивается, если он не меньше, чем х.
Вероятность этого равна (N - (k - 1))/N.
Описание слайда:
Анализ Процессу разбиения подвергается весь массив, следовательно выполняется N сравнений. Число обменов? Пусть после разделения х будет занимать в массиве позицию k. Число требующихся обменов равно числу элементов в левой части массива (k - 1), умноженному на вероятность того, что элемент нужно обменять. Элемент обменивается, если он не меньше, чем х. Вероятность этого равна (N - (k - 1))/N.

Слайд 44





Анализ, продолжение
Просуммируем всевозможные варианты выбора медианы и разделим эту сумму на N, в результате получим ожидаемое число обменов:
Ожидаемое число обменов равно приблизительно N/6.
В лучшем случае каждое разделение разбивает массив на две равные части, а число проходов, необходимых для сортировки, равно log2 N.  
Тогда общее число сравнений равно N log2 N.
Описание слайда:
Анализ, продолжение Просуммируем всевозможные варианты выбора медианы и разделим эту сумму на N, в результате получим ожидаемое число обменов: Ожидаемое число обменов равно приблизительно N/6. В лучшем случае каждое разделение разбивает массив на две равные части, а число проходов, необходимых для сортировки, равно log2 N. Тогда общее число сравнений равно N log2 N.

Слайд 45





Анализ, продолжение
Однако в худшем случае сортировка становится  «медленной».
Например, когда в качестве пилотируемого элемента всегда выбирается наибольшее значение. Тогда в результате разбиения в левой части оказывается N - 1 элемент,  т. е. массив разбивается на подмассивы из одного элемента и из N - 1 элемента. 
В этом случае вместо log2 N разбиений необходимо сделать ~ N разбиений. 
В результате в худшем случае оценка оказывается ~ N2,  что гораздо хуже пирамидальной сортировки.
Описание слайда:
Анализ, продолжение Однако в худшем случае сортировка становится «медленной». Например, когда в качестве пилотируемого элемента всегда выбирается наибольшее значение. Тогда в результате разбиения в левой части оказывается N - 1 элемент, т. е. массив разбивается на подмассивы из одного элемента и из N - 1 элемента. В этом случае вместо log2 N разбиений необходимо сделать ~ N разбиений. В результате в худшем случае оценка оказывается ~ N2, что гораздо хуже пирамидальной сортировки.

Слайд 46





Быстрая сортировка (пример)
Описание слайда:
Быстрая сортировка (пример)

Слайд 47





Быстрая сортировка (продолжение примера)
Описание слайда:
Быстрая сортировка (продолжение примера)

Слайд 48





Визуализация сортировок в виде танца
http://www.youtube.com/watch?v=CmPA7zE8mx0
Описание слайда:
Визуализация сортировок в виде танца http://www.youtube.com/watch?v=CmPA7zE8mx0



Похожие презентации
Mypresentation.ru
Загрузить презентацию