brdglv / algodspy

Проект по алгоритмам и структурам данных на языке Python студентов первого курса ШЕН ДВФУ специальности Прикладная математика и информатика.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Алгоритмы и структуры данных на Python

Проект по алгоритмам и структурам данных на языке программирования Python студентов первого курса ШЕН ДВФУ специальности Прикладная математика и информатика.

Содержание

Цель проекта

Структура проекта

Правила работы над проектом

План минимум и максимум по алгоритмам и структурам данных

Цель проекта

Проект направлен на практическое освоение алгоритмов и структур данных через их реализацию на языке программирования Python и создания на этой основе отрытого обучающего веб-ресурса, содержащего справочную информацию и демонстрацию работы реализованных алгоритмов и структур данных.

Разработку этого обучающего ресурса планируется вести максимально приближенно к реальной разработке продуктов:

  • командная работа с использованием системы контроля версий git и портала Github
  • совместное обсуждение задач и разработка проекта по методологии agile
  • следование лучшим практикам проектирования и написания кода
  • написание тестов для создаваемого функционала и использование автотестирования
  • документирование создаваемого кода

Структура проекта

Проект будет состоять из библиотеки структур данных и алгоритмов, реализованными студентами (с тестами и документацией), а также из веб-сервиса по вызову этих алгоритмов, демонстрации их работы, описанием, примерами использования и т.д. То есть помимо самой реализации алгоритмов, из открытых источников будет собран и переработан справочный обучающий материал по каждому алгоритму и структуре данных. Интерфейсом к веб-сервису будет служить веб-приложение или телеграм-бот. Конкретная архитектура всех частей проекта будет прорабатываться совместно со студентами в команде с учётом всех современных технологий и лучших практик.

В дальшейшем появится дорожная карта и прочее.

Правила работы над проектом

Предожение и обсуждение задач

Прежде чем начинать работу над изменениями в проекте, посмотрите раздел Issues и либо выберете себе задачу (если вам не назначена никакая задача), либо создайте новую Issue в случае, если вы предлагаете какое-то улучшение или хотите сообщить об ошибке.

Работа с репозиторием и внесение изменений

Когда вам назначили задачу / вы выбрали задачу, над которой работать, то выполните следующие шаги:

  1. Проверьте, что вы указаны в исполнителях задачи (Issue).
  2. Если в первый раз работаете с репозиторием, то склонируйте его себе на компьютер.
  3. Переключитесь на ветку master: git checkout master
  4. Проверьте, что ваш локальный репозиторий не содержит никаких изменений в ветке master: git status
  5. Синхронизируйте на всякий случай ветку master с удалённым репозиторием: git pull
  6. Создайте ветку для работы над задачей (Issue) с названием issue123, где 123 - номер задачи и переключитесь на неё: git checkout -b issue123
  7. Работайте над реализацией задачи, вносите небольшие, но законченные изменения.
  8. Проверьте состояние ветки и изменений в ней: git status
  9. Добавьте изменённые файлы в следующий коммит: git add . (точка - добавить все изменённые файлы в этом каталоге и его подкаталогах)
  10. Зафиксируйте изменения, сделав коммит, указав в сообщении суть изменений: git commit -m "message"
  11. Проверьте код на соответвтие стандартам автоматическими средствами (если есть) и запустите тесты всего проекта.
  12. Если предыдущий пункт прошёл неудачно, то повторите шаги 7-11, если удачно, то отправьте изменения на github в удалённый репозиторий проекта: git push origin issue123 (где issue123 - имя текущей ветки)
  13. Можете сразу открыть Pull Request, чтобы отслеживать и обсуждать вашу работу.
  14. Повторите пункты 3 - 12, пока не закончите с задачей.
  15. Когда ваш Pull Request будет принят, можете удалить ветку issue123: git branch -d issue123

Требования к написанию кода

Главные требования:

  1. Соблюдать стиль написания на выбранном языке.
  2. Реализовывать только то, что указано в задаче (Issue).
  3. Следовать структуре проекта.
  4. Писать тесты для реализумого функционала.

Требования к коду на Питоне:

  1. Соблюдать стандарт оформления кода PEP8.
  2. По умолчанию весь код писать в парадигме объектно-ориентированного программирования.
  3. Именование всего и вся согласно PEP8, но вот ещё раз памятка.
  4. Все исходные файлы помещаем в каталог algodspy, все тесты - в tests.
  5. Прежде чем делать commit и тем более push проверьте работоспособность кода с помощью тестов: python -m unittest discover -s tests -v
  6. Чтобы проверить себя на PEP8, можете установить пакет flake8: pip install flake8. Для запуска проверки используйте команду: flake8 --ignore W293,W391,W292

План минимум и максимум по алгоритмам и структурам данных

Поскольку практика проводится в рамках теоретического курса, покрывающего определённые темы, то план минимум будет перечислен ниже, в соответствии с теоретическим курсом.

Однако, чтобы получить более цельное представление об алгоритмах и структурах данных, а также распределить работу по студентам, по плану максимум будет реализация большинстрва структур данных из списка википедии, а также большинства алгоритмов из списка википедии, с использованием этих структур. При этом приоритет будет отдаваться алгоритмам и структурам данных, которые присутствуют в плане минимум.

Источники, которые помогут в работе с алгоритмами и структурами данных:

Сортировки

Деревья

Поиск подстрок

  • С прямой адресацией
  • С помощью цепочек
  • Хэш функции
  • Открытая адресация
  • Идеальное хэширование

Алгоритмы сжатия

Всё остальное

  • Размещения. Генерация размещения с повторениями, без повторениями. Перестановки
  • Сочетания. Представление подмножеств как целых чисел. Перебор подмножеств
  • Поиск с возвратом, перебор с отсечениями
  • Расписание работы конвейера. Структура оптимальной сборки, оптимальность подзадач. Рекурсивное решение. Мемоизация. Восстановление ответа
  • Метод точного среднего (Амортизационный анализ)
  • Поиск в глубину и его свойства, классификация ребер. Лемма о белом пути
  • Поиск в ширину. Поиск кратчайшего пути на невзвешенном графе.
  • ДП в пространстве ответа. Задача о рюкзаке
  • Лес непересекающихся множеств.
  • Кратчайшие пути из одной вершины, свойства. Отрицательные циклы
  • Проверка графа на ацикличность. Подсчет компонент связности
  • Задача о выборке заявок
  • Непрерывная задача о рюкзаке

About

Проект по алгоритмам и структурам данных на языке Python студентов первого курса ШЕН ДВФУ специальности Прикладная математика и информатика.

License:GNU General Public License v3.0


Languages

Language:Python 100.0%