Skip to content

Commit

Permalink
Поправлена нумерация и формулировки задач 10--12.
Browse files Browse the repository at this point in the history
  • Loading branch information
gsvgit committed Apr 20, 2024
1 parent f2623ba commit c432786
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 22 deletions.
8 changes: 4 additions & 4 deletions tasks/task10.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# Задача 10. Экспериментальное исследование алгоритмов решения задачи достижимости с КС ограничениями

* **Мягкий дедлайн**: !!!, 23:59
* **Жёсткий дедлайн**: !!!, 23:59
* **Жёсткий дедлайн**: 08.05.2024, 23:59
* Полный балл: 19

## Задача

Задача посвящена анализу производительности различных алгоритмов решения задачи достижимости между всеми парами вершин с контекстно-свободными ограничениями: алгоритма Хеллингса, матричного алгоритма, тензорного алгоритма. В ходе анализа необходимо ответить на следующие вопросы.
Задача посвящена анализу производительности различных алгоритмов решения задачи достижимости между всеми парами вершин с контекстно-свободными ограничениями: алгоритма Хеллингса, матричного алгоритма, тензорного алгоритма, алгоритма на основе GLL. В ходе анализа необходимо ответить на следующие вопросы.
- Какой из трёх указанных алгоритмов обладает лучшей производительностью?
- Имеет ли смысл для решения задачи достижимости с регулярными ограничениями использовать алгоритмы для КС ограничений (ведь регулярные --- частный случай КС) или всё же лучше использовать специализированные алгоритмы для регулярных ограничений?
- Как влияет грамматика на производительность тензорного алгоритма и алгоритма на основе GLL? Если зафиксировать язык, то как свойства грамматики (размер, (не)однозначность) влияют на производительность.

Решение данной задачи оформляется как Python notebook. Для того, чтобы обеспечить возможность проверки, необходимо сделать notebook самодостаточным: в него должны быть включены все действия, необходимые для воспроизведения эксперимента. Также в notebook размещается отчет и анализ результатов ваших экспериментов в текстовом виде. Отчет сопровождается диаграммами, таблицами, картинками, если это необходимо для объяснения результатов.

Expand All @@ -30,7 +30,7 @@
- [ ] Подключить необходимые решения из предыдущих работ.
- [ ] Сформировать набор данных.
- [ ] Выбрать некоторые графы из [набора](https://formallanguageconstrainedpathquerying.github.io/CFPQ_Data/graphs/index.html). Не забудьте обосновать, почему выбрали именно эти графы. Обратите внимание, что в наборе есть графы и грамматики для различных прикладных задач (анализ RDF, анализ указателей в С, анализ Java-программ). Рекомендуется выбирать графы, относящиеся к различным областям.
- [ ] В качестве запросов предлагается использовать грамматики из раздела "Canonical grammars" в описании соответствующего графа ([пример](https://formallanguageconstrainedpathquerying.github.io/CFPQ_Data/graphs/data/taxonomy_hierarchy.html#canonical-grammars)).
- [ ] В качестве запросов предлагается использовать грамматики из раздела "Canonical grammars" в описании соответствующего графа ([пример](https://formallanguageconstrainedpathquerying.github.io/CFPQ_Data/graphs/data/taxonomy_hierarchy.html#canonical-grammars)). При необходимости (например, при ответе на третий вопрос), можно "оптимизировать" грамматику, вручную создав оптимальную RSM. Или же наоборот, преобразовать её в ОНФХ, или сделать её (не)однозначной.
- [ ] Сформулировать этапы эксперимента. Что нужно сделать, чтобы ответить на поставленные вопросы? Почему?
- [ ] Провести необходимые эксперименты, замеры
- [ ] Оформить результаты экспериментов
Expand Down
11 changes: 6 additions & 5 deletions tasks/task10_bonus.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
# Задача 10. Экспериментальное исследование алгоритмов решения задачи достижимости с КС ограничениями
# Задача 10 (бонусная). Экспериментальное исследование алгоритмов решения задачи достижимости с КС ограничениями

* **Мягкий дедлайн**: 11.12.2022, 23:59
* **Жёсткий дедлайн**: 14.12.2022, 23:59
* Полный балл: 20
* **Жёсткий дедлайн**: 08.05.2024, 23:59
* Полный балл: 25

## Задача

Задача посвящена анализу производительности различных алгоритмов решения задачи достижимости между всеми парами вершин с контекстно-свободными ограничениями: алгоритма Хеллингса, матричного алгоритма, тензорного алгоритма. В ходе анализа необходимо ответить на следующие вопросы.
Задача посвящена анализу производительности различных алгоритмов решения задачи достижимости между всеми парами вершин с контекстно-свободными ограничениями: алгоритма Хеллингса, матричного алгоритма, тензорного алгоритма, алгоритма, основанного на GLL. В ходе анализа необходимо ответить на следующие вопросы.
- Какой из трёх указанных алгоритмов обладает лучшей производительностью?
- Имеет ли смысл для решения задачи достижимости с регулярными ограничениями использовать алгоритмы для КС ограничений (ведь регулярные --- частный случай КС) или всё же лучше использовать специализированные алгоритмы для регулярных ограничений?
- Как влияет грамматика на производительность тензорного алгоритма и алгоритма на основе GLL? Если зафиксировать язык, то как свойства грамматики (размер, (не)однозначность) влияют на производительность.


Решение данной задачи оформляется как Python notebook. Для того, чтобы обеспечить возможность проверки, необходимо сделать notebook самодостаточным: в него должны быть включены все действия, необходимые для воспроизведения эксперимента. Также в notebook размещается отчет и анализ результатов ваших экспериментов в текстовом виде. Отчет сопровождается диаграммами, таблицами, картинками, если это необходимо для объяснения результатов.

Expand Down
21 changes: 8 additions & 13 deletions tasks/task12.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,16 @@


## Задача
В данной задаче необходимо разработать интерпретатор языка запросов согласно спецификации, разработанной в работе 13. Интерпретатор должен быть консольной утилитой и принимать на вход файл, исполнять его, сообщать в консоль о статусе исполнения (завершилось успешно, завершилось с ошибкой). Обратите внимание, что для "публикации" результатов вычислений в языке предусмотрена функция ```print```. Также обратите внимание на адекватность сообщений об исключительных ситуациях (некорректный вход, проблемы с типизацией и т.д.)
В данной задаче необходимо разработать интерпретатор языка запросов, разработанного в предыдущей работе. Для исполнения запросов использовать алгоритмы, реализованные в предыдущих работах. КРоме реализации необходимо предоставить минимальную документацию, поясняющую принятые в процессе реализации решения (например, в readme).

Так как интерпретатор --- достаточно сложный проект, для него необходима документация. Частью документации будет спецификация языка из работы 13. Дополнительно необходимо задокументировать особенности системы типов, используемые алгоритмы запросов.
Обратите внимание, что кроме непосредственно интерпретатора необходимо реализовать вывод типов. Тестирование данной функциональности должно быть возможно в изоляции. Фактически, должна быть реализована отдельная функция, которая по дереву разбора выводит типы и кидает исключение, если программа не можете быть типизирована корректно.

Прежде чем писать код, продумайте его архитектуру. Предусмотрите возможности для тестирования отдельных функций, отдельной функциональности (скажем, тестирование системы типов).

- [ ] Разработать и описать (в документации) механизм вывода или проверки типов, гарантирующий корректность построения запросов (в частности, что не строится пересечение двух контекстно-свободных языков, или что состояния автоматов задаются значениями допустимых типов).
- Типизация должна быть строгой.
- Типизация может быть как статической, так и динамической.
- Можно использовать как вывод типов, так и проверку типов.
- Работа системы типов должна соответствовать правилам, указанным в постановке задачи 13 и в вашем её решении (возможны тонкости с частями, абстрактный синтаксис для которых требовалось придумать самостоятельно).
- [ ] Реализовать механизм вывода типов, гарантирующий корректность построения запросов (в частности, что не строится пересечение двух контекстно-свободных языков, или что множества вершин задаются значениями допустимых типов).
- Работа системы типов должна соответствовать правилам, указанным предыдущей задаче.
- Постарайтесь сделать сообщения об ошибках максимально дружественными к пользователю.
- [ ] Из множества реализованных в предыдущих работах алгоритмов выполнения запросов к графам выбрать те, которые будут использоваться в интерпретаторе. Обосновать свой выбор (зафиксировать в документации).
- [ ] Используя парсер из работы 14, разработанную систему вывода или проверки типов, выбранные алгоритмы, реализовать интерпретатор языка, описанного в работе 13.
- Хотя конечное решение и должно быть консольной утилитой, предусмотрите возможности для тестирования. Например, сделайте так, чтобы вход можно было получить из строки и, например, "перехватить" результаты вычислений для их проверки в тестах.
- Проследите за адекватностью сообщений об ошибках.
- [ ] Используя парсер из предыдущей работы, разработанную систему вывода типов, выбранные алгоритмы, реализовать интерпретатор языка, описанного в предыдущей задаче.
- Требуется реализовать функцию, которая по дереву разбора, предоставленному ANTLR, вернёт словарь, содержащий для всех связываний, где в правой части `select`, имя (левую часть связывания) в качестве ключа, а в качестве значения --- результат выполнения соответствующего запроса.
- Проследите за адекватностью сообщений об ошибках. Вам же проще отлаживаться будет.
- Постарайтесь максимально использовать возможности ANTLR по работе с деревом разбора.
- [ ] Добавить необходимые тесты. Тут, как и с парсером, тестов много не бывает. И, как и с парсером, они должны быть атомарными. При этом и на сложных входах надо не забыть протестировать.
- [ ] Добавить необходимые тесты.

0 comments on commit c432786

Please sign in to comment.