2015 год

Материалы лекций осеннего семестра 2015 года.

  1. Вводная лекция. Цели и задачи курса. Характеристика разделов курса – введение в алгоритмы, язык программирования, структуры данных. Алгоритмы. Формализация понятия алгоритма. Машина Тьюринга (МТ). (2 сентября, PDF).
  2. Нормальные МТ. Диаграммы Тьюринга: диаграммы элементарных МТ, правила композиции диаграмм, примеры диаграмм. Диаграммы Тьюринга: построение таблицы МТ по диаграмме. Моделирование МТ. (5 сентября, PDF).
  3. Универсальная МТ. Проблемы останова и самоприменимости. Нормальные алгоритмы Маркова. (9 сентября, PDF).
  4. Нормальные алгоритмы Маркова (окончание). Примеры других алгоритмических систем. Тезис Тьюринга-Черча. Общая классификация и характеристики языков программирования. Место языка Си в современной индустрии ПО. Стандарты и роль стандартизации. Язык программирования Си. Первая программа на Си. Структура программного файла. Системные библиотеки и их использование. (12 сентября, PDF).
  5. Описание Си-машины: процессор, классы памяти (регистровые, автоматические и статические переменные). Типы данных языка Си: целые, логические, символьные, с плавающей точкой, беззнаковые целые. Переменные: класс памяти, область действия. (16 сентября, PDF.)
  6. Арифметические и логические выражения. Ленивое вычисление логических выражений. Старшинство операций. Операции присваивания. Точки следования. Форматный ввод-вывод (23 сентября, PDF).
  7. Приведение типов при вычислении выражений (явное и неявное). Операторы. Символьный тип и обработка символьных данных. (26 сентября, PDF.)
  8. Символьный тип (окончание). Массивы. Многомерные массивы. Строки. Обработка строк. Системная библиотека работы со строками. (30 сентября, PDF.)
  9. Указатели.  Адресная арифметика. Массивы и указатели. Преобразования типа указателей. (3 октября, PDF.)
  10. Функции. Определение и объявление функции. Передача параметров. Рекурсия. Хвостовая рекурсия. Встраивание функций. Указатели на функцию. (7 октября, PDF.)
  11. Побитовая обработка данных. Беззнаковые целые типы. Абстрактный тип данных «множество» и его реализация. Представление данных с плавающей точкой. Стандарт IEEE 754. Вычисление сумм и произведений данных с плавающей точкой. Потеря точности при вычитании. Выбор правильной последовательности вычислений. (10 октября, PDF.)
  12. Структуры. Указатели на структуры. Составные инициализаторы структур. Объединения. Анонимные объединения и структуры. Битовые поля. Перечисления. (14 октября, PDF.)
  13. Динамическое выделение и освобождение памяти. VLA-массивы и их выделение в динамической памяти. Массив переменного размера в составе структуры. (21 октября, PDF).
  14. Схема компиляции программ на языке Си. Препроцессор. Директивы препроцессора. Компоновка. Классы памяти и компоновки. Отладка программ. Понятие об отладчике gdb. (24 октября, PDF).
  15. Организация типа данных «стек» на динамической памяти. Использование стека для построения обратной польской записи. Очередь. (28 октября, PDF).
  16. Списки. Добавление нового элемента в начало и в конец списка. Поиск элемента в списке. Удаление заданного элемента из списка: через возврат указателя на новый список, через передачу двойного указателя. (31 октября, PDF).
  17. Алгоритм топологической сортировки Вирта. (7 ноября, PDF).
  18. Понятие о сложности алгоритмов. Поиск подстроки по образцу. Простейший алгоритм. Алгоритм Кнута – Морриса – Пратта (КМП). Префикс-функция и ее вычисление. Сложность вычисления префикс-функции и алгоритма КМП. (11 ноября, PDF).
  19. Простейшие алгоритмы сортировки.  Оценка сложности алгоритмов сортировки. Быстрая сортировка. (14 ноября, PDF).
  20. Двоичные деревья. Обход двоичного дерева (сначала в глубину, сначала в ширину). Нерекурсивный симметричный обход двоичного дерева. «Прошитое» двоичное дерево и его обход. (18 ноября, PDF).
  21. Двоичные деревья поиска и операции над ними (поиск элемента, минимальный и максимальный элементы, следующий элемент, вставка и удаление элемента). Деревья Фибоначчи. Оценка высоты дерева Фибоначчи. (21 ноября, PDF).
  22. АВЛ-деревья. Базовые операции над АВЛ-деревьями. Балансировка АВЛ-дерева. Вставка и удаление элемента в/из АВЛ-дерева. Оценка высоты АВЛ-дерева по дереву Фибоначчи. (25 ноября, PDF).
  23. Красно-черные деревья. Самоперестраивающиеся деревья (splay trees). Операция splay (перестраивание). Реализация словарных операций через операцию splay. Реализация операции splay. Сложность словарных операций в splay-деревьях.
    Обобщение сбалансированных деревьев поиска: ранговые деревья, понятие ранга и ранговой разницы. Ранговые правила для АВЛ-деревьев и красно-черных деревьев. Слабые АВЛ-деревья. (28 ноября, PDF).
  24. Хеш-таблицы. Хеширование. Хеширование цепочками. Хеширование с открытой адресацией. (9 декабря, PDF).
  25. Структура данных «куча» (heap) и сортировка heapsort (пирамидальная сортировка). Цифровой поиск. Задача цифрового поиска. Деревья цифрового поиска. Вставка в дерево цифрового поиска. (12 декабря, PDF).

Leave a Reply