Skip to content

Algorithms-and-Data-Structures-2021/semester-work-merge-and-insertion-sort

Repository files navigation

Merge и Tim sort

CMake

Timsort - алгоритм основанный на Merge и Insertion sort, сложность по времени в стандартной реализации O(nlogn), в данной O(nlog^2n), сложность по памяти в стандартной реализации O(n), в данной O(1). Опубликован в 2002 году Тимом Петерсом. Является стандартным алгоритмом сортировки в некоторых популярных языках программирования (Python, Swift и т.д.)

Merge sort - сортировка слиянием. Упорядочивает списки, либо любые другие структуры данных, которые можно получать только последовательно, в нужном порядке. Основана на принципе "разделяй и властвуй". Есть несколько вариантов реализации: top-down и bottom-up. Первый вариант рекурсивно разделяет список на списки состоящие из половин исходного, сортирует их и потом объединяет. Второй вариант сначала разделяет исходный список на списки длины 1, а затем последовательно и упорядочено собирает их в списки с размером в два раза больше. Сложность по времени в стандартной реализации O(nlogn), в данной O(nlog^2n), сложность по памяти в стандартной реализации O(n), в данной O(1).

Команда "название команды"

Заполните таблицу с указанием вклада каждого из участников в проект.

Примечание. Преподаватель может определить вклад любого из участников команды по истории коммитов.

Фамилия Имя Вклад (%) Прозвище
Давлятов Эмиль 100 босс

Девиз команды

С самого начала у меня была какая-то тактика и я её придерживался.

Структура проекта

*Проект состоит из следующих частей:

  • src/include - реализация структуры данных (исходный код и заголовочные файлы);
  • benchmark - контрольные тесты производительности структуры данных (операции добавления, удаления, поиска и пр.);
  • dataset/data - наборы данных для запуска контрольных тестов и их генерация;
  • dataset/out - результаты бенчмарков

Требования (Prerequisites)

Рекомендуемые требования:

  1. С++ компилятор c поддержкой стандарта C++17 (например, GNU GCC 8.1.x и выше).
  2. Система автоматизации сборки CMake (версия 3.12.x и выше).
  3. Рекомендуемый объем оперативной памяти - не менее 6 ГБ.
  4. Свободное дисковое пространство объемом ~ 3 ГБ (набор данных для контрольных тестов).

Сборка и запуск

Пример (Windows)

Сборка проекта

Склонируйте проект к себе на устройство через Git for Windows (либо используйте возможности IDE):

git clone https://github.com/Algorithms-and-Data-Structures-2021/semester-work-merge-and-insertion-sort.git

Для ручной сборки проекта в терминале введите:

# переход в папку с проектом
cd C:\Users\username\asd-projects\semester-work-merge-and-insertion-sort

# создание папки для файлов сборки (чтобы не засорять папку с проектом) 
mkdir -p build && cd build 

# сборка проекта
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo && cmake --config RelWithDebInfo --build . 

Генерация тестовых данных

Тестовые данные хранятся в формате CSV, сгенерировать их вы можете при помощи приложенного в google drive .jar файла, либо же взять уже готовые.

Для генерации данных при помощи jar файла вы должны скачать файл из папки google drive изображение

После двойного клика по загруженному файлу, откроется следующее окно, куда вы должны будете ввести путь до папки, где собираетесь хранить тестовые данные^ изображение

После нажатия на кнопку Generate! и пятисекундного ожидания в указанной вами папки появятся сгенерированные случайно значения.

Генерация тестового набора данных в формате comma-seperated values (CSV):

Папка с тестовыми данными и файлом java

Контрольные тесты (benchmarks)

Для запуска контрольных тестов необходимо предварительно сгенерировать или скачать готовый набор тестовых данных.

Список контрольных тестов
Название Описание Метрики
merge_sort_benchmark тестирование временной сложности Merge sort время
timsort_benchmark тестирование временной сложности Timsort время
Примеры запуска

Генерируете набор тестовых данных, либо скачиваете с google drive. Процесс генерации описан выше.

Помещаете его по пути dataset\data изображение

Открываете .cpp файл нужного бенчмарка двойным нажатием на него изображение

Запускаете метод main
изображение

Результаты будут сохранены в отдельный csv файл по пути dataset\data для merge sort в файле merge\res.csv, для timsort - tim\res.csv

Источники

Список использованных при реализации алгоритма источников.
Merge sort on wiki
Merge sort on GFG
Timsort on GFG
Timsort on wiki
Timsort on habr

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published