Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Сортировка информационных массивов методом Шелла.
Цель работы: изучение процесса сортировки информационных машинных массивов методом Шелла. Методические указания. В данной лабораторной работе, последней из цикла, на примере сортировки Шелла вы получите представление о том, как можно на базе основного метода значительно усовершенствовать способ сортировки. Для алгоритма сортировки, который каждый раз перемещает запись только на одну позицию (как в методе простых вставок), среднее время работы будет в лучшем случае пропорционально N2. Поэтому если мы хотим получить метод, существенно превосходящий по скорости простые вставки, то необходим некоторый механизм, с помощью которого записи могли бы перемещаться большими скачками, а не короткими шажками. Такой метод впервые был предложен Л.Шеллом в 1959г. Метод Шелла часто называют “сортировкой с убывающим шагом”. Метод Шелла заключается в том, что сортируемый массив разбивается на группы, а затем каждая группа сортируется методом простых вставок. Процесс разбиения массива на группы уже большего размера и сортировка элементов в них, будут продолжаться до тех пор, пока все элементы не будут объединены в одну группу. Алгоритм метода Шелла можно определить следующим образом. Для управления процессом сортировки используется вспомогательная последовательность убывающих шагов he, e = t, t-1, t-2,…,1; причем последний шаг h1 всегда равен единице h1=1. Весь процесс сортировки разбивается на отдельные просмотры массива. При первом просмотре методом простых вставок сортируются элементы, отстоящие друг от друга на ht позиций. В результате получаем упорядоченные подгруппы элементов, значения ключей которых удовлетворяют соотношению при При 2-м просмотре методом простых вставок сортируются элементы, отстоящие друг от друга на ht-1 позиций. В результате получаем упорядоченные подгруппы элементов, в каждой из которых ключи упорядочены, т.е. удовлетворяют соотношению при и так далее. При последнем просмотре устанавливается шаг h1 и производится сортировка массива простыми вставками, которая ничем не отличается от сортировки, рассмотренной в лабораторной работе №3. Если назвать каждый просмотр “h – сортировкой”, то сортировка методом Шелла состоит из ht сортировки, за которой следует ht-1 сортировка, …, за которой следует h1 сортировка. Подфайл, в котором Ki £ Ki+h при 1 £ i £ N-h, будем называть h-упорядоченным.
Эффективность сортировки методом Шелла достигается за счет того, что в каждом из промежуточных процессов сортировки участвуют либо сравнительно короткие подфайлы, либо уже сравнительно хорошо упорядоченные подфайлы, поэтому записи довольно быстро достигают своего конечного положения. Последовательность шагов he может быть любой, в которой последний шаг h1=1. От выбранной последовательности шагов зависит время работы алгоритма. Для примеров будем пользоваться последовательностью: 8, 4, 2, 1. Лучшие результаты получаются при шагах: 7, 5, 3, 1. Если шаги выбирать из соотношения при 1 £ e £ t = [log2N] (2.11) то максимальное время работы алгоритма Шелла (оценка) есть N3/2. Преимущества алгоритма Шелла проявляются при больших массивах. Число сравнений и перемещений снижается примерно до C = N1,3 для тех значений N, которые встречаются на практике; при Nॠэто число можно сократить до порядка C = N(log2N)2. Приведем пример сортировки массива из 8 чисел (he=4, 2, 1): Исходный массив: 7 3 5 1 2 8 4 6 1-й просмотр (4-сортировка) ht = h4 – разбиение 7 3 5 1 2 8 4 6
7: 2 3: 8 5: 4 1: 6 после 1-го просмотра: 2 3 4 1 7 8 5 6 2-й просмотр (2-сортировка) ht-1 = h2 – разбиение 2 3 4 1 7 8 5 6
2: 4
3: 1 2: 4: 7 1 3: 8 2 4 7: 5 1 3 8: 6 после 2-го просмотра: 2 1 4 3 5 6 7 8 3-й просмотр (1-сортировка) h1 – разбиение 2 1 4 3 5 6 7 8
2: 1 1 2: 4 1 2 4: 3 1 2 3 4: 5 1 2 3 4 5: 6 1 2 3 4 5 6: 7 1 2 3 4 5 6 7: 8 Массив упорядочен: 1 2 3 4 5 6 7 8 Дугами указано разбиение элементов (ключей) на группы. Знак “: ” означает сравнение, стрелкой показана пересылка элемента. Алгоритм Шелла довольно просто программируется, использует минимальный объем памяти и эффективен при умеренно больших N (при N£1000). Блок-схема сортировки методом Шелла представлена в приложении 4. В блок-схеме сортировки методом Шелла использованы следующие обозначения: n – размер массива; hi – шаг в i-м этапе; j – текущий номер 1-го из сравниваемых элементов (пересылаемого в рабочую ячейку); k – текущий номер 2-го из сравниваемых элементов; j0 – номер 1-го элемента упорядочиваемой последовательности; c – номер рабочей ячейки; M – идентификатор упорядочиваемого массива. Блок 1 формирует шаг h1 для первого этапа процедуры. Возможные варианты внутренней структуры блока 1 описаны ниже. Блок 2 присваивает индексам j и j0 исходные значения, равные 1 (для упорядочения 1-ой последовательности). Блок 3 формирует номер j 1-го из двух сравниваемых элементов, подлежащего пересылке в рабочую ячейку. Блок 4, сравнивая j с размером массива N, проверяет, не исчерпалась ли упорядоченная последовательность. Блок 5, сравнивая элемент массива М[j] и элемент той же последовательности M[j-h] с соседним меньшим номером, проверяет, нужно или не нужно пересылать элемент M[j] в рабочую ячейку. Если оказывается, что нужно, то блоки 6,7 выполняют первый шаг процедуры упорядочения выделенной последовательности методом вставки и подготовку последующих шагов. Последующие шаги процедуры упорядочения последовательности методом вставки выполняются блоками 8-11. Если блок 4 выявит, что упорядочение последовательности закончено, то осуществиться переход к блоку 12, формирующему номер первого элемента следующей последовательности, подлежащей упорядочению. Блок 13, сравнивая номер 1-го элемнта этой последовательности с шагом h, проверяет, не закончился ли этап, и в случае, если он не закончился, осуществляет переход к блоку 3, начинающему упорядочение следующей последовательности. Если этап закончился, то осуществляется переход к блоку 14, сравнивающему шаг только что выполненного этапа с его конечным значением, равным 1, и проверяющему тем самым, не закончилась ли вся процедура упорядочения.
Если процедура не закончилась, то осуществляется переход к блоку 15, формирующему шаг для следующего этапа. Рассмотрим два основных варианта внутренней структуры блоков 1 и 15, формирующих первый и очередной шаги. Вариант № 1. Шаг h1 формируется путем сдвига вправо на один разряд двоичного кода размера массива n: h = h1: = n ¸ 2 Последующие шаги формируются путем сдвига вправо на один разряд кода предыдущего шага с установкой младшего его разряда в 1: 1) h: = h ¸ 2; 2) h: = h V a (a = 0…01 = 1, V – операция поразрядного логического сложения кодов). Тем самым обеспечивается некратный шаг после любого из этапов процедуры. Вариант № 2. Шаг h1 формируется путем сдвига вправо на один разряд кода размера массива с последующей установкой в 1 группы из семи его младших разрядов: 1) h: = h ¸ 2; 2) h: = h V b b = 0…01111111 = 28 – 1; 3) сравнение h c n. Если h < n, то выход из блока 1, в противном случае – сдвиг h на один разряд вправо. h: = h ¸ 2 и переход к новому повторению пункта 3. Пункт 3 нужен для случая формирования первого шага для массива, по размеру меньшего чем 28 – 1 элемент. Последующие шаги формируются путем сдвига на один разряд вправо кода предыдущего шага: h: = h ¸ 2 При этом обеспечивается некратный шаг на первых семи этапах процедуры, которых достаточно для требуемого выравнивания по составу всех формируемых последовательностей. Порядок выполнения работы. 1. Ознакомится с описанием лабораторной работы №4. Изучить алгоритм сортировки методом Шелла. 2. Изучить блок-схему данной сортировки. 3. Написать последовательность сортировки заданного массива методом Шелла в виде таблицы с указанием номеров просмотров (см. пример сортировки). 4. Произвести подсчет числа сравнений и количества пересылок, полученных при сортировке вашего варианта массива методом Шелла. Сравните полученные данные при сортировке этим методом с данными, полученными в лабораторных работах №1-3 проанализируйте все рассмотренные в лабораторных работах методы сортировок по эффективности на основе ваших данных.
5. Провести сортировку заданного массива на ЭВМ. Содержание отчета. 1. Краткое изложение рассматриваемого метода сортировки, целей и задач лабораторной работы. 2. Блок-схема алгоритма рассмотренной сортировки. 3. Таблица последовательности сортировки заданного массива чисел. 4. Анализ эффективности алгоритма Шелла. Сравнительный анализ с теоретическими данными и с ранее рассмотренными методами сортировок. 5. Результаты сортировки на ЭВМ (распечатка с комментариями). Контрольные вопросы. 1. Является ли алгоритм Шелла алгоритмом устойчивой сортировки? Рассмотрите это на примере. 2. Что такое h-сортировка? 3. Какие имеются требования к выбору последовательности шагов при сортировке по методу Шелла? 4. Какова эффективность алгоритма Шелла? 5. В чем заключается основная идея метода Шелла? Лабораторная работа № 5.
|
||||||||
Последнее изменение этой страницы: 2021-01-08; просмотров: 159; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.95.38 (0.021 с.) |