
Программирование.-6
.pdf3.4.4 Двоичные деревья поиска (BST-деревья)
Перечень вопросов, подлежащих изучению
1.Способы добавления элементов в дерево.
2.Фундаментальные операции над деревьями.
3.Методы печати элементов дерева.
4.Разделение дерева относительно k-того наименьшего.
5.Удаление элементов из дерева.
Методические рекомендации по изучению
Изучение этой темы желательно выполнять после знакомства с динамическими структурами данных. Рекомендуется составить план самостоятельной работы, так как это перечислено выше. Для закрепления материала попробуйте выполнить изученные алгоритмы на бумаге, на примере произвольной последовательности данных. После этого можно приступить к программной реализации алгоритмов. Обратите внимание – большинство функций работы с деревьями реализованы рекурсивно. В качестве дополнительного задания попробуйте выполнить не рекурсивную реализацию.
Рекомендуемые источники
Мещеряков, Р.В. Методы программирования [Электронный ресурс] : учебно-методиче- ское пособие / Р.В. Мещеряков. – Электрон. дан. – Москва : ТУСУР, 2007. – 237 с. – Режим доступа: https://e.lanbook.com/book/11631. – Загл. с экрана. Стр. 81 – 108.
Вирт, Н. Алгоритмы и структуры данных. Новая версия для Оберона [Электронный ресурс] : учебное пособие / Н. Вирт. – Электрон. дан. – Москва : ДМК Пресс, 2010. – 272 с. –
Режим доступа: https://e.lanbook.com/book/1261. – Загл. с экрана. Стр. 191 – 255.
3.4.5 Поиск
Перечень вопросов, подлежащих изучению
1.Поиск элементов в массиве.
2.Бинарный поиск.
3.Интерполяционный поиск.
4.Поиск подстроки в строке.
Методические рекомендации по изучению
Алгоритмы поиска встречаются в программировании повсеместно. При изучении этой темы студенты должны выделить три способа организации поиска в линейной структуре данных. После изучения всех трех способов сравните оценки сложности рассматриваемых алгоритмов. Вторая часть темы посвящена различным алгоритмам поиска подстроки в строке (в тексте). К таким алгоритмам относятся алгоритм поиска Боуера-Мура, алгоритм Кнута, Морриса и Пратта, прямой алгоритм. Ознакомьтесь с этими алгоритмами, попробуйте выполнить реализацию. Сравните алгоритмы по сложности.
Рекомендуемые источники
Вирт, Н. Алгоритмы и структуры данных. Новая версия для Оберона [Электронный ресурс] : учебное пособие / Н. Вирт. – Электрон. дан. – Москва : ДМК Пресс, 2010. – 272 с. –
Режим доступа: https://e.lanbook.com/book/1261. – Загл. с экрана. Стр. 54 – 64.
31
3.5 Подготовка к экзамену
Студенты дневной формы обучения заканчивают изучение дисциплины сдачей экзамена. Выполнение всех видов самостоятельных работ, лабораторных работ, посещение практических и лекционных занятий – гарантия успешной сдачи экзамена.
Для подготовки к экзамену рекомендуется повторить темы, вынесенные на экзамен. При подготовке обращайтесь не только к конспектам лекций, но и к рекомендованным преподавателем источникам. Организуйте план повторения материала таким образом, чтобы каждый день прорабатывать примерно одинаковый по объему материал. Изучая учебники и учебные пособия, отвечайте на контрольные вопросы. Прорешайте задачи примерного билета. Если после изучения материала Вы не смогли найти ответы на какие-либо вопросы – посетите консультацию перед экзаменом, кроме ответов на вопросы по теме экзамена на консультации освещаются организационные вопросы проведения экзамена время начала экзамена, время проведения экзамена, план проведения экзамена и т.д..
Пример экзаменационного билета
Билет 1
Теоретическая часть
1.Запишите алгоритм сортировки обменом.
2.Продемонстрируйте работу сортировки Шелла на массиве
9 8 0 6 13 7 18 11 1 13 16 13 12 1 4 16 3 10 1 3 с шагом 3
3.Нарисуйте дерево разбиений, которое строит нисходящая сортировка слиянием при обработке массива из 25 элементов.
4.Продемонстрируйте алгоритм MSD сортировки на массиве:
40464
18401
61242
74330
75675
99500
12042
13384
25745
33713
5.Постройте таблицу сдвигов (КМП-алгоритм) для образа «тригонометрия»
6.Постройте дерево методом вставки в лист, если элементы в дерево добавлялись в следующем порядке 13 12 8 18 22 0 16 25 29 13 6 17 13 17 15 16. Продемонстрируйте ротацию влево в узле 18.
Практическая часть
1.В текстовом файле записан массив целых чисел. Считать массив из файла. Найти сумму чисел. В конец исходного файла дописать строку: «Сумма чисел = [найденная сумма]».
2.Написать:
функцию создания двоичного файла, содержащего матрицу целых чисел размерности nxm. Значения n, m задаются с клавиатуры. Элементы матрицы – целыe случайные числа;
функцию печати содержимого двоичного файла; функцию, выводящую на экран четные столбцы матрицы, не считывая при этом мат-
рицу в память.
32
3. В текстовом файле хранится произвольное количество чисел. Считать данные из файла в однонаправленный динамический список, организованный по правилу очереди (первое число из файла должно оказаться в «голове», последнее в «хвосте» списка). Поменять местами первый и последний элементы списка.
33
4 РЕКОМЕНДУЕМЫЕ ИСТОЧНИКИ
1. Мещеряков, Р.В. Методы программирования [Электронный ресурс] : учебно-методическое пособие / Р.В. Мещеряков. – Электрон. дан. – Москва : ТУСУР, 2007. – 237 с. – Режим доступа: https://e.lanbook.com/book/11631.
– Загл. с экрана.
2. Потопахин, В. Искусство алгоритмизации [Электронный ресурс] / В. Потопахин. – Электрон. дан. – Москва : ДМК Пресс, 2011. – 320 с. – Режим доступа: https://e.lanbook.com/book/1269 . – Загл. с экрана.
3.Вирт, Н. Алгоритмы и структуры данных. Новая версия для Оберона [Электронный ресурс] : учебное пособие / Н. Вирт. – Электрон. дан. – Москва : ДМК Пресс, 2010. – 272 с. – Режим доступа: https://e.lanbook.com/book/1261. – Загл. с экрана.
4.Пермякова, Н.В. Информатика и программирование: Учебное пособие [Электронный ресурс] / Н.В. Пер-
мякова – Томск: ТУСУР, 2016. – 188 с. – Режим доступа: https://edu.tusur.ru/publications/7678
34

ПРИЛОЖЕНИЕ А
Темы и примерные варианты контрольных работ
1.Характеристики сортировок. Оценка сложности алгоритма
Вариант 1 Фамилия___________________________
Является ли сортировка выбором |
Найдите оценку временной слож- |
устойчивой? Поясните, почему. |
ности фрагмента программы: |
(Приведите пример) |
int i = 2; |
|
int n = … |
|
while(i<=n){ |
|
printf(“%d ”,i); |
|
i+=3; |
|
} |
|
|
2.Улучшенные сортировки
Вариант 1
Фамилия______________________________
Постройте начальную пирамиду на массиве 1 6 2 0 4 5 7 9 3.
3.Сортировка слиянием
Фамилия _____________________
1. Продемонстрируйте последо- |
2. Постройте дерево разбиений , |
|
вательность шагов при нисходя- |
которое строит восходящая сор- |
|
щей сортировке слиянием на мас- |
тировка слиянием при упорядо- |
|
сиве |
|
чивании массива из 12 элемен- |
5 2 6 9 7 3 10 8 11 1 4 |
тов. |
|
|
|
|
4. |
Поразрядные сортировки |
|
|
|
|
Фамилия _____________________ |
|
|
1. Продемонстрируйте алгоритм |
2. Продемонстрируйте алгоритм |
|
MSD сортировки с R=10 на сле- |
LSD сортировки для последова- |
|
дующей последовательности: |
тельности |
|
0.1234 |
|
0110 |
0.1123 |
|
1000 |
0.2345 |
|
0011 |
0.1135 |
|
1001 |
0.2245 |
|
0001 |
0.2346 |
|
|
0.1126 |
|
|
5. Поиск подстроки в строке |
|
|
|
|
|
Фамилия _____________________ |
|
|
Метод Кнута, Морриса и Пратта. |
Метод Боуера-Мура. Рассчитайте |
|
Рассчитайте таблицу сдвигов для |
таблицу сдвигов для подстроки |
|
подстроки ABSDABSDF |
VDFSDERH |
|
|
|
|
6. |
Двоичные деревья |
|
|
|
|
Фамилия _____________________ |
|
|
Постройте BST-дерево из исход- |
Перечислите узлы построенного |
|
ного массива |
дерева в порядке прямого обхода |
|
|
6 4 3 8 1 9 2 7 0 5 |
|
|
|
|
7.Двоичные деревья. Ротации
35

Вариант 1. Фамилия _____________________________________________
Постройте BST-дерево. Выполните ротацию влево в корне
13 28 24 26 2 25 30 18 18 14 30 31 10 6 30 17
8.Двоичные деревья. Разделение относительно k-того наименьшего
Вариант 1. Фамилия _____________________________________________
Постройте BST-дерево. Разделите дерево относительно 5-го наименьшего элемента.
13 28 24 26 2 25 30 18 18 14 30 31 10 6 30 17
36