🗊Презентация Методы программирования. Алгоритмы внешней сортировки. (Лекция 4)

Нажмите для полного просмотра!
Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №1Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №2Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №3Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №4Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №5Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №6Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №7Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №8Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №9Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №10Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №11Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №12Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №13Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №14Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №15Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №16Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №17Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №18Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №19Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №20Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №21Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №22Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №23Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №24Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №25Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №26Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №27Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №28Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №29Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №30Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №31Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №32Методы программирования. Алгоритмы внешней сортировки. (Лекция 4), слайд №33

Содержание

Вы можете ознакомиться и скачать презентацию на тему Методы программирования. Алгоритмы внешней сортировки. (Лекция 4). Доклад-сообщение содержит 33 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

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


Слайд 1





Алгоритмы внешней сортировки
Лекция 4
Описание слайда:
Алгоритмы внешней сортировки Лекция 4

Слайд 2





Алгоритмы внешней сортировки
Внешняя сортировка – это упорядочивание данных, которые хранятся на внешнем устройстве с медленным доступом (диск и т.п.) и не вмещаются в оперативную память. Используется, когда применить одну из внутренних сортировок невозможно.  
При внешней сортировке прежде всего требуется уменьшить число обращений к этому устройству, т. е. число проходов через файл.
Внутренняя сортировка значительно эффективней внешней, так как на обращение к оперативной памяти затрачивается намного меньше времени, чем к магнитным дискам и т. п.
Наиболее часто внешняя сортировка используется в СУБД.
Описание слайда:
Алгоритмы внешней сортировки Внешняя сортировка – это упорядочивание данных, которые хранятся на внешнем устройстве с медленным доступом (диск и т.п.) и не вмещаются в оперативную память. Используется, когда применить одну из внутренних сортировок невозможно. При внешней сортировке прежде всего требуется уменьшить число обращений к этому устройству, т. е. число проходов через файл. Внутренняя сортировка значительно эффективней внешней, так как на обращение к оперативной памяти затрачивается намного меньше времени, чем к магнитным дискам и т. п. Наиболее часто внешняя сортировка используется в СУБД.

Слайд 3





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

Слайд 4





Алгоритмы внешней сортировки
Основным понятием при использовании внешней сортировки является понятие отрезка (серии). 
Отрезком длины K является последовательность записей 
	Ai, A i + 1,…,A i + k-1 такая, что в ней все записи упорядочены по некоторому ключу. 
Максимальное количество отрезков в файле равна N (все элементы не упорядочены). 
Минимальное количество отрезков 1 (все элементы являются упорядоченными).
Описание слайда:
Алгоритмы внешней сортировки Основным понятием при использовании внешней сортировки является понятие отрезка (серии). Отрезком длины K является последовательность записей Ai, A i + 1,…,A i + k-1 такая, что в ней все записи упорядочены по некоторому ключу. Максимальное количество отрезков в файле равна N (все элементы не упорядочены). Минимальное количество отрезков 1 (все элементы являются упорядоченными).

Слайд 5





Алгоритмы внешней сортировки
Примеры серий (отрезков)
1) Пусть в некотором файле A хранится одномерный массив:
12 35 65 0 24 26 3 5 84 90 6 2 30
Поделим массив на отрезки:
12 35 65 | 0 24 36 | 3 5 84 90 | 6 | 2 30
Можно сказать, что массив в файле A состоит из 5 отрезков.
2) В файле B хранится одномерный массив:
1 2 3 4 5 6 7 8 9 10
Поделим массив на отрезки:
| 1 2 3 4 5 6 7 8 9 10 |
Можно сказать, что массив в файле B состоит из 1 отрезка.
3) В файле С хранится одномерный массив:
20 17 16 14 13 10 9 8 6 4 3 2 0
Поделим массив на отрезки:
| 20 | 17 | 16 | 14 | 13 | 10 | 9 | 8 | 6 | 4 | 3 | 2 | 0 |
Можно сказать, что массив в файле С состоит из 13 отрезков.
Описание слайда:
Алгоритмы внешней сортировки Примеры серий (отрезков) 1) Пусть в некотором файле A хранится одномерный массив: 12 35 65 0 24 26 3 5 84 90 6 2 30 Поделим массив на отрезки: 12 35 65 | 0 24 36 | 3 5 84 90 | 6 | 2 30 Можно сказать, что массив в файле A состоит из 5 отрезков. 2) В файле B хранится одномерный массив: 1 2 3 4 5 6 7 8 9 10 Поделим массив на отрезки: | 1 2 3 4 5 6 7 8 9 10 | Можно сказать, что массив в файле B состоит из 1 отрезка. 3) В файле С хранится одномерный массив: 20 17 16 14 13 10 9 8 6 4 3 2 0 Поделим массив на отрезки: | 20 | 17 | 16 | 14 | 13 | 10 | 9 | 8 | 6 | 4 | 3 | 2 | 0 | Можно сказать, что массив в файле С состоит из 13 отрезков.

Слайд 6





Алгоритмы внешней сортировки
1. Естественная сортировка (метод естественного слияния) Несбалансированная двухфазная трехленточная сортировка слиянием
Пример
Описание слайда:
Алгоритмы внешней сортировки 1. Естественная сортировка (метод естественного слияния) Несбалансированная двухфазная трехленточная сортировка слиянием Пример

Слайд 7





Алгоритмы внешней сортировки
Несбалансированная двухфазная трехленточная сортировка слиянием
Пример
Описание слайда:
Алгоритмы внешней сортировки Несбалансированная двухфазная трехленточная сортировка слиянием Пример

Слайд 8





Алгоритмы внешней сортировки
Как увеличить скорость сортировки
Идея большинства методов заключается в расчленении данных на ряд последовательностей, помещающихся в оперативную память. 
Далее применяется один из методов внутренней сортировки, после чего последовательности сливаются. Чем больше объём оперативной памяти, тем длиннее могут быть последовательности и, следовательно, тем меньшим окажется их количество, что увеличит скорость сортировки.
Если объём оперативной памяти мал, то можно разделить исходные данные на несколько последовательностей, после чего непосредственно использовать процедуру слияния.
Основные методы внешних сортировок:
Естественная сортировка (метод естественного слияния)
Сортировка методом двухпутевого сбалансированного слияния 
Сортировка методом n-путевого слияния.
Многофазная сортировка (Фибоначчиевая).
Каскадное слияние.
Описание слайда:
Алгоритмы внешней сортировки Как увеличить скорость сортировки Идея большинства методов заключается в расчленении данных на ряд последовательностей, помещающихся в оперативную память. Далее применяется один из методов внутренней сортировки, после чего последовательности сливаются. Чем больше объём оперативной памяти, тем длиннее могут быть последовательности и, следовательно, тем меньшим окажется их количество, что увеличит скорость сортировки. Если объём оперативной памяти мал, то можно разделить исходные данные на несколько последовательностей, после чего непосредственно использовать процедуру слияния. Основные методы внешних сортировок: Естественная сортировка (метод естественного слияния) Сортировка методом двухпутевого сбалансированного слияния Сортировка методом n-путевого слияния. Многофазная сортировка (Фибоначчиевая). Каскадное слияние.

Слайд 9





Внешняя сортировка слиянием
2а. Сортировка методом двухпутевого сбалансированного слияния без использования оперативной памяти
Вся сортируемая последовательность данных разбивается на два файла f1 и f2. Желательно, чтобы количество записей в этих файлах было поровну. Как и в алгоритме внутренней сортировки, считаем, что любой файл состоит из участков длиной 1. 
Затем можно объединить участки длины 1 и распределить их по файлам g1 и g2 в виде участков длины 2.
После этого делаем f1 и f2 пустыми и объединяем g1 и g2 в f1 и f2, которые затем можно организовать в виде участков длины 4 и т. д.
После выполнения i проходов получатся два файла, состоящие из участков длины 2^i. Если 2^i ≥ n, то один из этих двух файлов будет пустым, а другой будет содержать единственный участок длиной n, т. е. будет отсортирован. Так как 2^i ≥ n при i ≥ log n, то в этом случае будет достаточно порядка O(log n) проходов по данным.
При такой сортировке не требуется, чтобы отдельный участок полностью находился в оперативной памяти (при большой длине он может не поместиться в буфер). Участок считывается и записывается последовательно запись за записью. Именно такой подход заставляет использовать два входных файла. В противном случае можно было бы читать по два участка из одного файла одновременно.
Описание слайда:
Внешняя сортировка слиянием 2а. Сортировка методом двухпутевого сбалансированного слияния без использования оперативной памяти Вся сортируемая последовательность данных разбивается на два файла f1 и f2. Желательно, чтобы количество записей в этих файлах было поровну. Как и в алгоритме внутренней сортировки, считаем, что любой файл состоит из участков длиной 1. Затем можно объединить участки длины 1 и распределить их по файлам g1 и g2 в виде участков длины 2. После этого делаем f1 и f2 пустыми и объединяем g1 и g2 в f1 и f2, которые затем можно организовать в виде участков длины 4 и т. д. После выполнения i проходов получатся два файла, состоящие из участков длины 2^i. Если 2^i ≥ n, то один из этих двух файлов будет пустым, а другой будет содержать единственный участок длиной n, т. е. будет отсортирован. Так как 2^i ≥ n при i ≥ log n, то в этом случае будет достаточно порядка O(log n) проходов по данным. При такой сортировке не требуется, чтобы отдельный участок полностью находился в оперативной памяти (при большой длине он может не поместиться в буфер). Участок считывается и записывается последовательно запись за записью. Именно такой подход заставляет использовать два входных файла. В противном случае можно было бы читать по два участка из одного файла одновременно.

Слайд 10





Внешняя сортировка слиянием
Пример. Сортировка методом двухпутевого сбалансированного слияния без использования оперативной памяти
Описание слайда:
Внешняя сортировка слиянием Пример. Сортировка методом двухпутевого сбалансированного слияния без использования оперативной памяти

Слайд 11





Внешняя сортировка слиянием
2б. Сбалансированная внешняя сортировка слиянием с использованием оперативной памяти
Пусть у нас есть четыре файла и инструмент их слияния.
Оценим сначала разумное число записей, которые можно хранить в оперативной памяти одновременно. Объявим массив, длина S которого равна этой величине; этот массив будет использоваться на двух этапах сортировки. 
I этап сортировки – распределение
На первом шаге прочитаем S записей из входного файла и отсортируем их с помощью подходящей внутренней сортировки. Этот набор уже отсортированных записей перепишем в файл A. 
Затем прочитаем следующие S записей, отсортируем их и перепишем в файл B. 
Этот процесс продолжается, причем отсортированные блоки записей пишутся попеременно то в файл A, то в файл B, до тех пор, пока входной файл не будет исчерпан.
Описание слайда:
Внешняя сортировка слиянием 2б. Сбалансированная внешняя сортировка слиянием с использованием оперативной памяти Пусть у нас есть четыре файла и инструмент их слияния. Оценим сначала разумное число записей, которые можно хранить в оперативной памяти одновременно. Объявим массив, длина S которого равна этой величине; этот массив будет использоваться на двух этапах сортировки. I этап сортировки – распределение На первом шаге прочитаем S записей из входного файла и отсортируем их с помощью подходящей внутренней сортировки. Этот набор уже отсортированных записей перепишем в файл A. Затем прочитаем следующие S записей, отсортируем их и перепишем в файл B. Этот процесс продолжается, причем отсортированные блоки записей пишутся попеременно то в файл A, то в файл B, до тех пор, пока входной файл не будет исчерпан.

Слайд 12





Внешняя сортировка слиянием
Алгоритм первого этапа – распределение
//Createfiles(S);
begin
//S 		размер создаваемых отрезков
CurrentFile := A;
while конец входного файла не достигнут do
begin
	//read S записей из входного файла
	//sort S записей
	if CurrentFile := A then
		   CurrentFile := B
	else
		   CurrentFile := A;
	//записываем S записей в CurrentFile
end
end;
Описание слайда:
Внешняя сортировка слиянием Алгоритм первого этапа – распределение //Createfiles(S); begin //S размер создаваемых отрезков CurrentFile := A; while конец входного файла не достигнут do begin //read S записей из входного файла //sort S записей if CurrentFile := A then CurrentFile := B else CurrentFile := A; //записываем S записей в CurrentFile end end;

Слайд 13





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

Слайд 14





Внешняя сортировка слиянием
II этап сортировки – слияние отсортированных отрезков
Начинаем с чтения половинок первых отрезков из файлов A и B. Читаем лишь по половине отрезков, поскольку в памяти может находиться одновременно лишь S записей, а нам нужны записи из обоих файлов. Будем сливать эти половинки отрезков в один отрезок файла C.
После того, как одна из половинок закончится, прочтем вторую половинку из того же файла. 
Когда обработка одного из отрезков будет завершена, конец второго отрезка будет переписан в файл C. 
После того, как слияние первых двух отрезков из файлов A и B будет завершено, следующие два отрезка сливаются в файл D. 
Этот процесс слияния отрезков продолжается с попеременной записью слитых отрезков в файлы C и D. 
По завершении получаем два файла, разбитых на отсортированные отрезки длины 2S. 
Далее описанный процесс повторяется, при этом отрезки длины S/2 читаются из файлов C и D, а слитые отрезки длины 4S записываются в файлы A и B. 
В конце концов отрезки сольются в один отсортированный список в одном из файлов.
Описание слайда:
Внешняя сортировка слиянием II этап сортировки – слияние отсортированных отрезков Начинаем с чтения половинок первых отрезков из файлов A и B. Читаем лишь по половине отрезков, поскольку в памяти может находиться одновременно лишь S записей, а нам нужны записи из обоих файлов. Будем сливать эти половинки отрезков в один отрезок файла C. После того, как одна из половинок закончится, прочтем вторую половинку из того же файла. Когда обработка одного из отрезков будет завершена, конец второго отрезка будет переписан в файл C. После того, как слияние первых двух отрезков из файлов A и B будет завершено, следующие два отрезка сливаются в файл D. Этот процесс слияния отрезков продолжается с попеременной записью слитых отрезков в файлы C и D. По завершении получаем два файла, разбитых на отсортированные отрезки длины 2S. Далее описанный процесс повторяется, при этом отрезки длины S/2 читаются из файлов C и D, а слитые отрезки длины 4S записываются в файлы A и B. В конце концов отрезки сольются в один отсортированный список в одном из файлов.

Слайд 15





Внешняя сортировка слиянием
Алгоритм второго этапа - слияние
//PolyPhaseMerge(S);
begin
//S			размер исходных отрезков
Size:= S;
Input1 := A;
Input2 := B;
CurrentOutput := C;
while not done do begin
	while отрезки не кончились do 
	begin
		   //слить отрезок длины Size из файла Input1
		   //с отрезком длины Size из файла Input2,
		   //записав результат в CurrentOutput
	  if (CurrentOutput = A) then CurrentOutput = B
		    else if (CurrentOutput = B) then CurrentOutput = A
		       else if (CurrentOutput = C) then CurrentOutput = D
	  	else if (CurrentOutput = D) then CurrentOutput = C;
		end;
Описание слайда:
Внешняя сортировка слиянием Алгоритм второго этапа - слияние //PolyPhaseMerge(S); begin //S размер исходных отрезков Size:= S; Input1 := A; Input2 := B; CurrentOutput := C; while not done do begin while отрезки не кончились do begin //слить отрезок длины Size из файла Input1 //с отрезком длины Size из файла Input2, //записав результат в CurrentOutput if (CurrentOutput = A) then CurrentOutput = B else if (CurrentOutput = B) then CurrentOutput = A else if (CurrentOutput = C) then CurrentOutput = D else if (CurrentOutput = D) then CurrentOutput = C; end;

Слайд 16





Внешняя сортировка слиянием
Алгоритм второго этапа – слияние 
		Size := Size*2;
	if (Input1 = A) then begin
		  Input1 := C
		  Input2 := D
		  CurrentOutput := A
	end
	else begin
		  Input1 = A
		  Input2 = B
		  CurrentOutput = C
	end 
end ;
Описание слайда:
Внешняя сортировка слиянием Алгоритм второго этапа – слияние Size := Size*2; if (Input1 = A) then begin Input1 := C Input2 := D CurrentOutput := A end else begin Input1 = A Input2 = B CurrentOutput = C end end ;

Слайд 17





Внешняя сортировка слиянием
Анализ сортировки 
Проанализируем, с каким количеством отрезков мы имеем дело, и как это количество влияет на число проходов. 
Если в исходном файле N записей, и в память помещается одновременно S записей, то после I этапа – распределения, то есть после выполнения процедуры Createfiles, получаем R = [N / S] отрезков, распределенных по двум файлам. 
При каждом проходе алгоритма PolyPhaseMerge на II этапе – слиянии – пары отрезков сливаются, поэтому число отрезков уменьшается вдвое. После первого прохода будет [R / 2] отрезков, после второго – [R / 4] и, в общем случае, после j-го прохода будет [R / (2^j)] отрезков. 
Алгоритм завершается, если остается один отрезок, то есть когда [R / (2^D)] = 1, или после
	D = [log R] = [log (N/S)] проходов процесса слияния.
Описание слайда:
Внешняя сортировка слиянием Анализ сортировки Проанализируем, с каким количеством отрезков мы имеем дело, и как это количество влияет на число проходов. Если в исходном файле N записей, и в память помещается одновременно S записей, то после I этапа – распределения, то есть после выполнения процедуры Createfiles, получаем R = [N / S] отрезков, распределенных по двум файлам. При каждом проходе алгоритма PolyPhaseMerge на II этапе – слиянии – пары отрезков сливаются, поэтому число отрезков уменьшается вдвое. После первого прохода будет [R / 2] отрезков, после второго – [R / 4] и, в общем случае, после j-го прохода будет [R / (2^j)] отрезков. Алгоритм завершается, если остается один отрезок, то есть когда [R / (2^D)] = 1, или после D = [log R] = [log (N/S)] проходов процесса слияния.

Слайд 18





Внешняя сортировка слиянием
3. Сортировка методом многопутевого слияния
При использовании метода многопутевой внешней сортировки на каждом шаге примерно половина вспомогательных файлов используется для ввода данных и примерно столько же для вывода сливаемых серий. 
На шаге распределения возрастающие серии (отрезки) исходного файла распределяются по m вспомогательным файлам, а затем выполняется многопутевое слияние серий из m файлов. Способы слияния:
1 способ. Просмотреть первые записи каждой серии и выбрать из них ту, которая имеет минимальный ключ; эта запись передается на выход и исключается из входных данных, затем процесс повторяется. В любой момент времени потребуется просмотреть только m ключей и выбрать из них наименьший.
2 способ. Если m велико,  можно ускорить работу, строя дерево выбора (пирамиду) из m записей. Затем потребуется  примерно lg m сравнений для выбора минимального ключа.
Описание слайда:
Внешняя сортировка слиянием 3. Сортировка методом многопутевого слияния При использовании метода многопутевой внешней сортировки на каждом шаге примерно половина вспомогательных файлов используется для ввода данных и примерно столько же для вывода сливаемых серий. На шаге распределения возрастающие серии (отрезки) исходного файла распределяются по m вспомогательным файлам, а затем выполняется многопутевое слияние серий из m файлов. Способы слияния: 1 способ. Просмотреть первые записи каждой серии и выбрать из них ту, которая имеет минимальный ключ; эта запись передается на выход и исключается из входных данных, затем процесс повторяется. В любой момент времени потребуется просмотреть только m ключей и выбрать из них наименьший. 2 способ. Если m велико, можно ускорить работу, строя дерево выбора (пирамиду) из m записей. Затем потребуется примерно lg m сравнений для выбора минимального ключа.

Слайд 19





Внешняя сортировка слиянием
Пример. Сортировка методом 4-х путевого слияния (стадия слияния 4-х возрастающих серий)
Описание слайда:
Внешняя сортировка слиянием Пример. Сортировка методом 4-х путевого слияния (стадия слияния 4-х возрастающих серий)

Слайд 20





Внешняя многофазная сортировка слиянием
4. Многофазная сортировка (Фибоначчиевая)
Идея многофазной сортировки состоит в том, что из имеющихся m вспомогательных файлов (m-1) файл служит для ввода сливаемых последовательностей, а один – для вывода образуемых серий.
Как только один из файлов ввода становится пустым, его начинают использовать для вывода серий, получаемых при слиянии серий нового набора (m-1) файлов. 
Первый шаг. Серии исходного файла распределяются по m-1 вспомогательному файлу.
Второй шаг. Выполняется многопутевое (m-1- путевое) слияние серий из (m-1) файла, пока в одном из них не образуется одна серия. 
Hа каждом шаге беpем наименьший из начальных элементов входных серий и перемещаем в конец выходной серии. 
При произвольном начальном распределении серий по вспомогательным файлам алгоритм может не сойтись, поскольку в единственном непустом файле может существовать более, чем одна серия.
Описание слайда:
Внешняя многофазная сортировка слиянием 4. Многофазная сортировка (Фибоначчиевая) Идея многофазной сортировки состоит в том, что из имеющихся m вспомогательных файлов (m-1) файл служит для ввода сливаемых последовательностей, а один – для вывода образуемых серий. Как только один из файлов ввода становится пустым, его начинают использовать для вывода серий, получаемых при слиянии серий нового набора (m-1) файлов. Первый шаг. Серии исходного файла распределяются по m-1 вспомогательному файлу. Второй шаг. Выполняется многопутевое (m-1- путевое) слияние серий из (m-1) файла, пока в одном из них не образуется одна серия. Hа каждом шаге беpем наименьший из начальных элементов входных серий и перемещаем в конец выходной серии. При произвольном начальном распределении серий по вспомогательным файлам алгоритм может не сойтись, поскольку в единственном непустом файле может существовать более, чем одна серия.

Слайд 21





Внешняя многофазная сортировка слиянием
Пример начального распределения серий, при котором трехфазная внешняя сортировка не приводит к нужному результату (алгоритм не сходится)
Пусть используются три файла B1, B2 и B3. 
При начальном распределении в файл B1 помещены 10 серий, а в файл B2 - 6. При слиянии B1 и B2 к моменту, когда мы дойдем до конца B2, в B1 останутся 4 серии, а в B3 попадут 6 серий. 
Продолжится слияние B1 и B3, и при завершении просмотра B1 в B2 будут содержаться 4 серии, а в B3 останутся 2 серии.
 После слияния B2 и B3 в каждом из файлов B1 и B2 будет содержаться по 2 серии, которые будут слиты и образуют 2 серии в B3 при том, что B1 и B2 - пусты. Тем самым, алгоритм не сошелся.
Число серий в B1 	Число серий в B2 	Число серий в B3 
	10					6				0
	4					0				6
	0					4				2
	2					2				0
	0					0				2
Описание слайда:
Внешняя многофазная сортировка слиянием Пример начального распределения серий, при котором трехфазная внешняя сортировка не приводит к нужному результату (алгоритм не сходится) Пусть используются три файла B1, B2 и B3. При начальном распределении в файл B1 помещены 10 серий, а в файл B2 - 6. При слиянии B1 и B2 к моменту, когда мы дойдем до конца B2, в B1 останутся 4 серии, а в B3 попадут 6 серий. Продолжится слияние B1 и B3, и при завершении просмотра B1 в B2 будут содержаться 4 серии, а в B3 останутся 2 серии. После слияния B2 и B3 в каждом из файлов B1 и B2 будет содержаться по 2 серии, которые будут слиты и образуют 2 серии в B3 при том, что B1 и B2 - пусты. Тем самым, алгоритм не сошелся. Число серий в B1 Число серий в B2 Число серий в B3 10 6 0 4 0 6 0 4 2 2 2 0 0 0 2

Слайд 22





Внешняя многофазная сортировка слиянием
Вопрос: каким должно быть начальное распределение серий, чтобы алгоритм трехфазной сортировки благополучно завершал работу и выполнялся максимально эффективно? 
Рассмотрим работу алгоритма в обратном порядке, начиная от желательного конечного состояния вспомогательных файлов. Нас устраивает любая комбинация конечного числа серий в файлах B1, B2 и B3 из (1,0,0), (0,1,0) и (0,0,1). Для определенности выберем первую комбинацию. Для того, чтобы она сложилась, необходимо, чтобы на непосредственно предыдущем этапе слияний существовало распределение серий (0,1,1). 
Чтобы получить такое распределение, необходимо, чтобы на непосредственно предыдущем этапе слияний распределение выглядело как (1,0,2) или (1,2,0). 
Опять для определенности остановимся на первом варианте. Чтобы его получить, на предыдущем этапе годились бы следующие распределения: (3,2,0) и (0,3,1). Но второй вариант хуже, поскольку он приводит к слиянию только одной серии из файлов B2 и B3, в то время как при наличии первого варианта распределения будут слиты две серии из файлов B1 и B3. 
Пожеланием к предыдущему этапу было бы наличие распределения (0,5,3), еще раньше - (5,0,8), еще раньше - (13,8,0) и т.д.
Описание слайда:
Внешняя многофазная сортировка слиянием Вопрос: каким должно быть начальное распределение серий, чтобы алгоритм трехфазной сортировки благополучно завершал работу и выполнялся максимально эффективно? Рассмотрим работу алгоритма в обратном порядке, начиная от желательного конечного состояния вспомогательных файлов. Нас устраивает любая комбинация конечного числа серий в файлах B1, B2 и B3 из (1,0,0), (0,1,0) и (0,0,1). Для определенности выберем первую комбинацию. Для того, чтобы она сложилась, необходимо, чтобы на непосредственно предыдущем этапе слияний существовало распределение серий (0,1,1). Чтобы получить такое распределение, необходимо, чтобы на непосредственно предыдущем этапе слияний распределение выглядело как (1,0,2) или (1,2,0). Опять для определенности остановимся на первом варианте. Чтобы его получить, на предыдущем этапе годились бы следующие распределения: (3,2,0) и (0,3,1). Но второй вариант хуже, поскольку он приводит к слиянию только одной серии из файлов B2 и B3, в то время как при наличии первого варианта распределения будут слиты две серии из файлов B1 и B3. Пожеланием к предыдущему этапу было бы наличие распределения (0,5,3), еще раньше - (5,0,8), еще раньше - (13,8,0) и т.д.

Слайд 23





Внешняя многофазная сортировка слиянием
Метод трехфазной внешней сортировки дает желаемый результат и работает максимально эффективно (на каждом этапе сливается максимальное число серий), если начальное распределение серий между вспомогательными файлами описывается соседними числами Фибоначчи: 
(1,0,0), (0,1,1), (1,0,2), (3,2,0), (0,5,3), (5,0,8), (13,8,0) и т.д.
Пример. При начальном распределении серий между тремя файлами 13, 8,0 метод сойдется:
В1	В2	В3
(13,		 8,	0)
(5,	 0, 	8)
(0,    5,     3)
(3,    2,     0)
(1,    0,     2)
(0,    1,     1)
(1,    0,     0).
Последовательность чисел Фибоначчи начинается с 0, 1, а каждое следующее число образуется как сумма двух предыдущих: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... .
Описание слайда:
Внешняя многофазная сортировка слиянием Метод трехфазной внешней сортировки дает желаемый результат и работает максимально эффективно (на каждом этапе сливается максимальное число серий), если начальное распределение серий между вспомогательными файлами описывается соседними числами Фибоначчи: (1,0,0), (0,1,1), (1,0,2), (3,2,0), (0,5,3), (5,0,8), (13,8,0) и т.д. Пример. При начальном распределении серий между тремя файлами 13, 8,0 метод сойдется: В1 В2 В3 (13, 8, 0) (5, 0, 8) (0, 5, 3) (3, 2, 0) (1, 0, 2) (0, 1, 1) (1, 0, 0). Последовательность чисел Фибоначчи начинается с 0, 1, а каждое следующее число образуется как сумма двух предыдущих: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... .

Слайд 24





Внешняя многофазная сортировка слиянием
Многофазная сортировка (Фибоначчиевая)
В общем случае при использовании m вспомогательных файлов аналогичным условием успешного завершения и эффективной работы метода многофазной внешней сортировки является то, чтобы начальное распределение серий между (m-1) файлами описывалось суммами соседних (m-2), ..., 0 чисел Фибоначчи порядка m-1.
Последовательность чисел Фибоначчи p-го порядка начинается с (p-1) нулей, затем идет 1, и каждое следующее число является суммой p предыдущих чисел. При p=2 это обычная последовательность Фибоначчи. 
Числа Фибоначчи p-го порядка определяются правилами:
Описание слайда:
Внешняя многофазная сортировка слиянием Многофазная сортировка (Фибоначчиевая) В общем случае при использовании m вспомогательных файлов аналогичным условием успешного завершения и эффективной работы метода многофазной внешней сортировки является то, чтобы начальное распределение серий между (m-1) файлами описывалось суммами соседних (m-2), ..., 0 чисел Фибоначчи порядка m-1. Последовательность чисел Фибоначчи p-го порядка начинается с (p-1) нулей, затем идет 1, и каждое следующее число является суммой p предыдущих чисел. При p=2 это обычная последовательность Фибоначчи. Числа Фибоначчи p-го порядка определяются правилами:

Слайд 25





Внешняя многофазная сортировка слиянием
Пример. Ниже показано начало последовательности чисел Фибоначчи порядка p=5: 
0, 0, 0, 0, 1, 1, 2, 4, 8, 16, 31, 61, ....
Поскольку число серий в исходном файле может не обеспечивать возможность такого распределения серий, применяется метод добавления пустых серий, которые в дальнейшем как можно более равномерно распределяются между промежуточными файлами и опознаются при последующих слияниях. 
Чем меньше таких пустых серий, т.е. чем ближе число начальных серий к требованиям Фибоначчи, тем более эффективно работает алгоритм.
Описание слайда:
Внешняя многофазная сортировка слиянием Пример. Ниже показано начало последовательности чисел Фибоначчи порядка p=5: 0, 0, 0, 0, 1, 1, 2, 4, 8, 16, 31, 61, .... Поскольку число серий в исходном файле может не обеспечивать возможность такого распределения серий, применяется метод добавления пустых серий, которые в дальнейшем как можно более равномерно распределяются между промежуточными файлами и опознаются при последующих слияниях. Чем меньше таких пустых серий, т.е. чем ближе число начальных серий к требованиям Фибоначчи, тем более эффективно работает алгоритм.

Слайд 26





Внешняя многофазная сортировка слиянием
Пример. Многофазное (6-и фазное) слияние
Далее 1^31 обозначает 31 серию относительной длины 1 и т.д.; везде изпользуется пятипутевое слияние. 
Чтобы заставить механизм многофазного слияния работать, необходимо после каждой фазы иметь “точное фибоначчиево распределение” серий по файлам. Точные фибоначчиевы распределения можно получить, прокручивая приведенную схему в обратном направлении и циклически переставляя содержимое файлов.
Описание слайда:
Внешняя многофазная сортировка слиянием Пример. Многофазное (6-и фазное) слияние Далее 1^31 обозначает 31 серию относительной длины 1 и т.д.; везде изпользуется пятипутевое слияние. Чтобы заставить механизм многофазного слияния работать, необходимо после каждой фазы иметь “точное фибоначчиево распределение” серий по файлам. Точные фибоначчиевы распределения можно получить, прокручивая приведенную схему в обратном направлении и циклически переставляя содержимое файлов.

Слайд 27





Внешняя многофазная сортировка слиянием
Начало последовательности чисел Фибоначчи порядка p=5 
0, 0, 0, 0, 1, 1, 2, 4, 8, 16, 31, 61, ... представляют числа an.
Читая приведенную выше таблицу снизу вверх, можно заметить, что первые семь точных фибоначчиевых распределений при количестве файлов =6 суть (1,0,0,0,0), (1,1,1,1,1), (2,2,2,2,1), (4,4,4,3,2), (8,8,7,6,4), (16,15,14,12,8) и (31,30,28,24,16) (p=5). Это числа an, bn, cn, dn, en.
Описание слайда:
Внешняя многофазная сортировка слиянием Начало последовательности чисел Фибоначчи порядка p=5 0, 0, 0, 0, 1, 1, 2, 4, 8, 16, 31, 61, ... представляют числа an. Читая приведенную выше таблицу снизу вверх, можно заметить, что первые семь точных фибоначчиевых распределений при количестве файлов =6 суть (1,0,0,0,0), (1,1,1,1,1), (2,2,2,2,1), (4,4,4,3,2), (8,8,7,6,4), (16,15,14,12,8) и (31,30,28,24,16) (p=5). Это числа an, bn, cn, dn, en.

Слайд 28





Внешняя многофазная сортировка слиянием
Пример
	Из правила перехода от n-го уровня к n+1 следуют неравенства:
an>=bn>=cn>=dn>=en для любого уровня.
Описание слайда:
Внешняя многофазная сортировка слиянием Пример Из правила перехода от n-го уровня к n+1 следуют неравенства: an>=bn>=cn>=dn>=en для любого уровня.

Слайд 29





Внешняя сортировка каскадным слиянием
5. Каскадное слияние
Каскадное слияние начинается с точного распределения серий по файлам, хотя правила точного распределения отличны от правил для многофазной сортировки.
Пусть используются 6 файлов. 
Проход 1. Серии распределяются по первым пяти файлам, пусть файл f6 – пустой.
Проход 2. Получается посредством выполнения
пятипутевого слияния из файлов f1, f2, f3, f4, f5 в файл f6, пока один из файлов, например, f5 не станет пустым; 
затем – четырехпутевого слияния из f1, f2, f3, f4 в f5, f4 – пустой; 
затем – трехпутевого слияния из f1, f2, f3 в f4, f3 – пустой; 
двухпутевого слияния из f1, f2 в f3, f2 – пустой; и, наконец, 
однопутевого слияния (операция копирования) из f1в f2, f1 – пустой.
Проход 3. Получается таким же образом, путем выполнения сначала пятипутевого слияния, например, из файлов f2, f3, f4, f5, f6 в f1, пока один файл не станет пустым, затем четырехпутевого, трехпутевого, двухпутевого и однопутевого. 
Для шести и более файлов каскадная сортировка лучше, чем многофазная.
Описание слайда:
Внешняя сортировка каскадным слиянием 5. Каскадное слияние Каскадное слияние начинается с точного распределения серий по файлам, хотя правила точного распределения отличны от правил для многофазной сортировки. Пусть используются 6 файлов. Проход 1. Серии распределяются по первым пяти файлам, пусть файл f6 – пустой. Проход 2. Получается посредством выполнения пятипутевого слияния из файлов f1, f2, f3, f4, f5 в файл f6, пока один из файлов, например, f5 не станет пустым; затем – четырехпутевого слияния из f1, f2, f3, f4 в f5, f4 – пустой; затем – трехпутевого слияния из f1, f2, f3 в f4, f3 – пустой; двухпутевого слияния из f1, f2 в f3, f2 – пустой; и, наконец, однопутевого слияния (операция копирования) из f1в f2, f1 – пустой. Проход 3. Получается таким же образом, путем выполнения сначала пятипутевого слияния, например, из файлов f2, f3, f4, f5, f6 в f1, пока один файл не станет пустым, затем четырехпутевого, трехпутевого, двухпутевого и однопутевого. Для шести и более файлов каскадная сортировка лучше, чем многофазная.

Слайд 30





Внешняя сортировка каскадным слиянием
Пример. Каскадное слияние
Каждая строка таблицы представляет полный проход по всем данным. 
Проход 2, например, получается посредством выполнения пятипутевого слияния с {Т1, Т2, Т3, Т4, Т5} на Т6, пока Т5 не станет пустым (при этом на Т6 помещаются 15 серий относительной длиной 5), затем четырехпутевого слияния с {Т1, Т2, Т3, Т4} на Т5, затем трехпутевого слияния на Т4, двухпутевого слияния на Т3 и, наконец, однопутевого слияния (операции копирования) с Т1 на Т2. 
Проход 3 получается таким же образом, путем выполнения сначала пятипутевого слияния, пока один файл не станет пустым, затем – четырехпутевого и т.д.
Описание слайда:
Внешняя сортировка каскадным слиянием Пример. Каскадное слияние Каждая строка таблицы представляет полный проход по всем данным. Проход 2, например, получается посредством выполнения пятипутевого слияния с {Т1, Т2, Т3, Т4, Т5} на Т6, пока Т5 не станет пустым (при этом на Т6 помещаются 15 серий относительной длиной 5), затем четырехпутевого слияния с {Т1, Т2, Т3, Т4} на Т5, затем трехпутевого слияния на Т4, двухпутевого слияния на Т3 и, наконец, однопутевого слияния (операции копирования) с Т1 на Т2. Проход 3 получается таким же образом, путем выполнения сначала пятипутевого слияния, пока один файл не станет пустым, затем – четырехпутевого и т.д.

Слайд 31





Внешняя сортировка каскадным слиянием
Каскадное слияние
Рассуждая в обратном направлении от конечного состояния 
(1, 0,…,0), Д. Кнут вывел точное распределение для каскадного слияния. В случае шести файлов (лент) оно следующее (пустые файлы в распределении не присутствуют).
Распределение серий в обратном порядке:
Описание слайда:
Внешняя сортировка каскадным слиянием Каскадное слияние Рассуждая в обратном направлении от конечного состояния (1, 0,…,0), Д. Кнут вывел точное распределение для каскадного слияния. В случае шести файлов (лент) оно следующее (пустые файлы в распределении не присутствуют). Распределение серий в обратном порядке:

Слайд 32





Внешняя сортировка каскадным слиянием
Числа an, bn, cn, dn, en имеют интересное свойство – их относительные величины являются также и длинами диагоналей (2Т-1)-угольника (Т – число используемых файлов). Например, пять диагоналей одиннадцатиугольника имеют относительные длины, очень близкие к 190, 175, 146, 105 и 55.
В книге Кнута приведено доказательство того факта, что значения относительного времени, затрачиваемого на (Т-1), (Т-2), …,1-путевое слияние, приблизительно пропорциональны квадратам длин этих диагоналей.
Описание слайда:
Внешняя сортировка каскадным слиянием Числа an, bn, cn, dn, en имеют интересное свойство – их относительные величины являются также и длинами диагоналей (2Т-1)-угольника (Т – число используемых файлов). Например, пять диагоналей одиннадцатиугольника имеют относительные длины, очень близкие к 190, 175, 146, 105 и 55. В книге Кнута приведено доказательство того факта, что значения относительного времени, затрачиваемого на (Т-1), (Т-2), …,1-путевое слияние, приблизительно пропорциональны квадратам длин этих диагоналей.

Слайд 33





Внешняя сортировка каскадным слиянием
Каскадное слияние
Для 6 и более файлов каскадная схема лучше, чем многофазная.
Каскадная сортировка впервые была исследована У.К.Картером (1962 г.), который получил численные результаты для небольших Т, и Дэвидом Фергюсоном (1964 г.).
Описание слайда:
Внешняя сортировка каскадным слиянием Каскадное слияние Для 6 и более файлов каскадная схема лучше, чем многофазная. Каскадная сортировка впервые была исследована У.К.Картером (1962 г.), который получил численные результаты для небольших Т, и Дэвидом Фергюсоном (1964 г.).



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