====== Регламент выполнения и защиты курсовой работы ====== ===== Требования к отчёту по курсовой работе ===== В отчёте должны быть: * титульный лист, лист задания, аннотация, содержание; * формальная постановка задачи; * описание алгоритма; * описание структур данных и функций; * описание интерфейса пользователя - для работ с визуализацией; * тестирование; * исследование реализованной структуры / алгоритма; * исследование всех операций над структурой * графики практической и теоретической оценки * программный код (в приложении); * выводы. Титульный лист, лист задания и программный код являются абсолютно необходимыми разделами, без которых даже не может быть начат процесс защиты. Отчёт по курсовой работе должен быть оформлен в соответствии с шаблоном оформления курсовой работы: https://etu.ru/ru/studentam/dokumenty-dlya-ucheby/ ===== Общие требования к работе ===== ==== Реализация структур и алгоритмов ==== * Все необходимые в рамках выполнения работы структуры должны реализовываться студентом **самостоятельно** * **Не допускается** использование встроенных / импортированных классов, представляющих из себя структуры или их аналоги (Python: **list**, dict, set и др. С/С++: map, set, deque и пр.) * Использование в тестировании / исследовании - разрешается, в иных частях работы - по согласованию с преподавателем. * Все необходимые в рамках выполнения работы алгоритмы должны реализовываться студентом **самостоятельно** * **Не допускается** использование встроенных / импортированных функций/классов, предоставляющих реализацию алгоритмов ==== Исследование реализованных структур и алгоритмов ==== * Исследование реализованной структуры проводится по всем реализованным операциям * Должны быть приведены обоснования лучшего, среднего, худшего случаев работы операций, а также способ формирования входных данных (или характеристик структуры) для этих случаев (если применимо) * Графики практической и теоретической оценки (для всех операций и случаев) * Исследование реализованного алгоритмы проводится по всем случаям работы алгоритма * Должны быть приведены обоснования лучшего, среднего, худшего случаев работы, а также способ формирования входных данных (или настроек алгоритма) для этих случаев (если применимо) * Графики практической и теоретической оценки (для всех случаев) См. также раздел "Исследования в рамках ЛР/КР" в документе [[https://docs.google.com/document/d/1zbKQkIAbFwHrRMyRTpes6dLR_TEbKgQHbzVTVrnBhfQ|[ALG] Типовые ошибки отчета / работы]] ===== Требования к обоснованию ===== ==== Цель обоснования ==== Продемонстрировать понимание не только выбранной структуры данных, но и альтернативных вариантов, а также умение проводить системный анализ задачи на основе её операционной семантики и характеристик данных. ==== Формализация постановки задачи ==== === Операции === **Явный нумерованный список** всех операций, которые должна поддерживать структуры в рамках решаемой задачи: # Пример 1. Добавление записи 2. Поиск по уникальному ключу 3. Удаление по ключу 4. Получение всех данных в отсортированном порядке. === Анализ частоты операций === Качественная или количественная (если применимо) оценка относительной частоты выполнения **каждой операции**: * если указана в задании - берётся из задания * иначе - вводится студентов самостоятельно (или берётся равномерной) === Характеристики данных === * Объем данных * Ожидаемое количество элементов (100 / 10^6 / 10^9) * Фиксированность размера данных - постоянное (после создания структуры) или растущее/уменьшающееся в процессе работы. * Динамика данных * Данные статичны после загрузки или активно изменяются (вставка/удаление). * Ключи (если применимо) * Тип ключа (целое число, строка, составной ключ) * Характер доступа (случайный, последовательный) * Наличие уникальности. * Потребления по памяти (по желанию) * Размер хранимого объекта (байты, килобайты). ==== Критерии выбора ==== Явно перечислить, какие **критерии оптимальности** важны для конкретно вашей задачи и почему. # Пример 1. Скорость доступа по ключу (поиск, вставка, удаление). 2. Скорость выполнения специализированных операций (поиск минимума/максимума, слияние). 3. Поддержка упорядоченности данных. 4. Предсказуемость времени выполнения. 5. Эффективность по памяти. ==== Анализ альтернативных структур данных ==== * Необходимо **минимум 2-3 реальных альтернативы** * Можно оформить в виде таблицы "Критерий / Структура" * Для каждого аналога необходимо провести анализ по обозначенным критериям выбора (см. предыдущий раздел "Критерии выбора") * Теоретическая сложность операций * Для каждой операции из раздела "Операции" указать сложность при работе с исследуемой структурой (средний и худший случаи) * Практические особенности * Указать имеющиеся нюансы реализации, усложняющие работу, и вероятность встречи с ними (например, рехеширование для хэш-таблиц, сложность балансировки и пр.) * Пригодность под характеристики данных * Подходит ли структура под ожидаемый объем, тип ключа, динамику * Вывод по каждому аналогу * Вывод, почему аналогу подходит / не подходит ==== Выбор структуры ==== * На основе таблицы и анализа делается итоговый вывод. * Необходимо явно и четко ответить на вопросы * //Почему преимущества выбранной структуры максимально соответствуют сформулированным критериям, а недостатки — минимально критичны в контексте задачи?// * (если применимо) //Почему не выбрана комбинация из структур, максимально покрывающих операции в контексте задачи?//. # Пример Плохое обоснование: "хэш-таблица работает быстрее". Хорошее обоснование (краткий пример): * Выбрана хеш-таблица с открытой адресацией, поскольку основная операция в задаче — ..., что позволяет .... * Операция ... из-за отсутствия встроенной упорядоченности / диапазонных запросов будет производиться за счет ... * Ожидаемый размер данных (до 10 000 записей) позволяет выбрать .... ===== Порядок защиты курсовой работы ===== Защита курсовой работы состоит из двух этапов: решение билета на защиту и беседа с преподавателем. На решение билета студенту отводится 40 минут. Билет на защиту содержит (билеты): * задачу на программирование (модификация существующего кода курсовой работы студента или другая смежная задача в зависимости от выбранной темы) * теоретические вопросы по теме курсовой работы студента В случае, если студент не выполнил часть билета на защиту (например, одно из заданий: задача / теор. вопросы), он может быть допущен ко второму этапу защиту со снижением максимально возможной оценки за защиту (на 1 балл). Невыполнение обоих пунктов билета на защиту означает прекращение защиты и оценку "неудовлетворительно". В результате беседы с преподавателем, ответов на вопросы по билету на защиту, исходному коду и теме курсовой работы оценка студента может быть снижена (на 1 балл). После беседы с преподавателем студент получает максимальную возможную оценку с учётом всех её снижений. Студент получает максимальную оценку согласно выбранному уровню курсовой работы, если выполнены все следующие условия: * Студент выполнил полностью задание на защиту, программа запускается и демонстрирует корректность работы на тестах, предложенных студентом и преподавателем. Задание было успешно встроено в курсовую работу. * Студент верно отвечает на все вопросы преподавателя. * Студент способен прокомментировать свою работу как с точки зрения логики её выполнения, так и с точки зрения использования конструкций языка. Основания для снижения оценки во время беседы с преподавателем: * Задание на программирование выполнено полностью, но корректный результат работы программа показывает только на нескольких тестах. * Студент совершает более двух ошибок при ответе на вопросы. * Студент не может прокомментировать логику работы своей программы и/или дать комментарии по программному коду. Неправильно данные ответы приравниваются к неспособности студента дать комментарии.