Анализ эффективности алгоритмов
This commit is contained in:
parent
7eb2e40099
commit
118945f625
|
|
@ -475,4 +475,80 @@ def create_test_mazes():
|
|||
maze5.start = cell
|
||||
if is_exit:
|
||||
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