Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Структурные элементы данных алгоритмы поиска и сортировки. Учебное пособие для СПО

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
51
Для создания данной формы использовались те же компоненты, что и для формы последовательного поиска.
2. Написать функции получения хеш-адреса для рассмотренных выше ме­тодов деления, середины квадрата, свертывания и умножения. В качестве теста для константного ключа K = 45678 с использованием каждой из запрограмми­рованных хеш-функций получить хеш-адрес и вывести в соответствующие поля формы. Хеш-адрес должен быть в диапазоне от 0 до 999.
ВНИМАНИЕ! В программируемых хеш-функциях при вычислении хеш- адресов запрещено использовать преобразование исходных числовых ключей в строку и работать с ней строковыми функциями. Для всех вычислений необхо­димо использовать только операции и функции работы с числовыми данными.
Контрольные вопросы:
1. Когда возникает коллизия при хешировании?
2. Какие хеш-функции используются для формирования хеш-адресов?
3. Каким критериям должен удовлетворять делитель m в методе деления?
2.4.2. Минимализация количества коллизий
Выполнить анализ разработанных хеш-функций (2.4.1) по критерию ми­нимизации количества коллизий (рис. 2.8).
Рис. 2.8. Анализ функций хеширования
52
Для этого необходимо:
1) удалить (или закомментировать) тестовую часть из задания 2.4.1;
2) сгенерировать массив М из 1 000 случайных чисел, значения которых
находятся в диапазоне от 0 до 100 000;
3) используя метод цепочек, определить наиболее эффективную функцию
хеширования следующим способом: последовательно применяя каждую из раз­работанных хеш-функций (2.4.1), заполнять массив цепочек (массив Mas) клю­чами из массива М, подсчитывая количество коллизий (k1, k2, k3, k4);
4) увеличить счетчик лучшей функции (t1, t2, t3 или t4) на 1;
5) выполнить шаги 3, 4 и 5 n раз (n ≥ 100) (количество итераций задается
на форме);
6) вывести счетчики t1, t2, t3, t4 для каждой функции хеширования.
Примечания:
1. В C# цепочки могут быть реализованы с помощью массива коллекций
List. В других языках программирования с этой же целью может использовать- ся контейнерный класс List.
2. Массив М содержит значения в интервале от 0 до 100 000. Ввиду этого
в методе середины квадрата после возведения ключа в квадрат значение может выйти за диапазон целых значений. Следовательно, нужно использовать тип данных «Длинное целое».
3. В каждой итерации может победить не одна, а сразу несколько функ-
ций хеширования, если у них количество коллизий ki одновременно равно ми­нимальному количеству.
Контрольные вопросы:
1. По какому критерию будут оцениваться рассматриваемые хеш-функции?
2. В чем заключается метод середины квадрата?
3. В чем заключается метод свертывания?
2.4.3. Метод открытой адресации
Используя разработанную программу (2.4.1–2.4.2), написать программу оценки временных характеристик поиска ключей для метода открытой адреса­ции (рис. 2.9). Для этого необходимо:
1) используя наилучшую по эффективности функцию хеширования, из
массива М1 заполнить 10 000 случайных ключей соответствующую структуру хранения согласно методу открытой адресации (массив МОА), причем значения ключей должны находиться в интервале от 0 до 10 000;
53
2) для 10 000 случайных ключей (массив М2) определить время их поиска
методом открытой адресации, причем значения ключей должны находиться в интервале от 0 до 20 000;
3) для метода открытой адресации вывести время поиска (t), среднее чис-
ло сравнений (Sср) и количество найденных ключей (K).
Рис. 2.9. Метод открытой адресации
Контрольные вопросы:
1. В чем заключается метод открытой адресации?
2. Раскройте основные недостатки разрешения коллизий методом откры-
той адресации.
2.4.4. Метод цепочек
Продолжаем исследовать методы разрешения коллизий (рис. 2.10). Зада­ча — сравнение реализованного в практическом задании 2.4.3 метода открытой адресации с методом цепочек. Поэтому все входные массивы (М1 и М2) должны быть одни и те же и содержать одинаковые данные. Для этого необходимо:
54
1) используя функцию хеширования из массива М1 заполнить 10 000 слу-
чайных ключей соответствующую структуру хранения согласно методу цепо­чек (массив МС), причем значения ключей должны находиться в интервале от 0 до 10 000;
2) для 10 000 случайных ключей (массив М2) определить время их поиска методом открытой адресации, причем значения ключей должны находиться в интервале от 0 до 20 000;
3) для метода цепочек вывести время поиска (t), среднее число сравнений (Sср) и количество найденных ключей (K).
Рис. 2.10. Метод цепочек
ВНИМАНИЕ! В окончательном варианте программы вы должны запол-
нить массив М1 случайными значениями в интервале от 1 до 10 000. Затем, ис­пользуя одну и ту же функцию хеширования, из массива М1 перенести данные в массивы МОА и МС. После этого вы заполняете массив М2 случайными зна­чениями в интервале от 1 до 20 000. Используя ту же функцию хеширования, осуществляете поиск ключей из массива М2 сначала в МОА, затем в МС, снимая показатели t, Sср и K.
Окончательный вариант возможных результатов работы программы при-
веден на рис. 2.11.
55
Рис. 2.11
Контрольные вопросы:
1. В чем заключается метод цепочек?
2. Раскройте основные достоинства разрешения коллизий методом це­почек.
2.5. ЗАДАНИЯ ПО ТЕМЕ «КЛАССИЧЕСКИЕ АЛГОРИТМЫ ВНУТРЕННЕЙ СОРТИРОВКИ»
2.5.1. Функционал программы
1. Разработать интерфейс программного комплекса практических заданий
№ 2.5.1–2.5.6. Пример формы приведен на рис. 2.12. Рисунок демонстрирует только функционал разрабатываемой программы. Ваш вариант должен предо­ставлять неменьшие возможности. Расположение компонент, состав компонент, оформление частей формы в вашем варианте могут быть другими.
56
Рис. 2.12. Форма «Алгоритмы внутренней сортировки»
Для отображения табличных данных в C# используется компонент
DataGridView.
После размещения на форме система создает переменную с именем dataGridView1. С помощью этого имени можно программно оперировать мето- дами и свойствами этого элемента управления. Например, для задания числа строк и столбцов в методе активации формы можно использовать следую­щий код:
dataGridView1.RowCount = 7; // число строк;
dataGridView1.ColumnCount = 6; // число столбцов.
Вставка значения в первый столбец нулевой строки осуществляется ко­мандой:
dataGridView1.Rows[0].Cells[1].Value = «Обмен».
Управление столбцами данного компонента осуществляется с помощью диалогового окна Edit Columns (рис. 2.13), которое можно открыть с помощью контекстного меню или свойства Columns.
Рис. 2.13. Окно Edit Columns
57
Большинство свойств этого окна интуитивно понятны. Например, свой­ство ColumnType позволяет задать тип столбца, а свойство DataGridView- CheckBoxColumn — столбец типа CheckBox, т. е. флаговую кнопку, с помо- щью которой на форме можно будет включить или отключить сортировку того или иного метода. Установить флажок для одного из полей этого столбца мож­но с помощью кода:
dataGridView1.Rows[0].Cells[0].Value = true.
Еще одно новшество на рис. 2.12 — кнопка с рисунком. На самом деле используется уже известный нам компонент Button, для которого установлено свойство Image.
Контрольные вопросы:
1. Какой компонент используется в С# для отображения табличных
данных?
2. Каким образом можно добавить на кнопку рисунок?
3. Как обратиться к отдельной ячейке dataGridView?
2.5.2. Метод прямого обмена
1. Используя разработанную программу (2.5.1), запрограммировать алго­ритм внутренней сортировки методом прямого обмена. В таблицу на форме вы­вести количество сравнений, количество перестановок и время сортировки, а также результат проверки того, стал ли массив после выполнения алгоритма от­сортированным. Подобрать размер сортируемого массива таким образом, чтобы время сортировки было не менее ста единиц. К сравнениям должны относиться только сравнения элементов массива между собой. Одна перестановка — это перестановка двух элементов массива.
2. Запрограммировать алгоритм внутренней сортировки методом прямого выбора.
3. Выполнить сравнение времени сортировки методом прямого обмена и методом прямого выбора.
Контрольные вопросы:
1. Какова сложность алгоритма сортировки прямым обменом?
2. Каково среднее, минимальное и максимальное число сравнений для ал- горитма сортировки прямым обменом?
3. Каково среднее, минимальное и максимальное число перестановок для алгоритма сортировки прямым обменом?
4. Какова сложность алгоритма сортировки прямым выбором?
58
5. Каково среднее, минимальное и максимальное число сравнений для ал- горитма сортировки прямым выбором?
6. Каково среднее, минимальное и максимальное число перестановок для алгоритма сортировки прямым выбором?
7. За счет чего алгоритм сортировки прямым выбором выполняет сорти- ровку в среднем быстрее, чем алгоритм сортировки прямым обменом?
2.5.3. Метод прямого включения
1. Используя разработанную программу (2.5.1; 2.5.2), запрограммировать алгоритм сортировки методом прямого включения.
2. Выполнить сравнение времени сортировки методом прямого обмена, методом прямого выбора и методом прямого включения.
Примерный результат работы программы приведен на рис. 2.14.
Рис. 2.14. Результат сравнения классических алгоритмов сортировки
Контрольные вопросы:
1. Какова сложность алгоритма сортировки прямого включения?
2. Каково среднее, минимальное и максимальное число сравнений для ал- горитма сортировки прямым включением?
3. Каково среднее, минимальное и максимальное число перестановок для алгоритма сортировки прямым включением?
4. За счет чего алгоритм сортировки прямым включением выполняет сор-
тировку в среднем быстрее, чем алгоритм сортировки прямым обменом и сор­тировки прямым выбором?
59
2.6. ЗАДАНИЯ ПО ТЕМЕ «ЭФФЕКТИВНЫЕ АЛГОРИТМЫ ВНУТРЕННЕЙ СОРТИРОВКИ»
2.6.1. Алгоритм быстрой сортировки
1. Используя разработанную программу (2.5.1–2.5.3), запрограммировать алгоритм быстрой сортировки. В таблицу на форме вывести количество срав­нений, количество перестановок и время сортировки. Подобрать размер сорти­руемого массива таким образом, чтобы время сортировки было не менее ста единиц. К сравнениям должны относиться только сравнения элементов массива между собой. Одна перестановка — это перестановка двух элементов массива.
2. Выполнить сравнение времени сортировки методами прямого включе­ния и быстрой сортировки.
Контрольные вопросы:
1. Какова сложность алгоритма быстрой сортировки?
2. Что такое центральный элемент массива?
3. Перечислите недостатки быстрой сортировки.
2.6.2. Алгоритм сортировки Шелла
Используя разработанную программу (2.5.1–2.6.1), запрограммировать ал­горитм сортировки Шелла. В таблицу на форме вывести количество сравнений, количество перестановок и время сортировки. Подобрать размер сортируемого массива таким образом, чтобы время сортировки было не менее ста единиц.
2. Выполнить сравнение времени быстрой сортировки и сортировки
Шелла.
Контрольные вопросы:
1. Какая сортировка лежит в основе сортировки Шелла?
2. Каков алгоритм вычисления шага по Вирту?
3. Чему равен первый шаг сравнения при n = 25?
2.6.3. Алгоритм линейной сортировки
1. Используя разработанную программу (2.5.1–2.6.2), запрограммировать
алгоритм внутренней сортировки подсчетом (линейная сортировка). В таблицу на форме вывести количество сравнений, количество присвоений и время сор­тировки. Подобрать размер сортируемого массива таким образом, чтобы время сортировки было не менее ста единиц. К сравнениям должны относиться толь­ко сравнения элементов массива между собой. Присвоение — это занесение значения либо в массив B, либо в массив А.
60
2. Вычислить время выполнения сортировки массива с помощью встро-
енной функции сортировки. На форму вывести время сортировки. Подобрать размер сортируемого массива таким образом, чтобы время сортировки было не менее ста единиц.
3. Выполнить сравнение времени линейной сортировки, быстрой сорти-
ровки, сортировки Шелла и встроенной сортировки.
Примерный результат работы программы приведен на рис. 2.15.
Рис. 2.15. Результат сравнения эффективных алгоритмов сортировки
Контрольные вопросы:
1. Какова сложность алгоритма линейной сортировки?
2. Какова сложность третьего шага алгоритма линейной сортировки?
3. Какое ограничение накладывается на использование алгоритма линей-
ной сортировки?
2.7. ЗАДАНИЯ ПО ТЕМЕ «ОЧЕРЕДИ С ПРИОРИТЕТАМИ»
2.7.1. Основные операции
1. Разработать интерфейс программного комплекса практических заданий
2.7.1–2.7.3. Пример формы приведен на рис. 2.16. Рисунок демонстрирует толь-
ко функционал разрабатываемой программы. Ваш вариант должен предостав­лять неменьшие возможности. Расположение компонент, состав компонент, оформление частей формы в вашем варианте могут быть другими.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]