Вычисление наименьшего времени проезда от одного города к другому. Задана карта страны, включающая точки и соединяющие их линии. Точкам соответствуют города, каждый город имеет название. Линиям соответствуют двусторонние дороги, соединяющие города. С каждой линией связано положительное вещественное число – длина данной дороги. Программа должна находить кратчайший путь между двумя заданными городами. Для решения данной задачи подойдет любой алгоритм поиска кратчайшего пути на графе, например, алгоритм Дейкстры. Понятие графа см. http://ru.wikipedia.org/wiki/Теория_графов, а также [2-3], алгоритм Дейкстры см. http://ru.wikipedia.org/wiki/Алгоритм_Дейкстры, а также [2-3].
Вычисление символьных арифметических выражений. Математическое выражение задано в символьной форме, т.е. в виде строки, например, «123+6*(5+4)-4». Программа должна вводить данное выражение в виде строки, разбирает на составные элементы, а затем осуществляет вычисления в соответствии с приоритетами операций.
Решение задачи о рюкзаке. Имеется набор из n предметов со стоимостями v1,v2,...,vn и весами w1,w2,...,wn соответственно. Также имеется рюкзак, способный вместить предметы с суммарным весом не более W. Необходимо выбрать и поместить в рюкзак такие предметы, чтобы суммарная их стоимость была максимальной. Данная задача решается с использованием динамического программирования. См. http://ru.wikipedia.org/wiki/Задача_о_рюкзаке, а также [2-3].
Решение задачи о мостах и точках сочленения в теории графов. Имеется карта, на которой изображены города и соединяющие их дороги. По всем дорогам возможно двустороннее движение. Карта может быть представлена в виде описания городов и дорог (не графическое изображение). Необходимо определить, насколько данная дорожная система надежна, т.е. нужно выявить: 1) дороги, закрытие которых нарушит связь (возможность перемещения) между городами; 2) города, закрытие движения через которые нарушит связь между другими городами; 3) разбиение дорожной системы на подсистемы (подмножества городов и соединяющих их дорог) так, чтобы при закрытии любого города в каждой такой подсистеме не нарушалась связность между остальными городами этой подсистемы. Данная задача решается представлением дорожной системы в виде неориентированного графа: города – вершины графа, дороги – ребра, и отысканием 1) мостов, 2) точек сочленения, 3) двусвязных компонент. См. [4] и [5].
Задача об отыскании наибольшей общей подпоследовательности (динамическое программирование). Даны две последовательности символов (строки), необходимо найти их наибольшую общую подпоследовательности, т.е. такую последовательность символов, которая бы входила в качестве подпоследовательности в обе исходные последовательности и была бы максимальной длины. Говорят, что последовательность s является подпоследовательностью последовательности w, если s состоит из тех символов, что и w, причем порядок их записи соответствует порядку в w. Например, имеется две последовательности символов «ABCDEFG» и «BTDEKLFG», тогда их наибольшая общая подпоследовательности – «BDEFG». Данная задача решается с помощью принципов динамического программирования, см. [3].
Задача о порождении комбинаторных объектов. 1) Имеется некоторая последовательность различных чисел. Породить их всевозможные перестановки. 2) Имеется некоторый набор различных чисел. Породить их всевозможные сочетания. 3) Имеется некоторый набор различных чисел. Породить их всевозможные размещения без повторений. См. [6].
Задача о нахождении эйлерового цикла в графе. Задана дорожная система некоторого государства – имеются города и соединяющие их двусторонние дороги. Необходимо определить, можно ли построить такой маршрут передвижения, чтобы, начав в некотором городе, вернуться в него, пройдя по каждой дороге ровно один раз. Если это возможно, то указать такой маршрут. Дорожная система может быть представлена в виде неориентированного графа, и задача сводится к отысканию в нем эйлерового цикла. См. http://ru.wikipedia.org/wiki/Эйлеров_цикл
Дана прямоугольная доска размера NxM. Определить, можно ли ее обойти конем, побывав в каждой клетке ровно один раз. Если обход возможен, то привести его. См. http://ru.wikipedia.org/wiki/Задача_о_ходе_коня
…( Можно предложить преподавателю свой вариант)
Список литературы:
Павовская, Т.А. Программирование на языке высокого уровня. – СПб.: Питер, 2004 г.
Окулов, С.М. Программирование в алгоритмах: Учеб. изд / С.М. Окулов . - М. : БИНОМ : Лаборатория знаний, 2002.
Кормен, Т. Алгоритмы: построение и анализ. – М.: МЦНМО, 2002.
Седжвик, Р. Фундаментальные алгоритмы на С++. Часть 5. Алгоритмы на графах. – СПб: ООО «ДиаСофтЮП», 2002.
Ахо, А. Структуры данных и алгоритмы. – М.: «Вильямс», 2000.
Иванов, Б.Н. Дискретная математика. Алгоритмы и программы. – М.: Лаборатория Базовых знаний, 2003.
