Цель: Реализовать, протестировать и провести сравнительный анализ классических алгоритмов сортировки, а также ключевых структур данных (Стек, Очередь)
Описание: Данный проект содержит реализацию, тестирование и сравнительный анализ (бенчмарк) алгоритмов сортировки, а также реализацию двух основных структур данных: Стека и Очереди
Реализованные бонусы: CLI (Интерактивный режим), отчёт с бенчмарками
Для начала работы необходимо клонировать репозиторий и установить зависимости в виртуальном окружении
git clone https://github.com/TheVailen/python-lab3-algopack
cd python-lab3-algopack
python -m venv .venv
source .venv/bin/activate
pip install -e .| Категория | Функции/Классы/Аргументы |
|---|---|
| Сортировки | bubble_sort |
quick_sort |
|
heap_sort |
|
counting_sort |
|
radix_sort |
|
bucket_sort |
|
| Структуры данных | Stack |
Queue |
|
| Математика | factorial |
fibo |
|
| Утилиты/Бонусы | benchmark |
--cli (Интерактивный режим) |
Программа поддерживает три режима запуска, используя аргументы командной строки (CLI)
Запуск по умолчанию, выполняет демонстрацию структур и запускает все бенчмарки:
python -m src.mainЗапуск консоли для ручного тестирования любой реализованной функции (сортировки, факториал, Фибоначчи):
python -m src.main --cli--- Интерактивный режим (CLI). Введите 'exit' для выхода. ---
Доступные команды: bubble_sort, quick_sort, heap_sort, counting_sort, radix_sort, bucket_sort, factorial, fibo
> factorial 7
5040
> fibo 10
55
> quick_sort 5 1 4 2
[1, 2, 4, 5]
> bucket_sort 0.5 0.1 0.9 0.2
[0.1, 0.2, 0.5, 0.9]
> exitpython -m src.main --demo # Только демонстрация структур данных и математики
python -m src.main --benchmarks # Только сравнительный анализ сортировок--- БЕНЧМАРК 1: Сортировки целых чисел (N=1000) ---
Результаты Integer Benchmark (время в секундах):
Bubble Sort:
Random Int: 0.016616
Reversed Int: 0.020807
Quick Sort:
Random Int: 0.000383
Reversed Int: 0.012023
Heap Sort:
Random Int: 0.000919
Reversed Int: 0.000792
Counting Sort:
Random Int: 0.000531
Reversed Int: 0.000102
Radix Sort:
Random Int: 0.000463
Reversed Int: 0.000442
--- БЕНЧМАРК 2: Сортировки чисел Float [0, 1) (N=1000) ---
Результаты Float Benchmark (время в секундах):
Bucket Sort:
Random Float [0, 1): 0.001535
Quick Sort (Float):
Random Float [0, 1): 0.000369 pytest -v-
Counting Sort и Radix Sort работают только с неотрицательными целыми числами.
-
Bucket Sort работает только с числами float в диапазоне [0,1).
-
Максимальный лимит рекурсии (для Quick Sort) увеличен с помощью sys.setrecursionlimit.
-
В бенчмарках для сравнения с Bucket Sort используется Quick Sort как наиболее быстрый универсальный алгоритм.
| Категория | Модуль | Назначение |
|---|---|---|
| Системные | sys |
Увеличение лимита рекурсии для предотвращения ошибок в Quick Sort и функциях Фибоначчи/Факториала |
| CLI | argparse |
Создание интерфейса командной строки с поддержкой флагов (--cli, --benchmarks, --demo) |
| Данные | typing |
Обеспечение строгой типизации (Dict, List, Callable) для улучшения читаемости и надежности кода |
| Бенчмарк | time |
Точное измерение времени выполнения алгоритмов в секундах |
| Генерация | random |
Генерация массивов случайных целых чисел и чисел с плавающей точкой для тестирования и бенчмаркинга |
-
Освоил реализацию и анализ сложности основных алгоритмов сортировки
-
Научился реализовывать структуры данных, такие как Стек и Очередь
-
Реализовал разработку тестового покрытия с использованием pytest и параметризации
-
Освоил технику бенчмаркинга для сравнения производительности алгоритмов на различных наборах входных данных
-
Реализовал интерфейс CLI с поддержкой интерактивного режима для тестирования