МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Саратовский государственный университет имени Н.Г. Чернышевского

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ
РОССИЙСКОЙ ФЕДЕРАЦИИ
Саратовский государственный университет имени Н.Г. Чернышевского
Факультет компьютерных наук и информационных технологий
УТВЕРЖДАЮ
___________________________
"__" __________________20__ г.
Рабочая программа дисциплины
Методы программирования
Специальность
090301 Компьютерная безопасность
Специализация
Математические методы защиты информации
Квалификация выпускника
Специалист
Форма обучения
очная
Саратов,
2012
1. Цели освоения дисциплины
Целями освоения дисциплины являются: знакомство с основными
комбинаторными и теоретико-графовыми алгоритмами, а также способами
их эффективной реализации и оценки сложности, знакомство с
современными технологиями программирования.
2. Место дисциплины в структуре ООП
Данная учебная дисциплинаС3.Б2. «Методы программирования»
входит в раздел «Профессиональный цикл. Базовая часть» ФГОС-3.
Для изучения дисциплины необходимы компетенции, знания, умения и
навыки, сформированные у обучающихся в результате освоения курсов
«Дискретная математика», «Математическая логика и теория алгоритмов»,
«Языки программирования».
Компетенции, знания, умения и навыки, сформированные у
обучающихся в результате освоения данной дисциплины, необходимы для
научно-исследовательской работы студента и выполнения курсовых работ.
3 Компетенции обучающегося, формируемые в результате
освоения дисциплины
В результате освоения дисциплины у студента должны сформироваться или
закрепиться следующие профессиональные компетенции (ПК):
 способностью применять математический аппарат, в том числе с
использованием
вычислительной
техники,
для
решения
профессиональных задач (ПК-2);
 способностью понимать сущность и значение информации в
развитии современного общества, применять достижения
современных информационных технологий для поиска и обработки
больших объемов информации по профилю деятельности в
глобальных компьютерных системах, сетях, в библиотечных фондах
и в иных источниках информации (ПК-3)
 способностью работать с программными средствами прикладного,
системного и специального назначения (ПК-8);
 способностью использовать языки и системы программирования,
инструментальные
средства
для
решения
различных
профессиональных, исследовательских и прикладных задач (ПК-9);
 способностью формулировать результат проведенных исследований
в виде конкретных рекомендаций, выраженных в терминах
предметной области изучавшегося явления (ПК-10);
 способностью к самостоятельному построению алгоритма,
проведению его анализа и реализации в современных программных
комплексах (ПК-12).
 способностью готовить научно-технические отчеты, обзоры,
публикации по результатам выполненных работ (ПК-17);
 способностью принимать участие в эксплуатации программного
обеспечения и программно-аппаратных средств обеспечения
информационной безопасности компьютерных систем (ПК-35).
 способностью
разрабатывать
вычислительные
алгоритмы,
реализующие современные математические методы защиты
информации (ПСК-2.3);
 способностью моделировать алгоритмы в системах компьютерной
математики, оценивать их работоспособность и эффективность
(ПСК-2.4);
 способностью на основе анализа применяемых математических
методов и алгоритмов оценивать эффективность средств защиты
информации (ПСК-2.5).
В результате освоения дисциплины обучающийся должен
Знать:
 основные комбинаторные и теоретико-графовые алгоритмы, а также
способы их эффективной реализации и оценки сложности
 современные технологии программирования
 показатели качества программного обеспечения; архитектуру основных
типов современных компьютерных систем;
 основы системного программирования;
 принципы и методы построения быстрых алгоритмов для реализации
систем защиты информации;
 основные алгоритмы кодирования, сжатия и восстановления различных
видов информации;
Уметь:
 формализовать поставленную задачу
 работать с интегрированными средами разработки программного
обеспечения
 разрабатывать системное и прикладное программное обеспечение для
многозадачных, многопользовательских и многопроцессорных сред, а
также для сред с интерфейсом, управляемым сообщениями;
 разрабатывать и сопровождать программные средства с учетом
требований к их защищенности;
 проводить оценку сложности алгоритмов;
 разрабатывать эффективные алгоритмы и программы
 планировать разработку сложного программного обеспечения;
 оценивать качество готового программного обеспечения;
 проводить предварительное оценивание временной сложности
разрабатываемых алгоритмов;
 разрабатывать
быстрые
алгоритмы
для
криптографических
приложений;
Владеть:
 навыками разработки, документирования, тестирования и отладки
программ;
 навыками использования инструментальных средств разработки и
отладки программного кода;
 навыками разработки алгоритмов решения типовых профессиональных
задач;
 навыками анализа вычислительной сложности разработанных
алгоритмов;
 методами разработки эффективных алгоритмов;
 базовыми алгоритмами и структурами данных.
4. Структура и содержание дисциплины
Общая трудоемкость дисциплины составляет 8 зачетных единиц 288
часов.
№
п/
п
Раздел
дисциплины
С Неделя
е семестра
м
е
с
т
р
Виды учебной работы,
включая
самостоятельную
работу студентов и
трудоемкость (в
часах)
Лек
2
8
Пр
2
8
Лаб
Сам
8
6
1
2
Введение
Алгоритмы
сортировки
3
Хеш-функции,
5 6
хеш-таблицы
Графы, графовые 5 7-15
алгоритмы
2
2
4
4
18
18
16
16
Алгоритмы теории 5 16-17
строк
Алгоритмы
на 5 18
перестановках
Промежуточная
аттестация
5 Итого
Алгоритмы
6 1-2
эффективного
поиска
Алгоритмы
6 3-6
вычислительной
геометрии
4
4
4
4
2
2
4
6
4
5
6
1
2
5 1
5 2-5
Формы текущего
контроля
успеваемости (по
неделям семестра)
Формы
промежуточной
аттестации (по
семестрам)
Контрольная
работа №1
на 5 неделе
Контрольная работа
№2
На 15 неделе
Зачет
36
4
8
36
36
4
36
2
8
8
3
Динамическое
программирование
6 7-11
10
8
6
4
Параллельные
алгоритмы
Современные
технологии
программирования
Объектноориентированное
программирование
Промежуточная
аттестация
Итого
Всего
6 12-13
4
2
9
6 14
2
6 15-16
4
10
8
Контрольная работа
№2
на 16 неделе
Экзамен
32
32
35
45
5
6
Контрольная работа
№1
на 11 неделе
2
288
Раздел «Введение»
Понятие «алгоритм», примеры. Временная сложность алгоритма.
Значение тета-, омега-, о- нотаций (большие и малые). Свойства тета-,омега-,
о- нотаций.
Раздел «Алгоритмы сортировки»
Задача о сортировке. Виды сортировок. Теорема о нижней оценке
числа сравнений для сортировок. Сортировка слиянием. Структура данных
«куча». Основные операции с кучей. Очереди с приоритетами. HeapSort.
Быстрая сортировка. Общий вид быстрой сортировки. Варианты выбора
опорного
элемента.
Операция
partition.
Анализ
времени
работы
и
используемой памяти. Сравнение с HeapSort. Алгоритм нахождения k-ой
порядковой статистики. Линейные сортировки.
Примеры
работы
алгоритмов.
Приложения
CountSort. RadixSort.
сортировок:
задачи
на
сортировки.
Раздел «Хеш-функции, хеш-таблицы»
Хеш-функции.
Виды
хэш-функций
(по
области
применения).
Особенности каждого из видов. Хэш-таблицы. Основные операции с хэштаблицами. Время работы хэш-таблиц. Методы разрешения коллизий.
Раздел «Графы, графовые алгоритмы»
Графы. Основные определения. Формулировка задачи SSSP. Дерево
кратчайших путей. Свойства. Алгоритм нахождения кратчайшего пути из s в
t по дереву кратчайших путей из вершины s. Алгоритм BFS. Его анализ и
свойства. Постановка задачи SSSP на взвешенных графах. Случаи
возможных
постановок
задачи.
Алгоритм
Дейкстры.
Инварианты
выполнения алгоритма Дейкстры. Доказательство корректности. Анализ
времени работы. Алгоритм Форда-Беллмана. Обоснование корректности,
время работы. Алгоритм Флойда. Обоснование корректности, время работы.
Условия применимости каждого из алгоритмов. Сравнение различных
алгоритмов решения задачи SSSP. Краткое описание каждого из них,
применимость, время работы, особенности. Примеры задач, сводящихся к
SSSP. Алгоритм поиска в глубину. Лемма о скобочном вложении. Лемма о
сером пути. Примеры работы алгоритма. Мосты и точки сочленения.
Топологическая сортировка.
Раздел «Алгоритмы теории строк»
Задача поиска образца в тексте. Два вида препроцессинга данных.
Префикс-функция строки. Алгоритм нахождения префикс функции строки.
Анализ, доказательство корректности. Алгоритм Кнута-Морриса-Пратта.
Доказательство корректности и анализ. Суффиксные деревья. Простейшие
алгоритмы построения суффиксных деревьев. Примеры.
Раздел «Алгоритмы на перестановках»
Перестановки.
Перестановки
как
преобразования.
Произведение
перестановок. Обратная перестановка. Группа перестановок. Алгоритмы
перемножения и нахождения обратной перестановки. Граф перестановки.
Порядок
перестановки.
Нахождение
номера
перестановки
в
лексикографическом упорядочении. Нахождение перестановки по ее номеру
в лексикографическом упорядочении. Подсчет числа инволюций. Таблица
инверсий перестановки. Алгоритм восстановления перестановки по таблице
инверсий и наоборот.
Раздел «Алгоритмы эффективного поиска»
Бинарный поиск. Назначения и идея алгоритма. Оценка количества
действий. Функции стандартной библиотеки C++, основанные на бинарном
поиске. Модификации: реализация index_first_of, index_last_of на основе
стандартной библиотеки C++. Задача о minimax пути в графе. Реализации
функций binary_search, index_first_of, index_last_of без использования
функций стандартной библиотеки C++, основанных на бинарном поиске.
Оптимизация бинпоиска для лучшего использования кэша процессора.
Вещественнозначный бинарный поиск. Троичный (тернарный) поиск.
Назначение и применимость. Реализация. Время работы. Приложения.
Раздел «Алгоритмы вычислительной геометрии»
Скалярное и векторное произведения векторов. Физический смысл и
формулы
вычисления.
Примеры
приложений:
проверка
взаимного
расположения четырех точек, проверка многоугольника на выпуклость.
Проверка пересечения двух отрезков. Алгоритмы нахождения выпуклой
оболочки. Обзор методов. Просмотр Джавриса. Обход Грэхема. Задача о
двух наиболее удаленных точках. Задача о нахождении пары ближайших
точек.
Раздел «Динамическое программирование»
Динамическое
программирование.
Идеология.
Оптимальность
подзадач. Примеры.
Раздел «Параллельные алгоритмы»
Многопроцессорные
системы.
Средства
описания
параллельных
алгоритмов; методы построения параллельных алгоритмов; параллельные
алгоритмы
сортировки
данных;
параллельные
алгоритмы
генерации
псевдослучайных чисел.
Раздел «Современные технологии программирования»
Тенденции в мире программирования. Парадигмы программирования.
Концепции языков программирования. Разработка через тестирование.
Switch-технология.
Раздел «Объектно-ориентированное программирование»
История. Основные понятия. Определение ООП и его основные
концепции. Диаграммы UML. Особенности реализации. Критика ООП.
Объектно-ориентированные языки.
5. Образовательные технологии
В рамках лекционных занятий предполагается разбор различных задач
и ситуаций, обсуждение в малых группах, обсуждение с привлечением всей
аудитории. Предполагается участие в видеоконференциях, проводимых
фирмами-разработчиками программного обеспечения и экспертами в области
программирования.
Для поддержки обучения студентов по данному курсу используется
технология смешанного обучения.
Закрепление
программированию
практических
происходит
навыков
с
решения
последующей
сдачей
задач
по
решений
в
автоматизированную систему проверки.
6. Учебно-методическое обеспечение самостоятельной работы
студентов. Оценочные средства для текущего контроля успеваемости,
промежуточной аттестации по итогам освоения дисциплины.
7. Учебно-методическое и информационное обеспечение дисциплины
а) основная литература:
1. Кормен Т. Алгоритмы. Построение и анализ. - М.: Вильямс, 2005.
б) дополнительная литература:
1. Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы. Построение и
анализ. - М.: Вильямс, 2011.
2.Седжвик Р. Фундаментальные алгоритмы на C++. Части 1-4. - СПб.:
DiaSoft, 2002.
2. Вирт Н. Алгоритмы и структуры данных. - СПб.: Невский Диалект, 2008.
3. Гасфилд Д. Строки, деревья и последовательности в алгоритмах:
Информатика и вычислительная биология. - Спб.: Невский Диалект, 2003.
4. Кнут Д. Искусство программирования, тома 1-3. - М.: Вильямс, 2006.
5. Шень А. Программирование. Теоремы и задачи. - М.: МЦНМО, 2007.
6. Майерс С. Эффективное использование С++. 35 новых способов улучшить
стиль программирования. - СПб: Питер, 2006.
7. Майерс С. Эффективное использование STL. - СПб: Питер, 2003.
в) программное обеспечение и Интернет-ресурсы
Стандартное программное обеспечение компьютерного класса, среды
разработки ПО (например, Microsoft Visual Studio/ Eclipse /Intelij Idea),
сборники задач с поддержкой автоматизированного тестирования.
8. Материально-техническое обеспечение дисциплины
Лекционная
аудитория
с
возможностью
демонстрации
электронных
презентаций при уровне освещения, достаточном для работы с конспектом.
Аудитория с компьютерами, работающими под управлением операционной
системы Microsoft Windows XP или Windows 7 с подключением к локальной
университетской сети и Интернет.
Программа составлена в соответствии с требованиями ФГОС ВПО с учетом
рекомендаций
и
Примерной
ООП
ВПО
по
специальности
090301
«Компьютерная безопасность» и специализации «Математические методы
защиты информации».
Автор
Ст. преподаватель
М.Р. Мирзаянов
Программа одобрена на заседании кафедры теоретических основ
компьютерной безопасности и криптографии от «___» __________2012 года,
протокол № ___
Зав. кафедрой
теоретических основ
компьютерной безопасности и криптографии
профессор
В.Н.Салий
Декан факультета
компьютерных наук
и информационных технологий
доцент
А.Г.Федорова
Download