Краткое описание семестрового проекта.
- Реализуется структура данных под названием система непересекающихся множеств (en. disjoint-set)
- Представляет из себя систему непересекающихся деревьев
- Приложения структуры данных:
- Поддержание компонент связности графа
- Построение остова минимального веса
- Сегментирование изображений
- Генерация лабиринтов
- Структура данных определяется множеством трёх операций: {Union, Find, MakeSet}
- Теоретическая сложность операций:
- Создание множества (MakeSet) за
O(1)
- Нахождение множества, которому принажлежит элемент (Find) за
O(α(n))
, где α(n) - функция, обратная функции Аккермана - Объединение двух множеств (Union) за
O(α(n))
- Создание множества (MakeSet) за
Группа: 11-104
Фамилия Имя | Вклад (%) | Прозвище |
---|---|---|
Зорин Виталий | 100 | главный суетолог |
Девиз команды
Мой девиз - всего три слова: питонистом быть прикольно!
Проект состоит из следующих частей:
src
- реализация структуры данных (исходный код);benchmark
- контрольные тесты производительности структуры данных (операции создания множества, поиска представителя множества и объединения множеств);dataset
- наборы данных для запуска контрольных тестов и их генерация;
Рекомендуемые требования:
- Интерпретатор Python (версия 3.7.x и выше).
- Рекомендуемый объем оперативной памяти - не менее 4 ГБ.
- Свободное дисковое пространство объемом ~ 1 ГБ (для входного набора данных).
Склонируйте проект к себе на устройство через Git for Windows (либо используйте возможности среды разработки):
git clone https://github.com/Addefan/semester-project-disjoint-set.git
Сборка и запуск проекта осуществляется через среду разработки.
Видео-инструкция по сборке проекта
Формат данных: comma-seperated values (CSV).
Инструкции по генерации:
# переход в папку генерации набора данных
cd dataset
# запуск Python-скрипта
python generate_csv_dataset.py <output> --samples 100
<output>
- выходной файл;--samples
- количество генерируемых элементов
Тестовые данные представлены в CSV формате (см.
dataset/data/make/01/100.csv
):
6700657
9436641
8555103
...
По названию директории /dataset/data/make
можно понять, что здесь хранятся наборы данных для контрольных тестов по
соданию одноэлементного множества в структуре данных. Названия файлов 100.csv
. 5000000.csv
и т.д. хранят информацию о
размере набора данных (т.е. количество элементов).
Генерация CSV-файла со ста элементами:
cd dataset
python generate_csv_dataset.py data/make/01/100.csv --samples 100
где <output> = data/make/01/100.csv
Видео-инструкция по генерации данных
Для запуска контрольных тестов необходимо предварительно сгенерировать или скачать готовый набор тестовых данных.
Примечание. Скачать готовый набор текстовых данных можно, пройдя по этой ссылке и
- нажав кнопку "СКАЧАТЬ ВСЕ" в правом верхнем углу, если вы не авторизованы в Google
- нажав ПКМ по папке data и далее нажав на кнопку "Скачать", если вы авторизованы в Google
Скачанный архив необходимо разархивировать в dataset
Название | Описание | Метрики |
---|---|---|
make_benchmark |
создание одноэлементного множества | время |
find_benchmark |
поиск "представителя" множества, которому принадледит элемент | время |
union_benchmark |
объединение двух множеств по двум элементам | время |
python benchmark/<control-test> <input> <output> --trials 50
<control-test>
- название контрольного теста (например, make_benchmark);<input>
- входной файл с набором данных в формате CSV;<output>
- выходной файл с результатами контрольного теста;--trials
- количество прогонов на наборе данных
Создание 100 одноэлементных множеств из случайных элементов (повторить операцию 10 раз и записать результаты в файл):
python benchmark/make_benchmark.py dataset/data/make/01/100.csv benchmark/metrics.txt --trials 10
где <input> = dataset/data/make/01/100.csv
и <output> = benchmark/metrics.txt
Видео-инструкция по запуску контрольных тестов
Список использованных при реализации структуры данных источников:
- Статья на Википедии (en)
- Статья на Википедии (ru)
- Статья на Хабре
- Серия видео на YouTube от канала "Контур Студент"
- Статья с сайта MAXimal
- Статья с сайта Techie Delight
Это не плагиат, это уважение чужого труда и помощь своим сокурсникам более подробно разобраться в теме.