Анализ эффективности алгоритмов
This commit is contained in:
parent
7eb2e40099
commit
118945f625
|
|
@ -475,4 +475,80 @@ def create_test_mazes():
|
||||||
maze5.start = cell
|
maze5.start = cell
|
||||||
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:
|
||||||
|
- Позволяет выполнять и отменять действия
|
||||||
|
- Удобно для пошагового управления
|
||||||
|
- История команд позволяет сохранять/загружать состояние
|
||||||
|
""")
|
||||||
Loading…
Reference in New Issue
Block a user