1 О курсе
Преподаватель: Лебедев Евгений Денисович
Email: lebedeved !собака! edu.miigaik.ru
Все учебные материалы и методические пособия: Открыть материалы ↗
Слайды к лекциям и практическим занятиям: Открыть презентации ↗
Таблица с оценками и результатами работ: Открыть таблицу ↗
2 Конспекты
Лекции
Введение в асимптотический анализ
Лекция 2Асимптотический анализ. Рекурсивные функции
Лекция 3Арифметические основы вычислений
Лекция 4Введение в параллелизацию
Лекция 5Параллелизация на уровне данных
Лекция 6Оценка эффективности параллельных вычислений
Лекция 7Элементарные алгоритмы для работы с графами
Лекция 8Параллелизм графовых задач. Задача поиска кратчайшего маршрута
Лекция 9Модификации алгоритма Дейкстры. Дельта-шаг. Алгоритм A*
Лекция 10Задача коммивояжёра: подходы и решения
Лекция 11Эвристические алгоритмы
Лекция 12Обобщение алгоритмических стратегий
Доп. главаО различии техники
Доп. главаВведение в реверс-инжиниринг
Доп. главаТренировка на покемонах (реверс-инжиниринг)
Доп. главаЗадача коммивояжёра. Часть 1
Доп. главаЗадача коммивояжёра. Часть 2. Эвристические алгоритмы. Метод отжига
Практики
Лабораторные работы и домашнее чтение указаны в карточке той практики, к которой они относятся, — это отдельные страницы.
Методы оптимизации «Разделяй и властвуй»
Параллелизация. Быстрая сортировка
Деревья. Идея индексирования данных
Модель нейрона как эвристический алгоритм
3 Индивидуальные темы
Список индивидуальных тем
- Программа-демонстратор алгоритмов сортировки массивов
- Маргаритковый мир
- Генератор лабиринтов алгоритмом Эйлера
- Генератор лабиринтов на основе алгоритма Краскала (или Прима)
- Генерация лабиринта на основе случайного поиска в глубину
- Генераторы простых чисел (решето Эратосфена)
- Программа-демонстратор алгоритма поиска A*
- Муравьиный алгоритм и его применение (предлагается для поиска оптимального маршрута)
- K-d-дерево (для индексации точек)
- Алгоритмы решения задачи о рюкзаке
- Генерация карты высот на основе шума Перлина
- Генерация высот алгоритмом Diamond-Square
- Решение задачи коммивояжёра методом отжига на реальных данных
- Алгоритм решения задачи заливки однородной области (обход в ширину)
- Алгоритм решения задачи сборки кубика Рубика
- Алгоритм решения пятнашек
- Алгоритм Минимакс (на примере игры крестики-нолики)
- Поиск минимального отсутствующего числа
- Гравитационная задача N тел
- Алгоритм трассировки лучей (2D-реализация)
- Псевдотонирование изображений (псевдотонирование Бёркеса)
- Построение минимальных выпуклых оболочек (алгоритм Грэхема)
- Алгоритм триангуляции Делоне методом заметающей прямой
- Программа-демонстратор папоротника Барнсли
- Программа-демонстратор множества Жюлиа
- Математические модели хаоса и их визуализация
- Модель сегрегации Шеллинга
- Решение задачи джерримендеринга для произвольного распределения
- Упрощение полилинии методом Дугласа-Пекера
- Алгоритмы моделирования транспортных потоков (энтропийный метод)
- Алгоритм сжатия JPEG2000
- Алгоритм Укконена
- Алгоритм шинглов
- Алгоритм решения задачи Иосифа Флавия в общем виде
- Алгоритм Тремо
Требования к проекту
- Презентация 10–20 слайдов
- Первый слайд —
титульный лист: название проекта, группа, ФИО, предмет - Второй слайд —
постановка задачи: о чём ваша задача? - Третий слайд —
методы решения: перечисляете известные методы решения (названия методов / ссылки на конкретные алгоритмы / ссылки на иную литературу). Выбранный вами алгоритм / алгоритмы подчёркиваете жирным или цветным шрифтом - Четвёртый слайд —
средства реализации: язык программирования, версия языка программирования (для C++ — номер стандарта), версии использованных библиотек - Пятый слайд —
блок-схемаалгоритма/алгоритмов, выбранных вами, иликод наиболее важной функции. Блок-схема выполняется посредством ресурса programforyou - Шестой слайд —
описание интерфейса программы(даже если это консольное приложение): что на вход, как пользователю это ввести - Седьмой слайд —
демонстрация работы программы(предварительно записанное видео или гиф; рекомендуется гиф) - Восьмой слайд —
асимптотическая оценкапредложенного алгоритма/алгоритмов, если это возможно - Девятый слайд —
замеры времени работы при разных данных. Оформляется таблицей - Десятый слайд — заключительный комментарий. Выводы
Время выступления 10–20 минут. Обратите внимание, что некоторые пункты могут
потребовать нескольких слайдов, поэтому разброс у каждого свой, но прошу придерживаться
структуры! Вопросы по реализации проектов обсуждаются во время очных занятий.
Поскольку мы с вами говорим о параллелизации, то, очевидно, такие работы
выше ценятся независимо от выбранного языка программирования. Однако даже без неё вы
можете получить максимальный балл. Начиная с апреля, я хотел бы начать слушать доклады.
4 Дифференцированный зачёт
Кто будет пойман на генерации кода при помощи ИИ во время сдачи диф. зачёта, досрочно завершает попытку и отправляется на пересдачу в другой день. Если это последний день приёма, то студент уходит с долгом до осеннего семестра.
Даты приёма: 11, 12, 18, 19 июня. К этим датам у вас должны быть сданы лабораторные работы в нужном количестве. С собой зачётка.
При ответе на теоретические вопросы не разрешается пользоваться конспектами.
Билет состоит из 2 теоретических вопросов и 1 практического задания. Примеры практических заданий представлены в Лабораторной работе №7 «Методы решения алгоритмических задач». В случае предоставления неполного или некорректного решения задание может быть уточнено или заменено на дополнительное.
О чём был курс?
Считается, что из курса вы вынесете следующее:
- Сможете рассказать в виде краткого обзора про алгоритмические стратегии: методы «грубой силы», жадные алгоритмы, численные алгоритмы, алгоритмы с возвратом, эвристические алгоритмы (отдельно муравьиные алгоритмы, генетические алгоритмы)
- Сформировали навык оценки алгоритмов по скорости работы (асимптотический анализ)
- Сформировали навык оценки ресурса параллелизма алгоритмов (видеть, какие участки кода можно потенциально распараллелить)
Вопросы к диф. зачёту
- Формализация понятия алгоритма. Опишите подходы к формализации понятия алгоритма: машину Тьюринга, нормальные алгоритмы Маркова, лямбда-исчисление Чёрча. Сформулируйте тезис Чёрча. Сформулируйте теорему о рекурсии.
- Асимптотический анализ. Опишите абстрактную модель вычислений. Перечислите вычислительные ресурсы. Раскройте идею асимптотического анализа алгоритмов. Что такое нотация big-O?
- Рекурсивные функции. Объясните, как вычисляется рекурсивная функция. Как выполняется асимптотический анализ рекурсивных алгоритмов? Опишите анализ рекуррентных соотношений. Сформулируйте мастер-теорему.
- Числа в памяти компьютера. Опишите представление чисел в памяти компьютера. Какие проблемы компьютерных вычислений вызваны использованием стандарта IEEE 754? Приведите примеры применения побитовых операторов.
- Параллелизация на уровне процессора. Раскройте основы параллелизации. Как устроена параллелизация на уровне процессора? Что такое векторные операции? Что такое интринсики?
- Параллелизация на уровне данных. Дайте определения процесса и потока. Опишите параллелизацию на уровне данных. В чём заключается проблема разделения ресурсов? Опишите задачу обедающих философов. Перечислите средства синхронизации.
- Численные приближения. Опишите алгоритмы численных приближений. Раскройте идею целочисленного интегрирования. Оцените ресурс параллелизации в алгоритмах численных приближений.
- «Разделяй и властвуй». Раскройте методы оптимизации «Разделяй и властвуй». Опишите бинарное возведение в степень. Опишите алгоритм Карацубы. Оцените ресурс параллелизации при реализации метода декомпозиции.
- Эффективность параллельных вычислений. Как оценивается эффективность параллельных вычислений? Опишите модель вычислений в виде графа «операции-операнды». Перечислите показатели эффективности параллельного алгоритма.
- Законы Амдала и Густавсона — Барсиса. Сформулируйте закон Амдала. Сформулируйте закон Густавсона — Барсиса. Приведите практические приложения закона Амдала.
- Параллельный Python. Как реализуются параллельные алгоритмы в Python? Что такое Global Interpreter Lock (GIL)? Перечислите готовые решения для многопоточных приложений в Python.
- Алгоритмы сортировки. Опишите алгоритмы сортировки. Выполните асимптотический анализ сортировки пузырьком, поразрядной сортировки и быстрой сортировки. Оцените ресурс параллелизации в алгоритме быстрой сортировки.
- Полный перебор. Раскройте метод полного перебора. Какие существуют методы оптимизации полного перебора? Опишите алгоритмы поиска с возвратом.
- Графовые задачи. Дайте определение графа. Перечислите виды графов. Как графы представляются в памяти? Приведите примеры графовых задач. Покажите, как граф используется в качестве инструмента научного анализа.
- Деревья. Дайте определение дерева. Опишите способы обхода деревьев. Что такое двоичная куча? Как выполняется поиск в двоичном дереве? Раскройте идею индексирования данных.
- Обходы графа. Дайте определение графа. Перечислите виды графов и способы представления графов в памяти. Опишите специализированные форматы хранения графов. Опишите поиск в глубину и поиск в ширину.
- Параллельный обход графа. Опишите специализированные форматы хранения графов. Как устроен параллельный поиск в ширину?
- Алгоритм Дейкстры: оптимизация. Раскройте идею динамического программирования. Сформулируйте задачу о кратчайшем пути. Опишите алгоритм Дейкстры. Оцените ресурс оптимизации алгоритма Дейкстры.
- Алгоритм Дейкстры: параллелизация. Раскройте идею динамического программирования. Сформулируйте задачу о кратчайшем пути. Опишите алгоритм Дейкстры. Оцените ресурс параллелизации алгоритма Дейкстры.
- Алгоритм Дельта-шага. Раскройте идею динамического программирования. Сформулируйте задачу о кратчайшем пути. Опишите алгоритм Дельта-шага. Оцените ресурс параллелизации алгоритма Дельта-шага.
- Жадные алгоритмы. Раскройте понятие жадного алгоритма. Сформулируйте задачу о рюкзаке. Приведите пример жадной оптимизации (алгоритм A*).
- Задача коммивояжёра. Сформулируйте задачу коммивояжёра. Разберите решения: метод грубой силы (полный перебор), динамическое программирование, жадный алгоритм.
- Метод ветвей и границ. Опишите поиск с возвратом и метод ветвей и границ. Сформулируйте задачу коммивояжёра. Как эвристики используются для оптимизации перебора (алгоритм Литтла)?
- Имитация отжига. Раскройте понятие эвристического алгоритма. Опишите алгоритм имитации отжига. Приведите примеры использования алгоритма имитации отжига.
- Генетический алгоритм. Раскройте понятие эвристического алгоритма. Опишите генетический алгоритм. Приведите примеры использования генетического алгоритма.
- Муравьиный алгоритм. Раскройте понятие эвристического алгоритма. Опишите муравьиный алгоритм. Приведите примеры использования муравьиного алгоритма.
- Алгоритмически неразрешимые задачи. Опишите подходы к формализации понятия алгоритма. Раскройте лямбда-исчисление Чёрча. Сформулируйте тезис Чёрча. Приведите примеры алгоритмически неразрешимых задач.
- Средства синхронизации. Раскройте основы параллелизации. Опишите средства синхронизации и их реализацию: атомарные переменные, мьютексы, семафоры.