# cmc-pseudo-polynomials Курсовой проект за первый курс магистратуры ВМК МГУ ## Сборка Требуется cmake и компилятор C++ с поддержкой C++14. Если это не gcc, возможно, потребуется поправить CMakeLists.txt. Команды для сборки могут быть такими: ``` mkdir build cd build cmake .. make ``` Количество аргументов у функции изменяются в коде через изменение `ARGS_COUNT` в файле `main.cpp`. Поддерживаются значения от 2 до 5. Также может быть полезно отключить генерацию разбиения по классам эквивалентности, это параметр `ONLY_CREATE_CLASSES` в том же классе. Это может ускорить полную генерацию и значительно сократит потребление памяти. ## Запуск Для запуска достаточно собрать проект и вызвать ``` ./main ``` ## Сгенерированные результаты Сгенерированные результаты для числа аргументов от 2 до 5 можно скачать [тут](https://storage2.likemath.ru:9000/public/cmc/espp_maps.zip). ## Анализ результатов Результаты записываются в файлы вида `base_4_rank_3.txt` в рабочей директории. Первое число означает число аргументов у функции, а второе длину функций в классе ПСПФ. Сам файл представляет собой вектор битов, где бит N выставлен если функция принадлежит множеству функций с фиксированным числом аргументов и длиной в классе ПСПФ. Для анализа этих файлов удобно использовать `get_function_len.py` (требуется Python3). Для экономии места эти файлы можно предварительно сжать в XZ архивы. Есть несколько вариантов использования: 1. Получить длину некоторой функции. Пример `python3 get_function_len.py 10101010`, где `10101010` -- вектор значений функции. 2. Подсчёт количества функций по классам. Пример: `python3 get_function_len.py count_lens 3`, где 3 -- количество аргументов у функций.