Алгоритмы и структуры данных I. Основной поток 2026 — различия между версиями
(Новая страница: «'''Курс алгоритмы и структуры данных.''' '''1. О курсе''' Курс алгоритмов и структур данных —…») |
|||
| (не показана 1 промежуточная версия этого же участника) | |||
| Строка 30: | Строка 30: | ||
|- | |- | ||
|1||Асимптоматика. Бинарный поиск.||Бинарный поиск, два указателя | |1||Асимптоматика. Бинарный поиск.||Бинарный поиск, два указателя | ||
| + | |- | ||
|2||MergeSoft. QuickSort.|| | |2||MergeSoft. QuickSort.|| | ||
| + | |- | ||
|3||Derandomized. QuickSort. LSDSort.||Сортировки. | |3||Derandomized. QuickSort. LSDSort.||Сортировки. | ||
| + | |- | ||
|4||Кучи. HeapSort.|| | |4||Кучи. HeapSort.|| | ||
| + | |- | ||
|5||Кучи(продолжение). Динамический массив||Кучи, линейные контейнеры. | |5||Кучи(продолжение). Динамический массив||Кучи, линейные контейнеры. | ||
| + | |- | ||
|6||Связные списки. Кучи Фибоначчи.|| | |6||Связные списки. Кучи Фибоначчи.|| | ||
| + | |- | ||
|7||Стеки. Очередь.|| | |7||Стеки. Очередь.|| | ||
| + | |- | ||
|8||Дерево отрезков.||Дерево отрезков, дерево Фенвика. | |8||Дерево отрезков.||Дерево отрезков, дерево Фенвика. | ||
| + | |- | ||
|9||Динамическое ДО. Персистентные структуры данных | |9||Динамическое ДО. Персистентные структуры данных | ||
| + | |- | ||
|10||Деревья поиска:AVL-деревья, Splay-дерево.||Деревья поиска. | |10||Деревья поиска:AVL-деревья, Splay-дерево.||Деревья поиска. | ||
| + | |- | ||
|11||Неявное дерево поиска.|| | |11||Неявное дерево поиска.|| | ||
| + | |- | ||
|12||Декартово дерево. В-дерево.|| | |12||Декартово дерево. В-дерево.|| | ||
| + | |- | ||
|13||Красно-чёрное дерево.|| | |13||Красно-чёрное дерево.|| | ||
| + | |- | ||
|14||Хэш-таблицы.||Хеш-таблицы. | |14||Хэш-таблицы.||Хеш-таблицы. | ||
| + | |- | ||
|15||Хэш-таблицы (продолжение).|| | |15||Хэш-таблицы (продолжение).|| | ||
| − | + | |} | |
'''3. Коммуникация''' | '''3. Коммуникация''' | ||
За каждой группой закреплён семинарист и ассистент, к которым можно обращаться за помощью. | За каждой группой закреплён семинарист и ассистент, к которым можно обращаться за помощью. | ||
| − | |||
Чат курса (Telegram) | Чат курса (Telegram) | ||
| Строка 61: | Строка 74: | ||
Оценка за зачёт ставится за работу в семестре: за сдачу теоретических и практических домашних задач, а также за активность на семинарах и помощь в развитии курса (исправление опечаток в условиях, подготовка более сильных тестов к задачам, разработка собственных задач и пр.). | Оценка за зачёт ставится за работу в семестре: за сдачу теоретических и практических домашних задач, а также за активность на семинарах и помощь в развитии курса (исправление опечаток в условиях, подготовка более сильных тестов к задачам, разработка собственных задач и пр.). | ||
| − | Список задач будет | + | Список задач будет окончательно известен только ближе к концу семестра, поэтому заранее невозможно спрогнозировать, какие будут пороги на каждую оценку. |
Чтобы заработать минимальную положительную оценку (уд. 3), нужно набрать примерно 50% баллов от максимума. | Чтобы заработать минимальную положительную оценку (уд. 3), нужно набрать примерно 50% баллов от максимума. | ||
Чтобы заработать наивысшую оценку (отл. 10), нужно приблизиться к идеальному студенту, решившему все задачи. Решить всё возможно: в семестре будет много бонусных задач, которые идут в зачёт | Чтобы заработать наивысшую оценку (отл. 10), нужно приблизиться к идеальному студенту, решившему все задачи. Решить всё возможно: в семестре будет много бонусных задач, которые идут в зачёт | ||
| Строка 76: | Строка 89: | ||
3) кучи, линейные контейнеры; | 3) кучи, линейные контейнеры; | ||
4) дерево отрезков, дерево Фенвика; | 4) дерево отрезков, дерево Фенвика; | ||
| − | + | 5) деревья поиска; | |
| − | + | 6) хеш-таблицы. | |
В каждой теме планируется большой контест и небольшое теоретическое задание. | В каждой теме планируется большой контест и небольшое теоретическое задание. | ||
1. Теоретические задания | 1. Теоретические задания | ||
Теоретические домашние задания сдаются устно семинаристу. | Теоретические домашние задания сдаются устно семинаристу. | ||
| − | + | Формат предполагает: | |
объяснение решения, | объяснение решения, | ||
ответы на уточняющие вопросы, | ответы на уточняющие вопросы, | ||
| Строка 88: | Строка 101: | ||
2. Практические задания | 2. Практические задания | ||
Практические задачи делятся на два типа: | Практические задачи делятся на два типа: | ||
| − | + | 1. Задачи с код-ревью | |
Чтобы задача считалась решённой: | Чтобы задача считалась решённой: | ||
Необходимо загрузить код в указанный репозиторий (который укажут семинарист и ассистент). | Необходимо загрузить код в указанный репозиторий (который укажут семинарист и ассистент). | ||
| Строка 97: | Строка 110: | ||
число итераций ревью не ограничено; | число итераций ревью не ограничено; | ||
при этом ассистент может отказать в дальнейшем ревью, если считает, что было сделано чрезмерное количество некачественных попыток. | при этом ассистент может отказать в дальнейшем ревью, если считает, что было сделано чрезмерное количество некачественных попыток. | ||
| − | + | 2. Задачи без код-ревью | |
решения таких задач не предполагает обязательного просмотра кода решения со стороны ассистента. | решения таких задач не предполагает обязательного просмотра кода решения со стороны ассистента. | ||
такие задачи должны пройти все тесты в системе. | такие задачи должны пройти все тесты в системе. | ||
| − | + | а также пройти встроенную автоматическую проверку на кодстайл (то есть в самом яндекс-контесте настроены некоторые минимальные требования, чтобы код был не совсем плохой). | |
однако семинарист может выборочно запросить устную сдачу. | однако семинарист может выборочно запросить устную сдачу. | ||
Устная защита решений | Устная защита решений | ||
| + | |||
Для части задач из контестов предусмотрена устная защита. | Для части задач из контестов предусмотрена устная защита. | ||
Цель защиты: | Цель защиты: | ||
подтвердить самостоятельность решения, | подтвердить самостоятельность решения, | ||
проверить понимание алгоритма и структуры кода. | проверить понимание алгоритма и структуры кода. | ||
| + | |||
Такая система позволяет оценить: | Такая система позволяет оценить: | ||
теоретическую подготовку, | теоретическую подготовку, | ||
практические навыки программирования, | практические навыки программирования, | ||
| − | + | глубину понимания алгоритмов. | |
Бонусы | Бонусы | ||
Текущая версия на 17:49, 5 мая 2026
Курс алгоритмы и структуры данных.
1. О курсе Курс алгоритмов и структур данных — одна из ключевых дисциплин в области теоретической информатики на ФПМИ. Он посвящён изучению методов эффективного решения вычислительных задач и принципов организации данных, лежащих в основе современных программных систем. В рамках курса рассматриваются как фундаментальные теоретические вопросы, так и практические аспекты применения алгоритмических подходов в реальных задачах, возникающих в индустрии. В первом (осеннем) семестре основное внимание будет сосредоточено на разнообразных структурах данных, которые нужны будут в роли «чёрных ящиков» для более продвинутых алгоритмов. Для формирования необходимой базы в начале курса разбираются: классические линейные алгоритмы, принцип бинарного поиска, основные алгоритмы сортировки. Далее курс переходит к систематическому изучению структур данных, включая: линейные структуры, кучи (приоритетные очереди), деревья отрезков, деревья поиска, хеш-таблицы, а также ряд менее стандартных, но практически значимых подходов к организации данных. Курс ориентирован как на студентов, изучающих его в рамках обязательной программы, так и на всех, кто заинтересован в углублённом понимании алгоритмов и стремится научиться разрабатывать эффективные и масштабируемые программные решения. Пререквизиты: Студенты имеют первичное представление о языках программирования. Например, студенты в прошлом сдавали ЕГЭ по информатике или участвовали в разработке ИТ-проектов. От желающих сдавать курс факультативно (по выбору) ожидается знакомство с одним из языков программирования в рамках любого университетского курса.
2. План курса
В семестре 15 лекций и 30 семинаров (практических занятий).
| Неделя | Лекции | Домашние задания и контест |
|---|---|---|
| 1 | Асимптоматика. Бинарный поиск. | Бинарный поиск, два указателя |
| 2 | MergeSoft. QuickSort. | |
| 3 | Derandomized. QuickSort. LSDSort. | Сортировки. |
| 4 | Кучи. HeapSort. | |
| 5 | Кучи(продолжение). Динамический массив | Кучи, линейные контейнеры. |
| 6 | Связные списки. Кучи Фибоначчи. | |
| 7 | Стеки. Очередь. | |
| 8 | Дерево отрезков. | Дерево отрезков, дерево Фенвика. |
| 9 | Динамическое ДО. Персистентные структуры данных | |
| 10 | Деревья поиска:AVL-деревья, Splay-дерево. | Деревья поиска. |
| 11 | Неявное дерево поиска. | |
| 12 | Декартово дерево. В-дерево. | |
| 13 | Красно-чёрное дерево. | |
| 14 | Хэш-таблицы. | Хеш-таблицы. |
| 15 | Хэш-таблицы (продолжение). |
3. Коммуникация За каждой группой закреплён семинарист и ассистент, к которым можно обращаться за помощью. Чат курса (Telegram)
4. Прогресс студентов Таблица с оценками, доступная студентам
5. Система оценивания
За курс предусмотрены две независимые оценки: за зачёт и за экзамен.
Оценка за семестр считается по формуле в общей табличке. Оценка за зачёт ставится за работу в семестре: за сдачу теоретических и практических домашних задач, а также за активность на семинарах и помощь в развитии курса (исправление опечаток в условиях, подготовка более сильных тестов к задачам, разработка собственных задач и пр.).
Список задач будет окончательно известен только ближе к концу семестра, поэтому заранее невозможно спрогнозировать, какие будут пороги на каждую оценку. Чтобы заработать минимальную положительную оценку (уд. 3), нужно набрать примерно 50% баллов от максимума. Чтобы заработать наивысшую оценку (отл. 10), нужно приблизиться к идеальному студенту, решившему все задачи. Решить всё возможно: в семестре будет много бонусных задач, которые идут в зачёт Ожидаемый максимальный балл ~150.
Если в течение семестра студент не набирает баллов на уд3, он получает пересдачу. На пересдачу можно сдавать те же самые практические (в первую очередь задачи без код-ревью) и теоретические задачи. Начать дорешивать можно сразу после зачётной недели и вплоть до пересдачи в начале следующего семестра.
Оценка за экзамен ставится исключительно исходя из качества устного ответа на экзамене.
В течение семестра планируются 5–6 домашних заданий. Выдаются примерно каждые три недели сроком на три недели. 1) введение, бинарный поиск; 2) сортировки; 3) кучи, линейные контейнеры; 4) дерево отрезков, дерево Фенвика; 5) деревья поиска; 6) хеш-таблицы.
В каждой теме планируется большой контест и небольшое теоретическое задание. 1. Теоретические задания Теоретические домашние задания сдаются устно семинаристу. Формат предполагает: объяснение решения, ответы на уточняющие вопросы, демонстрацию понимания используемых идей и методов. 2. Практические задания Практические задачи делятся на два типа: 1. Задачи с код-ревью Чтобы задача считалась решённой: Необходимо загрузить код в указанный репозиторий (который укажут семинарист и ассистент). Ассистент проводит код-ревью. По результатам ревью код может быть отправлен на доработку. После успешного прохождения всех итераций ревью задача засчитывается, и за неё выставляется балл. Дополнительные правила: число итераций ревью не ограничено; при этом ассистент может отказать в дальнейшем ревью, если считает, что было сделано чрезмерное количество некачественных попыток. 2. Задачи без код-ревью решения таких задач не предполагает обязательного просмотра кода решения со стороны ассистента. такие задачи должны пройти все тесты в системе. а также пройти встроенную автоматическую проверку на кодстайл (то есть в самом яндекс-контесте настроены некоторые минимальные требования, чтобы код был не совсем плохой). однако семинарист может выборочно запросить устную сдачу. Устная защита решений
Для части задач из контестов предусмотрена устная защита. Цель защиты: подтвердить самостоятельность решения, проверить понимание алгоритма и структуры кода.
Такая система позволяет оценить: теоретическую подготовку, практические навыки программирования, глубину понимания алгоритмов.
Бонусы Семинарист может ставить небольшие бонусы за активность на семинарах. Уточняйте правила их выставления у семинаристов. Если понимаете, что в какой-то задаче очень слабые тесты (заходят решения, которые не должны), можете подготовить более сильные тесты. Их добавят в систему, а вам дадут бонусные баллы.
Штрафы Ближе к концу семестра будет проведена проверка на списывание (антиплагиат). Пойманные на списывании получат штраф к баллам за семестр, включая автоматический «неуд». Списыванием может быть рассчитано и независимое использование одного и того же открытого кода. Поэтому пишите полностью свой код, не прибегая к помощи готовых библиотек. Исключение — код, приводимый на лекциях и семинарах.
6. Правила курса
Более подробно и во избежание спорных ситуаций в конце семестра читайте о правилах курса здесь
7. Команда курса Лектор Степанов Илья Семинаристы:
8. Материалы курса лекции потока 2024 года Примерная программа экзамена
Литература: Абрамов С. А. Лекции о сложности алгоритмов. МЦНМО, 2020. Рейнгольд Э., Нивергельт Ю., Део Н. Комбинаторные алгоритмы. Теория и практика. «Мир», 1980. Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычислительных алгоритмов. «Мир», 1979. Кнут Д. Э. Искусство программирования, Т. 1. «ИД Вильямс», 2018. Кнут Д. Э. Искусство программирования, Т. 3. «ИД Вильямс», 2018. Карацуба А. А., Офман Ю. П. Умножение многозначных чисел на автоматах // Доклады АН СССР, 1962, 145(2). Strassen V. Gaussian elimination is not optimal // Numerische Mathematik, 1969, 13(4). Кормен Т. и др. Алгоритмы. Построение и анализ. «ИД Вильямс», 2011.