Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Структурные элементы данных алгоритмы поиска и сортировки. Учебное пособие для СПО
.pdf
61
Рис. 2.16. Форма «Пирамидальное дерево»
Программа должна демонстрировать выполнение таких операций с очередью с приоритетами в представлении данной структуры с помощью пирамидального дерева как:
– создание очереди с ее отображением в виде массива и пирамидального
дерева;
– очистка очереди (очистка массива, очистка дерева);
– извлечение наибольшего элемента из очереди с помещением его в массив «Результат выборки»;
– добавление нового элемента в очередь с последующим восстановлением
пирамидальности;
– изменение приоритета элемента с последующим восстановлением пирамидальности.
Максимальный размер очереди — пятнадцать элементов.
Для создания данной формы использовались те же компоненты, что
и в предыдущих практических заданиях. Однако настройка этих компонентов
требует использования дополнительных их свойств.
Например, по умолчанию таблица dataGridView имеет заголовочную
строку и столбец. Для того чтобы получить таблицу из одной строки, надо
убрать заголовочные строку и столбец. Это можно выполнить с помощью следующих операторов:
dataGridView1.ColumnHeadersVisible = false;
dataGridView1.RowHeadersVisible = false.
Задание количества строк и столбцов таблицы может быть выполнено
операторами:
dataGridView1.RowCount = 1;
dataGridView1.ColumnCount = 15.
Для задания ширины ячеек используется оператор
dataGridView1.Columns[i].Width = 60.

62
2. Написать функцию Print(int[] A), осуществляющую вывод содержимо-
го массива A в двумерную таблицу согласно принципу формирования пирамидального дерева: первый элемент — корень дерева, второй и третий — потомки
первого дерева и т. д. Если элемент массива равен нулю — выводить пустую
строку.
3. Написать функцию Clear_Tab(), осуществляющую очистку всех таблиц
формы, заполняя ячейки таблиц значением пустой строки.
4. Протестировать функцию Print(int[] A). Для этого по нажатию кнопки
«Создать очередь» сформировать массив А из 15 случайных чисел в интервале
от 10 до 99, вывести их в верхнюю одномерную таблицу, а также с помощью
функции Print — в двумерную таблицу.
5. Протестировать функцию Clear_Tab(). Связать вызов этой функции
с нажатием кнопки «Очистить очередь».
Вариант выполнения п. 4 задания приведен на рис. 2.17.
Рис. 2.17. Пример тестирования функции вывода массива
Контрольные вопросы:
1. Перечислите основные операции для структуры данных «Очереди
с приоритетами».
2. Какими свойствами обладает пирамидальная структура данных?
3. В какой позиции находится родитель узла, позиция которого равна i?
4. В каких позициях находятся потомки узла, позиция которого равна i?
2.7.2. Пирамидальная структура
1. Используя разработанную программу (2.7.1), запрограммировать алгоритм создания очереди с приоритетами с применением пирамидальной структуры данных. Для этого при нажатии кнопки «Создать очередь»:
– реализовать операцию «Вставить», сформировать массив А из 15 эле-
ментов, добавляя в конец массива элементы, генерируемые датчиком случай-

63
ных чисел, и используя после добавления в массив очередного значения функцию ВВЕРХ(). Значения элементов должно быть в интервале от 10 до 99;
– вывести значения массива А в верхний одномерный массив;
– вывести значения массива А в двумерный массив согласно принципу
организации пирамидальной структуры данных.
2. Используя разработанную программу, запрограммировать алгоритм
очистки очереди. Для этого:
– обнулить массив А;
– очистить все таблицы формы, используя вывод пустой строки.
Контрольные вопросы:
1. Объясните принцип работы функции ВВЕРХ().
2. Как обратиться к любой ячейке двумерной таблицы?
2.7.3. Алгоритм выборки наибольшего элемента
1. Используя разработанную программу (2.7.1–2.7.2), запрограммировать
алгоритм выборки наибольшего элемента из очереди с приоритетом (операция
«Извлечь наибольший»). Очередной извлекаемый элемент помещать в нижний одномерный массив «Результат выборки». Предусмотреть реакцию как на
отсутствие очереди (пустая очередь), так и на переполнение массива «Результат
выборки». Осуществить вывод обновленной после выборки очереди как в виде
массива, так и в виде дерева.
2. Запрограммировать алгоритм добавления нового элемента в очередь.
Предусмотреть реакцию на переполнение очереди, а также вывод обновленной
после добавления очереди как в виде массива, так и в виде дерева.
3. Запрограммировать алгоритм изменения приоритета элемента очереди.
Предусмотреть реакцию на отсутствие элемента, отсутствие очереди, а также
вывод обновленной после модификации очереди как в виде массива, так и в виде дерева.
Контрольные вопросы:
1. Приведите словесный алгоритм выборки наибольшего элемента из
очереди.
2. Приведите словесный алгоритм добавления нового элемента в очередь.
3. Приведите словесный алгоритм изменения приоритета элемента очереди.

64
2.8. ЗАДАНИЕ ПО ТЕМЕ «ПИРАМИДАЛЬНАЯ СОРТИРОВКА»
1. Добавить на форму заданий 2.5.1–2.6.3 поля для анализа пирамидальной сортировки (рис. 2.18).
Рис. 2.18. Форма для пирамидальной сортировки
2. Запрограммировать алгоритм внутренней сортировки методом пирамидальной сортировки. В таблицу на форме вывести количество сравнений, количество перестановок и время сортировки. К сравнениям должны относиться
только сравнения элементов массива между собой. Одна перестановка — это
перестановка двух элементов массива.
3. Выполнить сравнение времени сортировки методом пирамидальной
сортировки со всеми эффективными алгоритмами внутренней сортировки.
Примерный результат сравнения приведен на рис. 2.19.
Рис. 2.19. Результат сравнения пирамидальной сортировки

65
Контрольные вопросы:
1. Приведите словесный алгоритм организации пирамидального дерева
внутри исходного неупорядоченного массива.
2. Приведите словесный алгоритм получения на основе пирамидального
дерева упорядоченной по возрастанию последовательности элементов.
3. Сравните эффективные алгоритмы сортировки между собой, сделайте
выводы, почему один алгоритм работает быстрее или медленнее другого.
2.9. ЗАДАНИЯ ПО ТЕМЕ «АЛГОРИТМЫ ВНЕШНЕЙ СОРТИРОВКИ»
2.9.1. Алгоритм двухфазной сортировки простым слиянием
1. Разработать интерфейс программного комплекса практических заданий
2.9.1–2.9.5. Пример формы приведен на рис. 2.20. Рисунок демонстрирует толь-
ко функционал разрабатываемой программы. Ваш вариант должен предоставлять неменьшие возможности. Расположение компонент, состав компонент,
оформление частей формы в вашем варианте могут быть другими.
Рис. 2.20. Форма «Алгоритмы внешней сортировки»
Для создания данной формы использовались те же компоненты, что
и в предыдущих практических заданиях.
2. Запрограммировать алгоритм внешней сортировки методом простого
двухфазного слияния. Вместо файлов использовать массивы. В таблицу на
форме вывести количество сравнений, количество присвоений и время сортировки, а также результат проверки того, стал ли массив после выполнения алгоритма отсортированным. Подобрать размер сортируемого массива таким образом, чтобы время сортировки было не менее ста единиц. К сравнениям должны

66
относиться только сравнения элементов массива между собой. К присваиваниям относится любое перемещение элемента из одного массива в другой.
Контрольные вопросы:
1. Чем внешняя сортировка отличается от внутренней?
2. Сколько дополнительных файлов необходимо для выполнения двух-
фазной сортировки простым слиянием?
3. Какова сложность алгоритма двухфазной сортировки простым слия-
нием?
2.9.2. Алгоритм однофазной сортировки простым слиянием
1. Используя разработанную программу (2.9.1), запрограммировать алгоритм внешней сортировки методом однофазной сортировки простым слиянием.
2. Выполнить сравнение времени сортировки методом двухфазной сортировки простым слиянием и методом однофазной сортировки простым слиянием.
Контрольные вопросы:
1. Сколько дополнительных файлов необходимо для выполнения однофазной сортировки простым слиянием?
2. Какова сложность алгоритма однофазной сортировки простым слиянием?
2.9.3. Алгоритм двухфазной сортировки естественным слиянием
1. Используя разработанную программу (2.9.1–2.9.2), запрограммировать
алгоритм внешней сортировки методом двухфазной сортировки естественным
слиянием.
2. Выполнить сравнение времени сортировки следующими методами:
двухфазной сортировки естественным слиянием, двухфазной сортировки простым слиянием и однофазной сортировки простым слиянием.
Контрольные вопросы:
1. Сколько дополнительных файлов необходимо для выполнения двухфазной сортировки естественным слиянием?
2. Что называется серией?
3. В чем отличие простого слияния от естественного?
2.9.4. Алгоритм однофазной сортировки естественным слиянием
1. Используя разработанную программу (2.9.1–2.9.3), запрограммировать
алгоритм внешней сортировки методом однофазной сортировки естественным
слиянием.

67
2. Выполнить сравнение времени сортировки следующими методами: од-
нофазной сортировки естественным слиянием, двухфазной сортировки естественным слиянием, двухфазной сортировки простым слиянием и однофазной
сортировки простым слиянием.
Контрольные вопросы:
1. Сколько дополнительных файлов необходимо для выполнения однофазной сортировки естественным слиянием?
2. Каким образом можно обнаружить конец серии?
2.9.5. Метод полгощения
1. Используя разработанную программу (2.9.1–2.9.4), запрограммировать
алгоритм внешней сортировки методом поглощения.
2. Выполнить сравнение времени сортировки следующими методами:
поглощения, однофазной сортировки естественным слиянием, двухфазной сортировки естественным слиянием, двухфазной сортировки простым слиянием
и однофазной сортировки простым слиянием.
Примерные результаты работы алгоритмов приведены на рис. 2.21.
Рис. 2.21. Результат сравнения алгоритмов внешней сортировки
Контрольные вопросы:
1. Сколько дополнительных файлов необходимо для выполнения сортировки поглощением?
2. В чем заключается алгоритм сортировки методом поглощения?
3. В каком направлении осуществляется просмотр исходного файла?

68
ЛИТЕРАТУРА
1. Лафоре, Р. Структуры данных и алгоритмы в Java. Классика Computers
Science / Р. Лафоре. — 2-е изд. — Санкт-Петербург : Питер, 2013. — 704 с.
2. Создание приложения Windows Forms на C# в Visual Studio. — URL:
https://learn.microsoft.com/ru-ru/visualstudio/ide/create-csharp-winform-visual-studi
o?view=vs-2022 (дата обращения: 07.05.2024).
3. Вирт, Н. Алгоритмы и структуры данных. Новая версия для Оберона /
Н. Вирт. — Москва : ДМК Пресс, 2010. — 272 с.
4. Бабичев, С.Л. Лекции по алгоритмам и структурам данных / С.Л. Баби-
чев. — URL: https://www.babichev.org/books/AlgoBook.pdf (дата обращения:
07.05.2024).
5. Седжвик, Р. Алгоритмы на Java / Р. Седжвик, К. Уэйн. — 4-е изд. —
Москва : Вильямс, 2013. — 848 с.
6. Кормен, Т. Алгоритмы: вводный курс / Т. Кормен. — Москва : Виль-
ямс, 2014. — 208 с.
7. Алгоритмы: построение и анализ / Т. Кормен, Ч. Лейзерсон, Р. Ривест,
К. Штайн. — 2-е изд. — Москва : Вильямс, 2005. — 1296 с.
8. Бхаргава, А. Грокаем алгоритмы. Иллюстрированное пособие для про-
граммистов и любопытствующих / А. Бхаргава. — Санкт-Петербург : Питер,
2017. — 288 с.
9. Алгоритмы и алгоритмические языки. — URL: https://teach-in.ru/file/
synopsis/pdf/algorithms-M-3.pdf (дата обращения: 07.05.2024).
10. Лорин, Г. Сортировка и системы сортировки / Г. Лорин. — Москва :
Наука, 1983. — 384 с.
11. Ахо, Х. Построение и анализ вычислительных алгоритмов / Х. Ахо,
Дж. Хопкрофт, Дж. Ульман. — Москва : Мир, 1979. — 536 с.
12. Фофанов, О.Б. Алгоритмы и структуры данных : учебное пособие /
О.Б. Фофанов ; Томский политехнический университет. — Томск : Изд-во ТПУ,
2014. — 126 с.
13. Алгоритмы. Построение и анализ / Т. Кормен, К. Штайн, Р. Ривест,
Ч. Лейзерсон. — Москва : Диалектика, 2019. — 1324 с.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
