Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборная ответов к госэкзаменам.doc
Скачиваний:
122
Добавлен:
02.09.2019
Размер:
7 Mб
Скачать

Многоканальное слияние

Если "узким местом" является обмен данными между основной и вторичной па­мятью, возможно, удалось бы сэкономить время за счет увеличения числа каналов обмена данными. Допустим, что в нашей системе имеется дисководов, каждый из которых имеет собственный канал доступа к основной памяти. Мы могли бы размес­тить на т дисководах т файлов (f1 , f2, … fm ), организованных в виде серий длины k. Тогда можно прочитать т серий, по одной из каждого файла, и объединить их в одну серию длиной mk. Эта серия помещается в один из т выходных файлов (g1t g2, ..., gm), каждый из которых получает по очереди ту или иную серию.

Процесс слияния в основной памяти можно выполнить за O(log т) шагов на одну запись, если мы организуем т записей-кандидатов, т.е. наименьших на данный мо­мент невыбранных записей из каждого файла, в виде частично упорядоченного дере­ва или другой структуры данных, которая поддерживает операторы INSERT и DELETEMIN, выполняемые над очередями с приоритетами за время порядка O(logn). Чтобы выбрать из очереди с приоритетами запись с наименьшим ключом, надо выполнить оператор DELETEMIN, а затем вставить (оператор INSERT) в очередь с приоритетами следующую запись из файла-победителя в качестве замены вы­бранной записи.

Если у нас имеется п записей, а длина серий после каждого прохода умно­жается на т, тогда после i проходов серии будут иметь длину тi. Если тi > п, т.е. после t = logm n проходов, весь список будет отсортирован. Так как logm n = log2 n / log2m, то "коэффициент экономии" (по количеству считываний каж­дой записи) составляет log2m. Более того, если т — количество дисководов, исполь­зуемых для входных файлов, и т дисководов используются для вывода, мы можем обрабатывать данные в т раз быстрее, чем при наличии лишь одного дисковода для ввода и одного дисковода для вывода, и в раз быстрее, чем при наличии лишь одного дисковода для ввода и вывода (входные и выходные файлы хранятся на од­ном диске). К сожалению, бесконечное увеличение т не приводит к ускорению обра­ботки по “ закону коэффициента log m . Причина заключается в том, что при доста­точно больших значениях m время, необходимое для слияния в основной памяти (которое растет фактически пропорционально log m), превосходит время, требующееся для считывания или записи данных. Начиная с этого момента дальнейшее увели­чение т ведет, по сути, к увеличению полного времени обработки данных, поскольку "узким местом" системы становятся вычисления в основной памяти.

Многофазная сортировка

Многоканальную (m-канальную) сортировку слиянием можно выполнить с помо­щью лишь т + 1 файлов (в отличие от описанной выше 2/n-файловой стратегии). При этом выполняется ряд проходов с объединением серий из т файлов в более длинные серии в (т + 1)-м файле. Вот последовательные шаги такой процедуры.

1. В течение одного прохода, когда серии от каждого из т файлов объединяются в серии (т + 1)-го файла, нет нужды использовать все серии от каждого из т входных файлов. Когда какой-либо из файлов становится выходным, он запол­няется сериями определенной длины, причем количество этих серий равно ми­нимальному количеству серий, находящихся в сливаемых файлах.

2. В результате каждого прохода получаются файлы разной длины. Поскольку ка­ждый из файлов, загруженных сериями в результате предшествующих т прохо­дов, вносит свой вклад в серии текущего прохода, длина всех серий на опреде­ленном проходе представляет собой сумму длин серий, созданных за предшест­вующие т проходов. (Если выполнено менее т проходов, можно считать, что гипотетические проходы, выполненные до первого прохода, создавали серии длины 1.)

Подобный процесс сортировки слиянием называется многофазной сортировкой. Точный подсчет требуемого количества проходов как функции от т (количества файлов) и п (количество записей), а также нахождения оптимального начального распределения серий между т файлами оставлен для упражнений. Однако мы при­ведем здесь один пример общего характера.