Дисциплина «Алгоритмы и структуры данных» ИВТ УлГТУ: различия между версиями
Перейти к навигации
Перейти к поиску
Ctrlalt (обсуждение | вклад) |
Ctrlalt (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
== | == Материалы по программированию на C++ == | ||
* [http://stepik.org/course/363/syllabus Курс «Введение в программирование на C++» от Яндекса и НИУ ВШЭ] | |||
* [http://docs.google.com/document/d/1WtBaPGFmSQxc9QPgdD0zGvhsK4TGOLYff9pBBARWQlM/edit Краткая справка по указателям] | |||
* [http://www.cplusplus.com/reference/ Исчерпывающее описание стандартной библиотеки] | |||
[http://docs.google.com/document/d/1lvI-7gs7uyxnciw-NKvTITNgLA6qt83l1BNZYzW7d3o/edit?usp=sharing Конспект лекций | == Лекции == | ||
=== Конспект === | |||
[http://docs.google.com/document/d/1lvI-7gs7uyxnciw-NKvTITNgLA6qt83l1BNZYzW7d3o/edit?usp=sharing Конспект лекций] | |||
* Сложность алгоритмов. Сортировки | В 2016 г. составлялся студентами. В настоящее время неспешно переписывается преподавателем. | ||
=== План === | |||
* Сложность алгоритмов. Сортировки | |||
: Правила асимптотического анализа алгоритмов. Асимптотические обозначения. Основные классы сложности. | : Правила асимптотического анализа алгоритмов. Асимптотические обозначения. Основные классы сложности. | ||
: Сортировки: выбором, вставками, слиянием, быстрая. Ω-оценка для сортировок сравнением. | : Сортировки: выбором, вставками, слиянием, быстрая. Ω-оценка для сортировок сравнением. | ||
: Устойчивость сортировок. Сортировки за линейное время: подсчётом, поразрядная. | : Устойчивость сортировок. Сортировки за линейное время: подсчётом, поразрядная. | ||
* Бинарный поиск | * Бинарный поиск | ||
: Бинарный поиск элемента в отсортированном массиве. Поиск первого и последнего вхождения. | : Бинарный поиск элемента в отсортированном массиве. Поиск первого и последнего вхождения. | ||
: Бинарный поиск по ответу. | : Бинарный поиск по ответу. | ||
Строка 14: | Строка 22: | ||
: Тернарный поиск. | : Тернарный поиск. | ||
* Динамическое программирование. Жадные алгоритмы | * Динамическое программирование. Жадные алгоритмы | ||
: Решение задач комбинаторной оптимизации: полный перебор и методы его сокращения. | : Решение задач комбинаторной оптимизации: полный перебор и методы его сокращения. | ||
: Жадные алгоритмы. Принцип жадного выбора. Задачи: непрерывный рюкзак, выбор заявок, размен монет, коды Хаффмана. | : Жадные алгоритмы. Принцип жадного выбора. Задачи: непрерывный рюкзак, выбор заявок, размен монет, коды Хаффмана. | ||
: Динамическое программирование. Критерии применимости ДП. Ленивая рекурсия и просмотр вперёд. Восстановление решения. | : Динамическое программирование. Критерии применимости ДП. Ленивая рекурсия и просмотр вперёд. Восстановление решения. | ||
: [[Динамическое программирование|Виды одномерной и двумерной динамики.]] | : [[Динамическое программирование|Виды одномерной и двумерной динамики.]] | ||
:: [http://www.youtube.com/watch?v=SFeCrCme4tk | :: Краткие видео по динамическому программированию: [http://www.youtube.com/watch?v=SFeCrCme4tk 1] [http://www.youtube.com/watch?v=1h_3VYrpHFc 2] [http://www.youtube.com/watch?v=wuXC13OqcJ8 3] [http://www.youtube.com/watch?v=t2DpD9GnhfU 4] [http://www.youtube.com/watch?v=HtrgxH3feME 5] [http://www.youtube.com/watch?v=-yiKNcjcK0Y 6] [http://www.youtube.com/watch?v=r6LRslQvveQ 7] | ||
* Структуры данных. Расширяющийся массив. Список | * Структуры данных. Расширяющийся массив. Список | ||
Строка 71: | Строка 73: | ||
: Структура данных «Система непересекающихся множеств» и её эвристики. | : Структура данных «Система непересекающихся множеств» и её эвристики. | ||
== | == Практика == | ||
К каждой лекции прилагается комплект задач на [http://vtcloud9.ulstu.ru/ru/contestlist vtcloud9]. Задачи можно решать на C++ или Java. | |||
<span style="color:red">Решения задач каждого комплекта засчитываются в течение одной недели после конца лекции.</span> Если вы не смогли решить комплект по уважительной причине, сообщите преподавателю. | |||
== | == Курсовая работа == | ||
(будет добавлено позднее) | |||
== Экзамен == | |||
(будет добавлено позднее) | |||
<!-- | |||
== <span style="color: red;">Задания на курсовые работы</span> == | == <span style="color: red;">Задания на курсовые работы</span> == | ||
Строка 138: | Строка 138: | ||
/* пример вывода: */ | /* пример вывода: */ | ||
System.out.printf(Locale.US, "%.4f", x); | System.out.printf(Locale.US, "%.4f", x); | ||
--> |
Версия от 19:59, 3 сентября 2017
Материалы по программированию на C++
- Курс «Введение в программирование на C++» от Яндекса и НИУ ВШЭ
- Краткая справка по указателям
- Исчерпывающее описание стандартной библиотеки
Лекции
Конспект
В 2016 г. составлялся студентами. В настоящее время неспешно переписывается преподавателем.
План
- Сложность алгоритмов. Сортировки
- Правила асимптотического анализа алгоритмов. Асимптотические обозначения. Основные классы сложности.
- Сортировки: выбором, вставками, слиянием, быстрая. Ω-оценка для сортировок сравнением.
- Устойчивость сортировок. Сортировки за линейное время: подсчётом, поразрядная.
- Бинарный поиск
- Бинарный поиск элемента в отсортированном массиве. Поиск первого и последнего вхождения.
- Бинарный поиск по ответу.
- Вещественный бинарный поиск.
- Тернарный поиск.
- Динамическое программирование. Жадные алгоритмы
- Решение задач комбинаторной оптимизации: полный перебор и методы его сокращения.
- Жадные алгоритмы. Принцип жадного выбора. Задачи: непрерывный рюкзак, выбор заявок, размен монет, коды Хаффмана.
- Динамическое программирование. Критерии применимости ДП. Ленивая рекурсия и просмотр вперёд. Восстановление решения.
- Виды одномерной и двумерной динамики.
- Структуры данных. Расширяющийся массив. Список
- Смежные и связные структуры данных. Работа с классами и динамической памятью.
- Понятие амортизированной сложности. Стратегии реализации динамического массива.
- Реализации списков.
- Сравнение быстродействия основных операций для массивов и списков.
- Стек. Очередь. Очередь с приоритетами
- Стек LIFO: реализация на массиве и связном списке. Классические приложения стека.
- Очередь FIFO: реализация на циклическом массиве и связном списке. Классические приложения очереди. Дек.
- Интерфейс очереди с приоритетами. Двоичная куча.
- Деревья. Хеш-таблицы
- Интерфейс АТД «Множество» и «Словарь».
- Двоичные деревья поиска. Поиск, добавление и удаление элементов: рекурсивная и нерекурсивная реализация.
- Принципы функционирования хеш-таблиц. Разрешение коллизий: метод цепочек, открытая адресация.
- Балансирующиеся деревья
- Недостатки наивной реализации двоичного дерева поиска.
- Обзор балансирующихся деревьев: 2-3-, красно-чёрные и AA-деревья.
- Декартово дерево. Реализация интерфейса АТД «Множество» и «Словарь».
- Множественные операции в декартовом дереве.
- Графы. Поиск в глубину
- Представление графа. Матрица смежности, списки смежности, список рёбер.
- Поиск в глубину.
- Компоненты связности.
- Поиск циклов.
- Топологическая сортировка.
- Компоненты сильной связности.
- Поиск мостов.
- Кратчайшие пути
- Кратчайшие пути в невзвешенном графе. Поиск в ширину.
- Кратчайшие пути в графе с неотрицательными весами. Алгоритм Дейкстры за O(V2) и за O(ElogV).
- Кратчайшие пути в ациклических орграфах.
- Кратчайшие пути в графе с отрицательными весами. Алгоритм Форда-Беллмана.
- Кратчайшие пути между всеми парами вершин. Алгоритм Флойда.
- Проверка графа на наличие отрицательного цикла.
- Минимальный остов. Система непересекающихся множеств
- Алгоритм Прима.
- Алгоритм Краскала.
- Структура данных «Система непересекающихся множеств» и её эвристики.
Практика
К каждой лекции прилагается комплект задач на vtcloud9. Задачи можно решать на C++ или Java.
Решения задач каждого комплекта засчитываются в течение одной недели после конца лекции. Если вы не смогли решить комплект по уважительной причине, сообщите преподавателю.
Курсовая работа
(будет добавлено позднее)
Экзамен
(будет добавлено позднее)