Анализ эффективности алгоритмов

This commit is contained in:
tseremonnikovaaa 2026-05-24 20:20:06 +03:00
parent 7eb2e40099
commit 118945f625

View File

@ -476,3 +476,79 @@ def create_test_mazes():
if is_exit: if is_exit:
maze5.exit = cell maze5.exit = cell
save_maze_to_file(maze5, "mazes/no_exit.txt") save_maze_to_file(maze5, "mazes/no_exit.txt")
def print_analysis():
"""Вывод анализа эффективности алгоритмов"""
print(" АНАЛИЗ ЭФФЕКТИВНОСТИ АЛГОРИТМОВ ПОИСКА ПУТИ")
print("""
BFS (Поиск в ширину):
- Всегда находит КРАТЧАЙШИЙ путь
- Сложность O(V+E)
- Много памяти (очередь)
- Лучший выбор для поиска минимального пути
DFS (Поиск в глубину):
- НЕ гарантирует кратчайший путь
- Сложность O(V+E)
- Мало памяти
- Быстрый, но путь может быть очень длинным
- Хорош для проверки существования пути
A* (Алгоритм с эвристикой):
- Находит КРАТЧАЙШИЙ путь (при допустимой эвристике)
- Эвристика: манхэттенское расстояние |x1-x2| + |y1-y2|
- Быстрее BFS благодаря целенаправленному поиску
- Лучший выбор для больших запутанных лабиринтов
""")
print("""
ВЛИЯНИЕ ТИПА ЛАБИРИНТА:
Простой лабиринт (tiny.txt):
- Все алгоритмы работают быстро
- Разница в скорости незначительна
- BFS и A* находят оптимальный путь
- DFS может найти более длинный путь
Средний лабиринт (medium.txt):
- A* начинает показывать преимущество
- BFS исследует больше клеток
- DFS может заблудиться в тупиках
Большой лабиринт (large.txt):
- A* значительно быстрее BFS
- DFS сильно проигрывает на запутанных лабиринтах
Пустой лабиринт (empty.txt):
- A* значительно быстрее BFS
- DFS быстро уходит вглубь, но путь неоптимальный
Лабиринт без выхода (no_exit.txt):
- Все алгоритмы обходят все достижимые клетки
- Возвращают пустой путь
""")
print("""
ВЫВОДЫ ПО ПАТТЕРНАМ:
BUILDER:
- Скрывает сложность парсинга файлов
- Легко добавить новый формат
- Код загрузки не смешивается с логикой лабиринта
STRATEGY:
- Алгоритмы можно менять во время выполнения
- Легко добавить новый алгоритм
- Код не дублируется
OBSERVER:
- Отделяет визуализацию от логики
- Легко добавить GUI или логирование
- Наблюдателей можно добавлять динамически
COMMAND:
- Позволяет выполнять и отменять действия
- Удобно для пошагового управления
- История команд позволяет сохранять/загружать состояние
""")