Файл README.md этого проекта описывает задачу, которая на первый взгляд кажется простой:
нужно подобрать комбинации элементов, чтобы они покрыли всё множество без пересечений.
Однако на деле — это вариация NP-полной задачи покрытия множества (Set Cover Problem),
где нужно найти минимальный или полный набор подмножеств, объединение которых даёт весь исходный набор элементов.
Подобные задачи растут экспоненциально по числу возможных решений.
Алгоритм полного перебора здесь фактически реализует разворачивание многомерного пространства решений —
в терминах этого проекта, разворачивание политопа.
Каждая комбинация — это грань или вершина гиперфигуры,
а поиск всех комбинаций, покрывающих всё множество, — это попытка найти
все "замкнутые поверхности" внутри этого гиперпространства.
📌 Таким образом, Polytope можно рассматривать как исследование границ между теорией множеств, комбинаторикой и геометрией данных.
Он показывает, что даже простые CSV-файлы могут представлять собой многомерную фигуру,
внутри которой скрыта структура порядка, и алгоритм пытается «развернуть» её, чтобы обнаружить гармонию.
-
Исходные файлы:
comb.csv— содержит уникальные билеты (126 строк).comb0.csv— содержит комбинации билетов, заданные как номера строк изcomb.csv.
-
Цель:
Найти все возможные выборки комбинаций изcomb0.csv, которые:- не содержат повторяющихся билетов,
- в совокупности включают все 126 билетов.
-
Пример результата:
Один из файлов результата —test/example/out/tc1.csv. -
Структура проекта:
- Входные данные находятся в
soch/. - Результаты поиска сохраняются в
soch/out/. - Тестовые данные и скрипты для проверки — в
test/. (Для Bash необходимо запустить3_cutpaste_soch_ITR.sh)
- Входные данные находятся в
-
Производительность:
- На тестовых данных:
- JavaScript:
0.412 s - Bash:
3.665 s
- JavaScript:
- На реальных данных (126 билетов) — перебор астрономической сложности, на CPU Penryn (Core 2 Duo, 2.5GHz) «не закончится никогда 🙂».
- На тестовых данных:
Запуск выполняется командой:
polytope.sh PAR1 PAR2 PAR3
Без параметров — включается автоматический режим.
- PAR3 — имя каталога политопа, параметры разворота которого закодированы в его названии;
- PAR1 — режим создания векторов политопа;
- PAR2 — режим создания вершин политопа.
Значения параметров:
| Параметр | Значение | Описание |
|---|---|---|
0 |
Новые | Удаление старых данных и создание новых |
1 |
Старые и остановка | Загрузка существующих данных (или создание, если их нет) и остановка для текущего режима |
2 |
Старые и продолжение | Продолжение вычислений с ранее созданными данными |
Polytope — это программный комплекс для разворота многомерной структуры данных,
в которой каждая комбинация — это грань или вектор политопа.
Скрипт "разворачивает" фигуру, постепенно исследуя все возможные состояния,
пока не найдёт комбинации, полностью покрывающие множество уникальных элементов без пересечений.
Фактически, проект реализует итеративное развертывание политопа — многомерного объекта,
где каждая координата соответствует одной из возможных комбинаций.
Этот процесс можно рассматривать как алгоритм поиска и сортировки внутри огромного комбинаторного пространства (Set Cover / Exact Cover Problem).
Тот, кто правильно развернёт политоп,
получит комбинацию с первого прохода программы —
ну или со второго 😄
За этой фразой скрыта метафора:
это не просто поиск решения, а способ упорядочить хаос комбинаций,
найти структуру внутри бесконечного перебора.
"Разворачивание политопа" — это попытка геометризировать сам процесс вычисления:
- превратить дискретные данные в многомерные вектора,
- исследовать взаимосвязи между ними,
- и обнаружить скрытую гармонию между числовыми структурами.
- Использует Bash и JavaScript для реализации логики разворота;
- Работает с большими комбинаторными таблицами;
- Применяет поэтапное развертывание, напоминающее backtracking с проверкой уникальности и полноты покрытия;
- Каждая успешная комбинация — "грань" многомерного политопа.
Polytope/
├── Bash/
│ └── Polytope/
│ ├── polytope.sh
│ └── README.md
├── soch/
│ ├── comb.csv
│ ├── comb0.csv
│ └── out/
├── test/
│ ├── example/
│ │ └── out/tc1.csv
│ └── 3_cutpaste_soch_ITR.sh
└── README.md
Polytope — это не просто перебор комбинаций.
Это исследование многомерных закономерностей, где каждая строка таблицы — часть абстрактной фигуры.
Разворачивая политоп, ты разворачиваешь структуру самого пространства данных —
и, возможно, находишь единственное решение, скрытое в бесконечности вариантов.
🧩 Порядок рождается из хаоса, если знать, как развернуть политоп.
© ekwator — Polytope Project