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 можно скачать тут.
Анализ результатов
Результаты записываются в файлы вида base_4_rank_3.txt в рабочей директории.
Первое число означает число аргументов у функции, а второе длину функций в классе ПСПФ.
Сам файл представляет собой вектор битов,
где бит N выставлен если функция принадлежит множеству функций с фиксированным числом аргументов и длиной в классе ПСПФ.
Для анализа этих файлов удобно использовать get_function_len.py (требуется Python3). Для экономии места эти файлы можно предварительно сжать в XZ архивы. Есть несколько вариантов использования:
- Получить длину некоторой функции. Пример
python3 get_function_len.py 10101010, где10101010-- вектор значений функции. - Подсчёт количества функций по классам. Пример:
python3 get_function_len.py count_lens 3, где 3 -- количество аргументов у функций.