МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Чувашский государственный университет имени И.Н.Ульянова» Факультет информатики и вычислительной техники Кафедра вычислительной техники «УТВЕРЖДАЮ» Проректор по учебной работе ______________________А.Ю. Александров " 27 " декабря 2013 г. РАБОЧАЯ ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ «СТРУКТУРЫ И АЛГОРИТМЫ ОБРАБОТКИ ДАННЫХ» Направление подготовки 230100 Информатика и вычислительная техника Квалификация выпускника 62 – бакалавр Профиль – 05– Программное обеспечение автоматизированных систем Форма обучения – очная Учебный план 2011 года приема Цикл дисциплин – Профессиональный Компонент цикла дисциплин – Вариативная часть, обязательные дисциплины (Б3.В.ОД.1) Курс – 2 Семестры – 3, 4 Всего часов – 216 (6 зач. ед.) Чебоксары – 2013 2 Рабочая программа основана на требованиях Федерального государственного образовательного стандарта высшего профессионального образования по направлению подготовки 230100 «Информатика и вычислительная техника», утвержденного приказом Минобрнауки 09 ноября 2009 г. № 553, и в соответствии с рабочим учебным планом, утвержденным проректором по учебной работе 13 декабря 2013 г. СОСТАВИТЕЛЬ: кандидат технических наук, доцент ________________________ Л.А. Павлов ________________________ В.А. Васильев ОБСУЖДЕНО: на заседании кафедры вычислительной техники «13» декабря 2013 г., протокол № 3 заведующий кафедрой ________________________ Б.М. Калмыков ОДОБРЕНО: методической комиссией факультета информатики и вычислительной техники «13» декабря 2013г., протокол № 3 декан факультета ________________________ СОГЛАСОВАНО: Начальник учебно-методического управления Б.М. Калмыков _________________ М.Ю. Харитонов 3 1. Цель освоения учебной дисциплины Цель изучения дисциплины – знакомство с основными структурами данных, алгоритмами их создания и обработки, методами теоретического и экспериментального анализа алгоритмов для определения их сложности, приобретение практических навыков в реализации этих структур и алгоритмов в прикладных программах. Дисциплина обеспечивает совершенствование навыков, полученных при изучении основ программирования. Акцент смещается на стадию разработки алгоритмов, под которую подводится теоретическая база. В основу закладывается понятие эффективности алгоритма. Дисциплина находится на стыке программирования и математики с большей ориентацией на практическое использование в программировании. Дисциплина формирует базовые знания для дисциплин, связанных с изучением и разработкой программного обеспечения. Задачами преподавания дисциплины являются: сформировать базовые теоретические понятия, лежащие в основе процесса разработки алгоритмов и структур данных; развить навыки применения основных структур данных и типовых алгоритмов их создания и обработки; определения теоретической и экспериментальной оценок временной и емкостной сложности алгоритмов; выбора структур данных при проектировании алгоритмов с целью повышения их эффективности; выработать представление о возможностях конкретной системы программирования в плане реализации различных структур данных и об эффекте, достигаемом при применении структур и алгоритмов в программировании; сформировать умение правильно выбирать структуры данных при проектировании алгоритмов с целью повышения эффективности алгоритмов, реализовать их в конкретной системе программирования; обеспечить получение практического опыта определения теоретической и экспериментальной оценок временной и емкостной сложности алгоритмов, уяснить связь сложности алгоритма со свойствами структур данных. 2. Место учебной дисциплины в структуре ООП ВПО Дисциплина относится к обязательным дисциплинам вариативной части профессионального цикла. ООП ВПО предъявляет следующие требования к содержанию дисциплины: Абстрактный тип данных: спецификация, представление, реализация; линейные структуры данных: стек, очередь, дек; нелинейные структуры данных: иерархические списки, деревья и леса, бинарные деревья; обходы деревьев; задачи поиска и кодирования (сжатия) данных, кодовые деревья, оптимальные префиксные коды; исчерпывающий поиск: перебор с возвратом, метод ветвей и границ, динамическое программирование; быстрый поиск: бинарный поиск, хеширование; использование деревьев в задачах поиска: бинарные деревья поиска, случайные, оптимальные, сбалансированные по высоте (АВЛ) и рандомизированные деревья поиска; задачи сортировки; внутренняя и внешняя сортировки; алгоритмы сортировки; оптимальная сортировка; порядковые статистики; анализ сложности и эффективности алгоритмов поиска и сортировки; файлы: организация и обработка, представление деревьями: B-деревья; алгоритмы на графах: представления графов, схемы поиска в глубину и ширину, минимальное остовное дерево, кратчайшие пути; теория сложности алгоритмов: NP-сложные и труднорешаемые задачи. Дисциплина опирается на знания, умения и навыки, которые студенты должны получить при изучении дисциплин: «Алгебра и геометрия», «Математический анализ», «Дискретная математика», «Математическая логика и теория алгоритмов», «Вычислительная математика», «Теория вероятностей, математическая статистика и случайные процессы», «Информатика», «Программирование». Дисциплина дает теоретическую основу для успешного освоения последующих дисциплин: «Базы данных», «Визуальное программирование», «Web-программирование», «Функциональное и 4 логическое программирование», «Объектно-ориентированное программирование», «Теория языков программирования и методы трансляции», «Технология разработки программного обеспечения», «Системы управления базами данных», «Системное программирование», «Программирование распределенных вычислений», «Программирование на языке Java», «Проектирование компиляторов», «Микропроцессорные системы», «Операционные системы». 3. Компетенции студента, формируемые в результате освоения учебной дисциплины, ожидаемые результаты образования и компетенции студента по завершении освоения программы учебной дисциплины Процесс изучения дисциплины направлен на формирование следующих компетенций: владеет культурой мышления, способен к обобщению, анализу, восприятию информации, постановке цели и выбору путей ее достижения (ОК-1); умеет логически верно, аргументировано и ясно строить устную и письменную речь (ОК2); стремится к саморазвитию, повышению своей квалификации и мастерства (ОК-6); осознает социальную значимость своей будущей профессии, обладает высокой мотивацией к выполнению профессиональной деятельности (ОК-8); использует основные законы естественнонаучных дисциплин в профессиональной деятельности, применяет методы математического анализа и моделирования, теоретического и экспериментального исследования (ОК-10); осознает сущность и значение информации в развитии современного общества; владеет основными методами, способами и средствами получения, хранения, переработки информации (ОК-11); имеет навыки работы с компьютером как средством управления информацией (ОК-12); разрабатывать модели компонентов информационных систем, включая модели баз данных (ПК-4); проектно-технологическая деятельность: разрабатывать компоненты программных комплексов и баз данных, использовать современные инструментальные средства и технологии программирования (ПК-5); научно-исследовательская деятельность: обосновывать принимаемые проектные решения, осуществлять постановку и выполнять эксперименты по проверке их корректности и эффективности (ПК-6); готовить презентации, научно-технические отчеты по результатам выполненной работы, оформлять результаты исследований в виде статей и докладов на научно-технических конференциях (ПК-7). В результате изучения дисциплины студенты должны знать: современные технические и программные средства взаимодействия с ЭВМ; основные методы разработки алгоритмов и программ, структур данных, используемые для представления типовых информационных объектов; технологию разработки алгоритмов и программ, методы отладки и решения задач на ЭВМ в различных режимах; основные задачи анализа алгоритмов; основные алгоритмы и характеристики их сложности для типовых задач, часто встречающихся в области информатики и программирования; уметь: ставить задачу и разрабатывать алгоритм ее решения, использовать прикладные системы программирования, разрабатывать основные программные документы; работать с современными системами программирования; разрабатывать эффективные алгоритмы различных классов, выбирая подходящие структуры данных для представления информационных объектов; 5 оценивать возможности конкретной системы программирования в плане реализации различных структур данных и алгоритмов; применять математический аппарат для анализа сложности алгоритмов; реализовывать алгоритмы и используемые структуры данных средствами языков программирования; экспериментально исследовать эффективность алгоритмов и программ; владеть: языками процедурного и объектно-ориентированного программирования, навыками разработки и отладки программ не менее чем на одном из алгоритмических процедурных языков программирования высокого уровня; методами и средствами разработки и оформления технической документации. теоретическими и экспериментальными методами анализа алгоритмов; навыками разработки структур, алгоритмов и программ обработки данных; навыками определения теоретической и экспериментальной оценок временной и емкостной сложности алгоритмов. 6 4. Структура и содержание учебной дисциплины 4.1. Структура дисциплины № п/п 1 2 3 4 5 6 Наименование раздела Содержание раздела дисциплины Алгоритмы и Предмет дисциплины, ее объем, содержание и связь с друих сложности гими дисциплинами учебного плана. Цели и задачи дисциплины. Алгоритмизация как основная стадия проектирования прикладных программ. Временная и емкостная сложности. Общие принципы анализа алгоритмов. Асимптотические обозначения. Определение времени работы алгоритмов. Рекуррентные соотношения. Структуры Понятие данных. Примитивные данные. Абстрактные типы данных данных. Последовательности, множества и мультимножества и их представление. Стеки, очереди. Последовательное и связанное представление стеков и очередей. Очередь с приоритетами. Деревья. Уровни узлов, высота дерева, длины внутренних и внешних путей. Бинарные деревья. Машинные представления деревьев. Прохождения деревьев. Прошитые деревья. Исчерпываю- Поиск с возвратом. Оценка сложности выполнения. Спосощий поиск бы программирования. Теоретическая и экспериментальная оценка эффективности поиска с возвратом. Метод МонтеКарло. Метод ветвей и границ. Метод альфа-бета отсечений. Эвристические алгоритмы. Методы решета. Модульное решето. Рекурсивное решето. Генерация элементарных комбинаторных объектов. Методы поис- Последовательный поиск. ка Логарифмический поиск в статических таблицах. Логарифмический поиск в динамических таблицах. Деревья бинарного поиска (ДБП). Сбалансированные ДБП (АВЛ-деревья, красно-черные деревья): балансировка, включение и исключение с балансировкой. Цифровой поиск. Хеширование. Хеш-функции. Разрешение коллизий. Внешний поиск. В-деревья. Сортировка Задача сортировки. Классификация методов сортировки. Нижние оценки эффективности алгоритмов сортировки. Внутренняя сортировка. Порядковые статистики. Внешняя сортировка. Алгоритмы на Представления графов. Поиск в глубину. Поиск в ширину. графах Остовные деревья. Построение остовных деревьев. Минимальное остовное дерево. Связные, двусвязные и сильно связные компоненты. Топологическая сортировка. Транзитивное замыкание. Фундаментальные множества циклов и их отыскание. Эйлеров цикл. Гамильтонов цикл. Кратчайшие пути между вершинами графа. Формируемые компетенции (ОК, ПК) ОК-1,2,6,8,10 ОК-1,2,6,8,10, 11,12 ПК-4,5,6,7 ОК-1,2,6,8,10, 11,12 ПК-4,5,6,7 ОК-1,2,6,8,10, 11,12 ПК-4,5,6,7 ОК-1,2,6,8,10, 11,12 ПК-4,5,6,7 ОК-1,2,6,8,10, 11,12 ПК-4,5,6,7 7 4.2. Объем дисциплины и виды учебной работы № п/п 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Аудиторные занятия Семестр 3 Раздел 1. Алгоритмы и их сложности Тема 1. Введение Тема 2. Асимптотические обозначения Тема 3. Рекуррентные соотношения Раздел 2. Структуры данных Тема 4. Абстрактные типы данных. Представление множеств Тема 5. Стеки и очереди. Тема 6. Деревья Тема 7. Прохождения деревьев Тема 8. Расширенные бинарные деревья Раздел 3. Исчерпывающий поиск Тема 9. Поиск с возвратом Тема 10. Метод ветвей и границ Тема 11. Методы решета Тема 12. Генерация элементарных комбинаторных объектов Семестр 4 Раздел 4. Методы поиска Тема 13. Последовательный поиск. Логарифмический поиск в статических таблицах Тема 14. Логарифмический поиск в динамических таблицах Тема 15. Поиск с хешированием Тема 16. Внешний поиск Раздел 5. Сортировка Тема 17. Методы сортировки Тема 18. Внутренняя сортировка Тема 19. Внешняя сортировка Из них в Само- Контроль Практи- ЛабораинтерЛекстоя- самосто- Всего ческие торные активции тельная ятельной часов занятия занятия ной работа работы форме 2 2 1 2 3 2 2 4 4 2 6 4 2 4 10 6 10 2 4 2 2 2 4 2 4 2 4 2 4 4 6 2 2 2 2 8 10 2 2 2 2 2 2 1 6 3 2 2 2 2 6 2 4 8 4 16 8 2 2 2 6 2 2 2 4 2 2 8 2 14 2 1 3 8 8 Раздел 5. Алгоритмы на графах 20 Тема 20. Представление гра2 2 1 6 2 фов. Поиск в глубину. Поиск в ширину 21 Тема 21. Остовные деревья 4 2 1 7 2 22 Тема 22. Связность графов 2 2 1 5 2 23 Тема 23. Топологическая сор2 2 1 5 2 тировка. Транзитивное замыкание 24 Тема 24. Циклы в графе. 2 2 2 6 2 25 Тема 25. Кратчайшие пути 2 2 2 1 7 2 Расчетно-графическая работа 18 18 Экзамен 42 42 Итого 64 48 94 2 216 48 Вид промежуточной аттестации: зачет в 3 семестре, экзамен в 4 семестре, расчетнографическая работа в 4 семестре. 4.3. Темы занятий и краткое содержание Тема 1. Введение Лекция 1. Предмет дисциплины, ее объем, содержание и связь с другими дисциплинами учебного плана. Цели и задачи дисциплины. Алгоритмизация как основная стадия проектирования прикладных программ. Псевдокод для записи алгоритмов. Тема 2. Асимптотические обозначения Лекция 2. Временная и емкостная сложности алгоритмов. Асимптотическая сложность алгоритмов как скорость роста функций. Асимптотические обозначения скорости роста функций. Определение времени работы алгоритма и его асимптотической сложности. Тема 3. Рекуррентные соотношения Лекция 3. Получение рекуррентных соотношений при анализе рекурсивных алгоритмов. Методы решения рекуррентных соотношений: метод подстановки, метод итераций, общий метод. Тема 4. Абстрактные типы данных. Представление множеств Лекция 4. Понятие данных. Примитивные данные. Абстрактные типы данных. Структуры данных для представления множеств (мультимножеств и последовательностей). Последовательное распределение. Характеристический вектор. Лекция 5. Связанное распределение. Использование динамических структур (связанных списков) для представления множеств. Реализация связанных списков. Разновидности связанных списков (списки с заголовком, циклические списки, дважды связанные списки). Тема 5. Стеки и очереди. Лекция 6. Стек как динамическая структура типа LIFO. Основные операции со стеком. Последовательная и связанная реализация стека. Очередь как динамическая структура типа FIFO. Основные операции с очередью. Последовательная и связанная реализация очереди. Очередь с приоритетами. Лабораторное занятие 1. Стеки. Реализация стеков и выполняемых над ними операций различными способами (метод. указания [15], работа 1). Лабораторное занятие 2. Очереди. Реализация очередй и выполняемых над ними операций различными способами (метод. указания [15], работа 1). Тема 6. Деревья Лекция 7. Понятие конечного корневого дерева, леса. Основные определения. Дерево (лес) как структура данных для представления множеств. Бинарное дерево. Естественное соответствие между лесами и бинарными деревьями. Представления деревьев. Лабораторное занятие 3. Представления деревьев. Реализация узлового представления бинарного дерева (метод. указания [15], работа 2). 9 Тема 7. Прохождения деревьев Лекция 8. Основные прохождения деревьев: прямое, обратное, горизонтальное и симметричное (для бинарных деревьев). Алгоритмы прохождения деревьев. Повышение эффективности прохождения деревьев. Прошитые бинарные деревья. Алгоритмы прохождения. Лабораторное занятие 4. Прохождения деревьев. Реализация рекурсивных алгоритмов прохождения бинарных деревьев (метод. указания [15], работа 2). Лабораторное занятие 5. Прохождения деревьев. Реализация итерационных алгоритмов прохождения бинарных деревьев (метод. указания [15], работа 2). Тема 8. Расширенные бинарные деревья Лекция 9. Деревья как математический инструмент анализа алгоритмов. Расширенные бинарные деревья. Длины внутренних и внешних путей. Средняя и минимальная длина путей. Полностью сбалансированные деревья. Тема 9. Поиск с возвратом Лекция 10. Область применения поиска с возвратом. Общий алгоритм поиска с возвратом. Дерево поиска. Пример применения общего алгоритма к решению конкретной задачи. Лекция 11. Повышение эффективности поиска с возвратом (поиск с ограничениями, эквивалентность решений, слияние ветвей, переупорядочение поиска, декомпозиция). Оценка сложности поиска с возвратом (метод Монте-Карло). Способы программирования поиска с возвратом. Лабораторное занятие 6. Поиск с возвратом. Разработка алгоритма и программы для решения задачи методом поиска с возвратом (метод. указания [15], работа 3). Тема 10. Метод ветвей и границ Лекция 12. Метод ветвей и границ как разновидность поиска с возвратом для решения оптимизационных задач. Понятие нижней границы стоимости решений и его использование в качестве критерия для отсечения ветвей дерева поиска. Общий алгоритм метода ветвей и границ. Лекция 13. Применение переупорядочения поиска для решения задачи коммивояжера методом ветвей и границ. Сравнение эффективности алгоритма, использующего переупорядочение поиска, с прямым применением общего алгоритма метода ветвей и границ. Лекция 14. Метод альфа-бета отсечений как разновидность метода ветвей и границ для решения игровых задач. Принцип минимакса. Определение альфа- и бета-значений как нижней и верхней границы значений соответственно. Применение этих значений для отсечения ветвей (альфа- и бета-отсечения). Эвристические алгоритмы. Лабораторное занятие 7. Метод ветвей и границ. Разработка алгоритма и программы для решения задач методом ветвей и границ; разработка алгоритма и программы для решения задачи методом альфа-бета отсечений (метод. указания [15], работа 3). Тема 11. Методы решета Лекция 15. Методы решета как альтернатива поиску с возвратом для решения теоретикочисловых задач. Модульное решето. Рекурсивное решето. Примеры решет. Лабораторное занятие 8. Метод решета. Разработка алгоритма и программы для решения задачи методом решета (метод. указания [15], работа 3). Тема 12. Генерация элементарных комбинаторных объектов Лекция 16. Общая схема систематического порождения комбинаторных объектов. Порождение перестановок в лексикографическом порядке. Использование вложенных циклов для порождения перестановок. Порождение перестановок транспозицией смежных элементов. Порождение случайных перестановок. Порождение всех подмножеств множества. Порождение k-подмножеств (сочетаний из n по k).Порождение случайных сочетаний из n по k. Тема 13. Последовательный поиск. Логарифмический поиск в статических таблицах Лекция 17. Формулировка операции поиска. Статические и динамические таблицы. Основные табличные операции. Последовательный поиск. Методы повышения эффективности успешного и безуспешного поиска. Бинарный поиск. Однородный бинарный поиск. Поиск Фибоначчи. Интерполяционный поиск. Лабораторное занятие 9. Последовательный поиск. Разработка алгоритма и программы последовательного поиска. Бинарный поиск в статических таблицах. Разработка алгоритма и про- 10 граммы бинарного поиска. Экспериментальное исследование успешного и безуспешного последовательного и бинарного поиска (метод. указания [15], работа 4). Тема 14. Логарифмический поиск в динамических таблицах Лекция 18. Деревья бинарного поиска (ДБП). Реализация операций поиска, включения и исключения для ДБП. Недостатки ДБП без балансировки. ДБП, сбалансированные по высоте (АВЛдеревья). Восстановление сбалансированности АВЛ-деревьев с помощью операций вращения и двойного вращения. Операции включения и исключения с балансировкой. Лекция 19. Красно-черные деревья (RB-деревья) как пример еще одного способа организации сбалансированных ДБП. Включение и исключение с балансировкой в RB-деревьях. Цифровой поиск. Дерево цифрового поиска и его отличие от ДБП. Представление дерева цифрового поиска в памяти. Реализация операций поиска, включения и исключения. Лабораторное занятие 10. ДБП. Реализация узлового представления ДБП. Разработка алгоритма и программы бинарного поиска; экспериментальное исследование успешного и безуспешного бинарного поиска (метод. указания [15], работа 4). Лабораторное занятие 11. Сбалансированные ДБП. Разработка алгоритмов и программ включения с балансировкой (метод. указания [15], работа 4). Лабораторное занятие 12. Сбалансированные ДБП. Разработка алгоритмов и программ исключения с балансировкой (метод. указания [15], работа 4). Лабораторное занятие 13. Экспериментальное исследование поведения сбалансированного ДБП на случайной последовательности запросов на включение и исключение (метод. указания [15], работа 4). Тема 15. Поиск с хешированием Лекция 20. Основные идеи поиска с хешированием. Варианты хеширования. Методы построения хеш-функций и рекомендации по их выбору. Возникновение коллизий. Методы разрешения коллизий. Эффективность хеширования. Лабораторное занятие 14. Хеширование. Разработка алгоритма и программы поиска с хешированием. Экспериментальное исследование успешного и безуспешного поиска с хешированием (метод. указания [15], работа 4). Тема 16. Внешний поиск Лекция 21. Особенности внешнего поиска. Структуры данных для организации внешнего поиска. Б-деревья. Реализация поиска, включения и исключения в Б-деревьях. Тема 17. Методы сортировки Лекция 22. Задача сортировки. Классификация методов сортировки. Внутренняя и внешняя сортировка. Нижние оценки эффективности алгоритмов сортировки. Тема 18. Внутренняя сортировка Лекция 23. Простая сортировка вставками. Анализ эффективности. Модификации простой сортировки вставками: сортировка бинарными вставками, сортировка вставками в связанный список. Сортировка с убывающим шагом (сортировка Шелла). Пузырьковая сортировка. Анализ эффективности. Модификация пузырьковой сортировки – шейкер-сортировка. Быстрая сортировка (рекурсивный и итерационный варианты). Методы выбора расщепляющего имени для улучшения эффективности. Цифровая обменная сортировка. Лекция 24. Простая сортировка выбором. Анализ эффективности. Пирамидальная сортировка. Понятие пирамиды. Процедура восстановления пирамиды. Построение пирамиды. Распределяющая сортировка. Сортировка подсчетом. Сортировка распределяющим подсчетом. Слияние двух и более отсортированных таблиц в одну. Сортировка слиянием (естественное и прямое двухпутевое слияние). Порядковые статистики. Лабораторное занятие 15. Сортировка вставками и обменная сортировка. Разработка алгоритмов и программ соответствующих сортировок (метод. указания [15], работа 5). Лабораторное занятие 16. Сортировка выбором и распределяющая сортировка. Разработка алгоритмов и программ соответствующих сортировок (метод. указания [15], работа 5). Лабораторное занятие 17. Сортировка подсчетом и сортировка слиянием. Разработка алгоритмов и программ соответствующих сортировок (метод. указания [15], работа 5). 11 Лабораторное занятие 18. Экспериментальное исследование методов сортировки на случайных перестановках (метод. указания [15], работа 5). Тема 19. Внешняя сортировка Лекция 25. Особенности организации внешней сортировки. Порождение исходных отрезков (простое порождение и метод выбора с замещением). Распределение и слияние отрезков (равномерное распределение, многофазное слияние). Тема 20. Представления графов. Поиск в глубину. Поиск в ширину Лекция 26. Основы теории графов. Представления графов: матрица смежности, матрица инциденций, матрица весов, список ребер, структура смежности. Основные методы систематического исследования графов. Поиск в глубину. Поиск в ширину. Лабораторное занятие 19. Преобразование форм представления графов. Разработка алгоритмов и программ преобразования одной формы представления в другую. Разработка алгоритмов и программ поиска в глубину и поиска в ширину. Исследование разработанных программ (метод. указания [15], работа 5). Тема 21. Остовные деревья Лекция 27. Понятие остовного дерева графа. Построение остовных деревьев поиском в глубину и поиском в ширину. Остовное дерево ориентированного графа. Лекция 28. Минимальное остовное дерево. Построение минимального остовного дерева. Алгоритм Крускала. Построение минимального остовного дерева. Алгоритм Дейкстры-Прима. Лабораторное занятие 20. Минимальное остовное дерево. Реализация и исследование алгоритмов Крускала и Дейкстры-Прима нахождения минимального остовного дерева взвешенного графа (метод. указания [15], работа 6). Тема 22. Связность графов Лекция 29. Поиск связных компонент неориентированного графа. Поиск двусвязных компонент неориентированного графа. Поиск сильно связных компонент ориентированного графа. Лабораторное занятие 21. Связность графов. Разработка алгоритмов и программ поиска связных и двусвязных компонент неориентированного графа, сильно связных компонент ориентированного графа (метод. указания [15], работа 6). Тема 23. Топологическая сортировка. Транзитивное замыкание Лекция 30. Топологическая сортировка ориентированного графа. Транзитивное замыкание ориентированного графа. Алгоритм Уоршелла. Алгоритм Уоррена. Лабораторное занятие 22. Топологическая сортировка. Транзитивное замыкание. Разработка алгоритмов и программ топологической сортировки и транзитивного замыкания ориентированного графа (метод. указания [15], работа 6). Тема 24. Циклы в графе Лекция 31. Понятие фундаментального множества циклов графа. Алгоритм построения фундаментального множества циклов. Критерии существования эйлерова цикла. Построение эйлерова цикла. Построение гамильтонова цикла. Лабораторное занятие 23. Циклы в графе. Реализация и исследование алгоритмов построения фундаментального множества циклов, эйлерова цикла (метод. указания [15], работа 6). Тема 25. Кратчайшие пути Лекция 32. Поиск кратчайших путей от фиксированной вершины. Алгоритм Дейкстры. Поиск кратчайших путей между всеми парами вершин. Алгоритм Флойда. Лабораторное занятие 24. Кратчайшие пути. Реализация и исследование алгоритма Дейкстры поиска кратчайших путей от фиксированной вершины (метод. указания [15], работа 6). 12 5. Образовательные технологии В соответствии с требованиями ФГОС ВПО по направлению подготовки компетентностного подхода предусматривает использование в учебном процессе активных и интерактивных форм проведения занятий (компьютерных стимуляций, деловых и ролевых игр, разбор конкретных ситуаций) в сочетании с внеаудиторной работой с целью формирования и развития профессиональных навыков обучающихся. В рамках учебного курса предусматриваются встречи с представителями государственных и общественных организаций, мастер-классы экспертов и специалистов. Удельный вес занятий, проводимых в интерактивных формах, в учебном процессе составляет 43%. Занятия лекционного типа по данной дисциплине составляют 57% аудиторных занятий. 6. Оценочные средства для текущего контроля успеваемости, промежуточной аттестации по итогам освоения дисциплины и учебно-методическое обеспечение самостоятельной работы студентов 6.1. Примерный перечень вопросов к зачету Зачет в 3 семестре проставляется по итогам выполнения и защиты лабораторных работ. 6.2. Примерный перечень вопросов к экзамену 1. Представление последовательностей. 2. Характеристические векторы. 3. Связное распределение. Разновидности связных списков. 4. Организация стеков. 5. Организация очередей. 6. Деревья. Машинные представления деревьев. 7. Прохождения деревьев. 8. Бинарные деревья. Естественное соответствие бинарных деревьев и деревьев общего вида. 9. Прямое прохождение бинарных деревьев. 10. Обратное прохождение бинарных деревьев. 11. Симметричное прохождение бинарных деревьев. 12. Горизонтальное прохождение бинарных деревьев. 13. Прохождение бинарного дерева, соответствующее горизонтальному прохождению леса. 14. Прошитые деревья. Прохождения прошитых деревьев. 15. Общий алгоритм поиска с возвратом. 16. Оценка сложности выполнения поиска с возвратом (метод Монте-Карло). 17. Способы программирования поиска с возвратом. 18. Метод ветвей и границ. 19. Эффективный метод решения задачи коммивояжера. 20. Метод ветвей и границ для решения игровых задач. 21. Эвристические методы решения задачи поиска с возвратом. 22. Методы решета. Нерекурсивное модульное решето. 23. Методы решета. Рекурсивное решето. 24. Порождение элементарных комбинаторных объектов. 25. Порождение перестановок в лексикографическом порядке. 26. Порождение перестановок транспозицией смежных элементов. 27. Последовательный поиск. 28. Бинарный поиск в статических таблицах. 29. Равномерный бинарный поиск. 30. Поиск Фибоначчи. 31. Интерполяционный поиск. 32. Деревья бинарного поиска. Алгоритм поиска. 13 33. Включение узла в дерево бинарного поиска. 34. Исключение узла из дерева бинарного поиска. 35. Балансировка деревьев бинарного поиска. АВЛ-деревья. 36. Включение и исключение узла в АВЛ-дерево. 37. Красно-черные деревья. 38. Включение и исключение узла в красно-черное дерево. 39. Цифровой поиск. 40. В-деревья. 41. Включение узла в В-дерево. 42. Исключение узла из В-дерева. 43. Хеширование для варианта с малым пространством имен и варианта статической таблицы. 44. Хеширование для динамических таблиц. 45. Хеш-функции. 46. Методы разрешения коллизий. 47. Сортировка. Оценки эффективности алгоритмов сортировки. 48. Сортировка вставками. 49. Сортировка Шелла. 50. Пузырьковая сортировка. 51. Быстрая сортировка. 52. Сортировка выбором. 53. Пирамидальная сортировка. 54. Цифровая распределяющая сортировка. 55. Сортировка естественным двухпутевым слиянием. 56. Сортировка простым двухпутевым слиянием. 57. Сортировка подсчетом. 58. Внешняя сортировка. 59. Внешняя сортировка. Порождение исходных отрезков. 60. Внешняя сортировка. Слияние отрезков. 61. Частичная сортировка. Задача выбора. 62. Частичная сортировка. Прямое и бинарное слияние. 63. Представления графов. 64. Поиск в глубину. Поиск в ширину. 65. Построение остовных деревьев. DFS-дерево. BFS-дерево. 66. Минимальное остовное дерево. Алгоритм Краскала. 67. Минимальное остовное дерево. Алгоритм Дейкстры-Прима. 68. Остовное дерево орграфов. 69. Поиск связных компонент графа. 70. Топологическая сортировка. 71. Определение двусвязных компонент графа. 72. Определение сильно связных компонент графа. 73. Поиск фундаментальных множеств циклов. 74. Транзитивное замыкание. 75. Кратчайшие пути от фиксированной вершины. 76. Кратчайшие пути между всеми парами вершин графа. 77. Эйлеров цикл. Гамильтонов цикл. 14 6.3. Распределение самостоятельной работы Целью самостоятельной работы студента является закрепление полученных теоретических знаний и приобретение практических навыков применения и исследования алгоритмов и структур данных при проектировании прикладных программ. №№ п/п 1 2 3 4 5 Самостоятельная работа Самостоятельное изучение учебных вопросов Подготовка к лабораторным занятиям Подготовка к зачету Подготовка к экзамену Расчетно-графическая работа Итого часов самостоятельной работы Всего часов 8 34 42 18 102 Семестр 3 Семестр 4 8 16 18 24 42 18 78 Перечень заданий для самостоятельной работы по подготовке к лабораторным занятиям приводится в методических указаниях [15] в описании каждой лабораторной работы в разделе «Подготовка к работе». 6.4. Примерная тематика расчетно-графических работ Целью выполнения расчетно-графической работы является закрепление теоретических знаний, полученных по данному курсу и смежным дисциплинам, и приобретение практических навыков формализации поставленной задачи, создания и использования эффективных структур данных и алгоритмов в прикладных задачах, теоретических и экспериментальных оценок эффективности алгоритмов. При выполнении расчетно-графической работы студент должен уметь формализовать поставленную задачу (перейти от словесной неформальной постановки задачи к математической формулировке); приспосабливать общие методы и алгоритмы решения классов задач к решению конкретной задачи; проводить сравнительную оценку различных вариантов с целью выбора наиболее эффективных структур данных и алгоритмов их обработки; исследовать и оценивать теоретически (аналитически) и экспериментально методы сокращения перебора в комбинаторных задачах; оценивать аналитически и экспериментально эффективность предложенных в работе алгоритмов (временную и емкостную сложности); программно реализовать разработанные алгоритмы на одном из алгоритмических языков программирования. Расчетно-графическая работа выполняется в течение четвертого семестра, предусматривает самостоятельную работу студента с проработкой отдельных вопросов в процессе индивидуальных консультаций с руководителем курсового проектирования и защиту расчетно-графической работы. Название темы расчетно-графической работы – «Исследование методов поиска с возвратом». В качестве индивидуального задания на расчетно-графическую работу студенту предлагается комбинаторная задача. Задания могут быть связаны с инженерными или информационными задачами, решением различных головоломок и т.п. Постановка задачи должна быть неформальной, чтобы вопросы математической формализации поставленной задачи решались студентом в процессе выполнения расчетно-графической работы. Не должны задаваться также структуры данных для программной реализации алгоритмов решения все эти вопросы должны решаться студентом. Выбор комбинаторных задач в качестве заданий в немалой степени обусловлен следующим. Непосредственное применение хорошо известных общих методов решения таких задач обычно приводит к алгоритмам, время работы которых недопустимо велико. Методы должны быть хорошо приспособлены к конкретной задаче, чтобы в результате алгоритм стал пригодным для прак- 15 тического использования. Это в большинстве случаев потребует от студента большой изобретательности для сокращения перебора. 7. Учебно-методическое и информационное обеспечение учебной дисциплины 7.1. Рекомендуемая основная литература № п/п Название 1 Ахо, А. Структуры данных и алгоритмы / А. Ахо, Д. Хопкрофт, Д. Ульман.– М.: Вильямс, 2001 и др. года.– 384 с. 2 Кубенский, А.А. Структуры и алгоритмы обработки данных: объектноориентированный подход и реализация на С++ / А.А. Кубенский.– СПб.: БХВПетербург, 2004.– 464 с. 3 Павлов, Л.А. Структуры и алгоритмы обработки данных: учеб. пособие / Л.А. Павлов.– Чебоксары: Изд-во Чуваш. ун-та, 2008. 252 с. Кол. ед. в библ. 7+Э 20 90 7.2. Рекомендуемая дополнительная литература № п/п Название Наличие в библ. 1 Бакнелл, Дж. Фундаментальные алгоритмы и структуры данных в Delphi / Э Дж. Бакнелл.– СПб.: ДиаСофтЮП, 2003.– 560 с. 2 Кнут, Д. Искусство программирования: в 3 т. Т. 1. Основные алгоритмы / Э Д. Кнут.– 3-е изд.– М.: Вильямс, 2000.– 720 с. 3 Кнут, Д. Искусство программирования: в 3 т. Т. 3. Сортировка и поиск / Д. Кнут.– Э 2-е изд.– М.: Вильямс, 2000.– 832 с. 4 Кнут, Д. Искусство программирования для ЭВМ: в 3 т. Т. 1. Основные алгоритмы / 18 Д. Кнут.– М.: Мир, 1976.– 735 с. 5 Кнут, Д. Искусство программирования для ЭВМ: в 3 т. Т. 3. Сортировка и поиск / 32 Д. Кнут.– М.: Мир, 1978.– 844 с. 6 Кормен, Т. Алгоритмы: построение и анализ / Т. Кормен, Ч. Лейзерсон, Р. Ривест, Э К. Штайн.– 2-е изд.– М.: Вильямс, 2011.– 1296 с. 7 Красиков, И.В. Алгоритмы. Просто как дважды два / И.В. Красиков, Э И.Е. Красикова.– 2-е изд.– М.: Эксмо, 2007.– 256 с. 8 Липский, В. Комбинаторика для программистов / В. Липский.– М.: Мир, 1988.– 213 6 с. 9 Макконелл, Дж. Основы современных алгоритмов / Дж. Макконелл.– 2-е изд.– М.: Э Техносфера, 2004.– 368 с. 10 Окулов, С.М. Программирование в алгоритмах / С.М. Окулов.– 3-е изд.– М.: БиЭ ном. Лаборатория знаний, 2007.– 383 с. 11 Седжвик, Р. Фундаментальные алгоритмы на С++. Анализ/Структуры данЭ ных/Сортировка/Поиск / Р. Седжвик.– СПб.: ДиаСофтЮП, 2003.– 672 с. 12 Седжвик, Р. Фундаментальные алгоритмы на С++. Алгоритмы на графах / Э Р. Седжвик.– СПб.: ДиаСофтЮП, 2003.– 480 с. 13 Структуры и алгоритмы обработки данных: Метод. указания к выполнению рас60 четно-графической работы/Сост. Л.А.Павлов.– Чебоксары: ЧувГУ, 2014. 24 с. 14 Структуры и алгоритмы обработки данных: Метод. указания к лабораторным заня140 тиям/Сост. Л.А.Павлов.– Чебоксары: увГУ, 2002. 52 с. 15 Хусаинов, Б.С. Структуры и алгоритмы обработки данных. Примеры на языке Си / 10 Б.С. Хусаинов.– М.: Финансы и статистика, 2004.– 464 с. Примечание: Буквой «Э» обозначено наличие электронного варианта книги на сервере кафедры вычислительной техники, доступной всем студентам. 16 7.3. Программное обеспечение и Интернет-ресурсы Любая система программирования на алгоритмическом языке типа Паскаль, Си. Специальные Интернет-ресурсы не требуются. 8. Материально-техническое обеспечение учебной дисциплины Аудиторный фонд со специализированным и лабораторным оборудованием: № Номер Наименование Перечень Краткое описание и характеристика состава п/п аудито- специализирован- оборудования установок, измерительно-диагностического рии ных аудиторий и оборудования, компьютерной техники и лабораторий средств автоматизации экспериментов. 1 Б-304 Компьютерный Персональные Pentium4 3.0/1Gb/80Gb/CDROM - LG Flatron класс компьютеры, объ- L1730S – 1 шт единенные в ло- Celeron 2.8/256Mb/40Gb/CDROM - Samsung кальную сеть и SyncMaster 510N – 10шт. подключенные к Celeron 2.2/256Mb/40Gb - Samsung 151s – 1 глобальной сети шт. Интернет; элек- Проектор Mitsubishi XD460U – 1 шт. тронная доска Интерактивная доска Smartboard – 1 шт. 2 Б-305 Компьютерный Персональные Core2Duo E4600/1Gb/250Gb/DVDRW - Aser класс компьютеры, объ- AL1917 – 7шт. единенные в ло- Pentium DualCore E5200/1Gb/250Gb/ кальную сеть и DVDRW - Aser V193 – 4шт. подключенные к Celeron 2.2/256Mb/40Gb - Samsung 151s – 1 глобальной сети шт. Интернет 3 Б-309 Компьютерный Персональные Core2Duo E6300/1Gb/250Gb/DVDRW - Aser класс компьютеры, объ- AL1917 – 10 шт. единенные в ло- Core2Duo E6300/2Gb/2x250Gb/DVDRW кальную сеть и Aser AL1917 – 1 шт. подключенные к Celeron 2.2/256Mb/40Gb - Samsung 151s – 1 глобальной сети шт. Интернет; проек- Проектор BENQ MP525P тор, экран Приложение 1. Методические указания к лабораторным занятиям и выполнению расчетнографической работы.