43 lines
2.7 KiB
Markdown
43 lines
2.7 KiB
Markdown
# 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 -- количество аргументов у функций.
|
||
|
||
|