
- •Варианты заданий для курсового проектирования по дисциплине ен.Ф.02 – «Информатика и программирование».
- •II семестр изучения, раздел «Структуры данных и прикладные алгоритмы»
- •Часть 1. Задачи на структуры данных
- •16. Моделирование системы массового обслуживания.
- •17. Моделирование системы массового обслуживания.
- •Часть 2. Прикладные алгоритмы
- •3.1.2.1.3.4. Сортировка с вычислением адреса
- •3.1.2.1.3.5. Сортировка двухпутевыми вставками
- •3.1.2.2.1. Простой выбор
- •3.1.2.2.3. Задачи на сортировки выбором.
- •3.1.2.2.3.3. Сортировка методом квадратичного выбора.
- •3.1.2.3.1. Простой обмен (пузырьковая сортировка)
- •3.1.2.3.3.5. Сортировка методом подсчета
- •3.1.2.3.3.6. Сортировка методом распределяющего подсчета
- •3.1.2.3.3.7. Сортировка методом четных и нечетных транспозиций
- •3.1.2.4.1. Сортировка слиянием
- •3.1.2.4.4. Задачи на другие сортировки
- •3.1.2.4.4.1. Объединение массивов
- •3.1.2.4.4.2. Бинарное слияние
- •3.1.2.4.4.3. Рекурсивное слияние
- •3.1.2.4.4.4. Естественное слияние
- •3.1.3.1.1.1. Метод перемещения в начало.
- •3.1.3.1.1.2. Метод транспозиции.
- •3.1.3.5.2. Поиск в двусвязном списке
3.1.2.4.4.4. Естественное слияние
В сортировке простым слиянием все массивы имеют одинаковый размер (за исключением, возможно, последнего). Можно, однако, использовать любой порядок, который уже может существовать среди элементов, а подмассивы определить как самые длинные подмассивы из возрастающих элементов.
3.1.3.1.1.1. Метод перемещения в начало.
Этот метод является эффективным только для таблицы, организованной как список. В этом методе, когда поиск выполняется успешно (т. е. когда найдено, что искомый элемент совпадает с ключом некоторой записи в списке), извлеченная запись удаляется из ее текущей позиции в списке и помещается в голову списка. Эта операция, как нам уже известно, не приводит к перемещению данных и сводится к переброске указателей.
3.1.3.1.1.2. Метод транспозиции.
Извлеченная запись меняется местами с записью, которая ей предшествует. Этот метод эффективен как для таблицы, организованной как в виде списка, так и в виде массива, поскольку во втором случае все сводится к обмену местами двух соседних элементов массива и не требует перемещения больших объемов данных.
Оба этих метода основаны на том наблюдении, что запись, которая только что была извлечена, вероятно, будет извлечена снова. При перемещении таких записей в начало таблицы последующие поиски этих записей делаются более эффективными.
3.1.3.2.1. Бинарный поиск в упорядоченной таблице
Бинарный поиск был ранее рассмотрен в разделе 3.1.2.1.2.
3.1.3.2.2. Поиск с накоплением группы запросов в упорядоченной таблице
Идея этого поиска заключается в том, что входной поток искомых элементов накапливается в некоторой структуре в упорядоченном виде; затем ищем элементы в основной таблице, причем для каждого искомого элемента (кроме первого) поиск продолжается не с начала таблицы, а с текущего индекса.
3.1.3.2.3. Индексно — последовательный поиск в упорядоченной таблице
Этот метод заключается в создании дополнительной таблицы, хранящей некоторые «опорные» элементы основной таблицы – как правило, равноотстоящие друг от друга.
3.1.3.5. Задачи на поиск.
3.1.3.5.1. Поиск в циклическом списке
Предположим, что упорядоченная таблица хранится в виде некоторого циклического списка с двумя внешними указателями — table и other. Указатель table всегда указывает на узел, содержащий запись с наименьшим ключом. Указатель other первоначально равен указателю table, но каждый раз, когда выполняется поиск, он переустанавливается так, чтобы указывать на запись, которая извлечена. Если поиск был неудачным, то указатель other переустанавливается так, что он указывает на table. Напишите программу, которая принимает входную информацию TABLE, OTHER и KEY, реализует этот метод, переустанавливает переменную OTHER, как было описано, и устанавливает переменную SEARCH так, чтобы указывать на извлеченную запись или на некоторый пустой указатель, если поиск был неудачным.
3.1.3.5.2. Поиск в двусвязном списке
Рассмотрим некоторую упорядоченную таблицу, представленную как массив или как список с двумя связями, так что поиск в данной таблице может быть осуществлен последовательно вперед или назад. Предположим, что некоторый указатель р указывает на последнюю, успешно извлеченную запись. Поиск всегда начинается с записи, на которую указывает р, но он может продолжаться в любом направлении. Напишите подпрограмму для извлечения записи с ключом key и соответствующей модификации р для массива и для списка с двумя связями. Сравните число сравнений ключа для случаев успешного и неудачного поиска с методами из упражнения 4, где таблица может просматриваться только в одном направлении, но процесс просмотра может начинаться в одной из двух точек.
3.1.3.3. Хеширование таблиц и способы разрешения коллизий
3.1.3.5.4. Разрешение коллизий хеширования методом открытой адресации
Напишите программу, реализующую данный метод.
3.1.3.5.5. Разрешение коллизий хеширования методом цепочек
Напишите программу, реализующую данный метод.
3.1.3.5.6. Метод перемещения в начало для массива
Напишите программу, реализующую данный метод.
3.1.3.5.7. Метод перемещения в начало для списка
Напишите программу, реализующую данный метод.
3.1.3.5.8. Метод транспозиций для массива
Напишите программу, реализующую данный метод.
3.1.3.5.9. Метод накопления группы запросов
Напишите программу, реализующую данный метод.
3.1.3.5.10. Индексно – последовательный поиск
Напишите программу, реализующую данный метод.
3.2.4. Задачи на деревьях
3.2.4.3. Представление предметного указателя
Предметный указатель учебника состоит из упорядоченных по алфавиту основных терминов, каждый из которых сопровождается множеством номеров страниц и множеством подтерминов. Подтермины печатаются на следующих за основным термином строках: они упорядочены по алфавиту внутри основного термина. Каждый подтермин сопровождается множеством номеров страниц.
3.2.4.6. Удаление из дерева бинарного поиска
Приведем теперь алгоритм, который удаляет узел с ключом key из дерева бинарного поиска, после чего это дерево остается опять же деревом бинарного поиска. Всего возможны три случая. Если удаляемый узел не имеет потомков, то он может быть удален без перестройки дерева (рис. 3.13, а)
3.2.5. Задачи на множествах
3.2.5.1. Выбор двух точек для наименьшего отличия подмножеств
Из заданного множества точек на плоскости выбрать две различные точки так, чтобы количества точек, лежащих по разные стороны прямой, проходящей через эти две точки, различались наименьшим образом.
3.2.5.2. Окружность с наибольшим числом точек заданного на плоскости множества
Определить радиус и центр окружности, на которой лежит наибольшее число точек заданного на плоскости множества точек.
3.2.5.5. Расстояние между двумя заданными множествами точек
Расстояние между двумя множествами точек — это расстояние между наиболее близко расположенными точками этих множеств. Найти расстояние между двумя заданными множествами точек на плоскости.
3.2.5.6. Площадь многоугольника
Многоугольник (не обязательно выпуклый) задан на плоскости перечислением координат вершин в порядке обхода его границы. Определить площадь многоугольника.
3.2.5.7. Максимальное число точек в шаре
Задано множество точек М в трехмерном пространстве. Найти такую из них, что шар заданного радиуса с центром в этой точке содержит максимальное число точек из М.
3.2.5.11. Пересечение и разность множеств
Заданы два множества точек на плоскости. Построить пересечение и разность этих множеств.
3.2.5.11. Пересечение и разность множеств
Заданы два множества точек на плоскости. Построить пересечение и разность этих множеств.
12. Составить программу работы с двоичным сбалансированным деревом
следующего вида:
┌──────┐
│info 4│
└─┬──┬─┘
┌────────┘ └───────────┐
┌───┴──┐ ┌──┴───┐
│info 2│ │info 5│
└─┬──┬─┘ └─┬──┬─┘
┌────────────┘ └───────────┐ ┌──┘ └────┐
┌───┴──┐ ┌───┴───┐ ... ...
│info 1│ │info 3 │
└─┬──┬─┘ └─┬──┬──┘
┌─┘ └──┐ ┌────┘ └────┐
... ... ... ...
В дереве информация должна быть отсортирована: значение левого
потомка должно быть меньше значения родителя, а значение правого
потомка больше родителя. Дерево называется сбалансированным если
длина самой длинной ветви и самой короткой отличается не более чем
на единицу. Следует предусмотреть следующие операции с деревом: до-
бавление узла, удаление узла и изменение данных в узле. После до-
бавления или удаления узла следует произвести балансировку дерева.
Изменение данных может привести к перемещению узла из одной точки
дерева в другую, поэтому рекомендуется изменение данных свести к
удалению и добавлению узла. Следует разработать класс Tree - дерево
и на его базе производный класс List - список сотрудников фирмы,
включающий следующую информацию:
1. Фамилия, имя, отчество
2. Год рождения
3. Пол
4. Домашний адрес
5. Домашний телефон
6. Семейное положение
Сотрудники должны быть отсортированы по ключу Фамилия+Имя+Отчество.
По окончанию работы программы следует записывать информацию в файл.
При последующем старте ввод из файла.
Вариант 2
12. Составить программу раскладывания пасьянса, используя при этом
классы "Позиция" и "Карта".
Литература: Ч.Уэзерелл. Этюды для программистов. М.Мир.1982.
с 107-113
11. Разработать класс "N-мерный вектор" со следующими операциями:
"+" - сложение векторов,
"-" - вычитание векторов,
"*" - скалярное умножение векторов,
"*" - умножение вектора на число,
"/" - деление вектора на число,
"=" - присваивание векторов.
12. Составить программу поиска выхода из лабиринта методом ветвей и
границ. Для реализации следует разработать классы: "Лабиринт",
"Клетка", "Стена".
12. Составить программу моделирования машины Тьюринга. Для реализа-
ции следует разработать классы: "Позиция", "Команда".
Литература: Ч.Уэзерелл. Этюды для программистов. М.Мир.1982.
с 71-75
11. Разработать класс "Ряд Фурье (N-слагаемых)" со следующими
операциями:
"+" - сложение рядов,
"-" - вычитание рядов,
"*" - умножение рядов,
"=" - присваивание рядов.
12. Составить программу просмотра текстового файла. В случае, когда текст не помещается на экране следует предусмотреть скроллинг. Файл следует считать в память и представить в виде двус-
вязного списка вида:
│ NULL
┌────┬──┴─┬──────────────────────────────┐
│Next│Prev│Строка 1 │
└─┬──┴──┬─┴──────────────────────────────┘
│ │
┌─┴──┬──┴─┬──────────────────────────────┐
│Next│Prev│Строка 2 │
└─┬──┴──┬─┴──────────────────────────────┘
│ │
..│.....│.................................
│ │
┌─┴──┬──┴─┬──────────────────────────────┐
│Next│Prev│Строка N │
└─┬──┴────┴──────────────────────────────┘
│ NULL
Для реализации программы следует разработать базовый класс
"Двусвязный список" и производный класс "Двусвязный список
строк"
12. Составить программу сортировки таблицы вида:
┌─────────────┬─────────┬───────────────┐
│ Фамилия │ Имя │ Отчество │
├─────────────┼─────────┼───────────────┤
│ │ │ │
│ │ │ │
└─────────────┴─────────┴───────────────┘
Методом пузырька. Для реализации разработать классы "Таблица" и
"Строка таблицы".
12. Составить программу определения наличия или отсутствия в текстовом файле заданной последовательности символов. Для реализации разработать класс "Файл" и "Строка файла".