From e611cfe31bdffa8fe9835f47324ccf50f3ac7122 Mon Sep 17 00:00:00 2001 From: konnovaea Date: Fri, 22 May 2026 17:50:56 +0300 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=BE?= =?UTF-8?q?=D1=82=D1=87=D0=B5=D1=82=D0=B0=20=D1=81=20=D0=B3=D1=80=D0=B0?= =?UTF-8?q?=D1=84=D0=B8=D0=BA=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- konnovaea/lab2/docs/lab2_report.ipynb | 122 ++++++++++++++++++-------- 1 file changed, 86 insertions(+), 36 deletions(-) diff --git a/konnovaea/lab2/docs/lab2_report.ipynb b/konnovaea/lab2/docs/lab2_report.ipynb index 9154f71..4971aa4 100644 --- a/konnovaea/lab2/docs/lab2_report.ipynb +++ b/konnovaea/lab2/docs/lab2_report.ipynb @@ -10,7 +10,7 @@ "\n", "**Студент:** Коннова Е.А.\n", "**Группа:** 429\n", - "**Дата:** 21.05.2026" + "**Дата:** 22.05.2026" ] }, { @@ -116,65 +116,115 @@ "| Алгоритмы | BFS, DFS, A* |\n", "| Лабиринты | Простой (10x10), С тупиками (50x50), Пустой (100x100), Без выхода |\n", "\n", - "### 3.2 Результаты\n", + "### 3.2 Тестовые лабиринты\n", "\n", - "| Лабиринт | Стратегия | Время (мс) | Посещено | Длина пути |\n", - "|----------|-----------|------------|----------|------------|\n", - "| Простой | BFS | 0.037 | 11 | 6 |\n", - "| Простой | DFS | 0.016 | 9 | 8 |\n", - "| Простой | A* | 0.027 | 9 | 6 |\n", + "| Лабиринт | Размер | Характеристика |\n", + "|----------|--------|----------------|\n", + "| Простой | 10x10 | Прямой путь от старта к выходу |\n", + "| С тупиками | 20x20 | Много тупиков, запутанный |\n", + "| Пустой | 50x50 | Без стен (максимальная производительность) |\n", + "| Без выхода | 10x10 | Выход отгорожен стенами |\n", "\n", - "### 3.3 Графики\n", + "### 3.3 Результаты экспериментов\n", "\n", - "![Время](data/maze_time_graph.png)\n", - "![Посещения](data/maze_visited_graph.png)\n", - "![Длина пути](data/maze_path_graph.png)\n", + "| Лабиринт | Стратегия | Время (мс) | Посещено клеток | Длина пути |\n", + "|----------|-----------|------------|-----------------|------------|\n", + "| Простой (10x10) | BFS | 0.020 | 11 | 6 |\n", + "| Простой (10x10) | DFS | 0.012 | 9 | 8 |\n", + "| Простой (10x10) | A* | 0.020 | 9 | 6 |\n", + "| С тупиками (20x20) | BFS | 0.492 | 306 | 35 |\n", + "| С тупиками (20x20) | DFS | 0.234 | 198 | 81 |\n", + "| С тупиками (20x20) | A* | 0.456 | 225 | 35 |\n", + "| Пустой (50x50) | BFS | 3.486 | 2304 | 95 |\n", + "| Пустой (50x50) | DFS | 10.452 | 2304 | 1129 |\n", + "| Пустой (50x50) | A* | 5.743 | 2304 | 95 |\n", + "| Без выхода | BFS | 0.010 | 1 | нет пути |\n", + "| Без выхода | DFS | 0.003 | 1 | нет пути |\n", + "| Без выхода | A* | 0.004 | 1 | нет пути |\n", "\n", - "### 3.4 Анализ\n", + "### 3.4 Графики\n", "\n", - "| Алгоритм | Кратчайший путь | Скорость | Память |\n", - "|----------|-----------------|----------|--------|\n", - "| BFS | Да | Средняя | Много |\n", - "| DFS | Нет | Быстрая | Мало |\n", - "| A* | Да | Быстрая | Средне |\n", + "#### Простой лабиринт (10x10)\n", "\n", - "**Выводы:**\n", + "![Время](data/simple_time_graph.png)\n", + "![Посещено](data/simple_visited_graph.png)\n", + "![Длина пути](data/simple_path_graph.png)\n", + "\n", + "#### Лабиринт с тупиками (20x20)\n", + "\n", + "![Время](data/dead_time_graph.png)\n", + "![Посещено](data/dead_visited_graph.png)\n", + "![Длина пути](data/dead_path_graph.png)\n", + "\n", + "#### Пустой лабиринт (50x50)\n", + "\n", + "![Время](data/empty_time_graph.png)\n", + "![Посещено](data/empty_visited_graph.png)\n", + "![Длина пути](data/empty_path_graph.png)\n", + "\n", + "#### Лабиринт без выхода\n", + "\n", + "![Время](data/noexit_time_graph.png)\n", + "![Посещено](data/noexit_visited_graph.png)\n", + "\n", + "### 3.5 Общая таблица результатов\n", + "\n", + "![Таблица](data/maze_table_results.png)\n", + "\n", + "### 3.6 Анализ результатов\n", + "\n", + "**Простой лабиринт (10x10):**\n", "- BFS и A* нашли кратчайший путь (6 шагов)\n", - "- DFS нашёл более длинный путь (8 шагов), но быстрее всех\n", - "- A* - лучший компромисс между скоростью и оптимальностью\n" + "- DFS нашёл более длинный путь (8 шагов), но был быстрее всех\n", + "\n", + "**Лабиринт с тупиками (20x20):**\n", + "- BFS и A* нашли кратчайший путь (35 шагов)\n", + "- DFS нашёл очень длинный путь (81 шаг), так как ушёл в глубину по тупикам\n", + "\n", + "**Пустой лабиринт (50x50):**\n", + "- BFS и A* нашли кратчайший путь (95 шагов)\n", + "- DFS нашёл очень длинный путь (1129 шагов)\n", + "\n", + "**Лабиринт без выхода:**\n", + "- Все алгоритмы посетили только стартовую клетку (1) и вернули \"нет пути\"\n", + "\n", + "### 3.7 Сравнение алгоритмов\n", + "\n", + "| Алгоритм | Кратчайший путь | Скорость | Память | Когда использовать |\n", + "|----------|-----------------|----------|--------|-------------------|\n", + "| BFS | Да | Средняя | Много | Нужен гарантированно кратчайший путь |\n", + "| DFS | Нет | Быстрая | Мало | Важна скорость, не важна длина пути |\n", + "| A* | Да | Быстрая | Средне | Большие лабиринты, есть эвристика |\n", + "\n", + "\n" ] }, { "cell_type": "markdown", - "id": "1036c160", + "id": "e687a8ee", "metadata": {}, "source": [ "## Заключение\n", "\n", - "### Рекомендации по выбору алгоритма\n", + "### Выводы\n", "\n", - "| Сценарий | Алгоритм | Причина |\n", - "|----------|----------|---------|\n", - "| Нужен кратчайший путь | BFS | Гарантирует оптимальность |\n", - "| Важна скорость | DFS | Самый быстрый |\n", - "| Большой лабиринт | A* | Эвристика ускоряет поиск |\n", + "1. **BFS** гарантирует кратчайший путь, но медленнее на больших лабиринтах\n", + "2. **DFS** самый быстрый, но путь может быть очень длинным\n", + "3. **A*** - лучший компромисс: находит кратчайший путь и работает быстро\n", + "\n", + "### Рекомендация\n", + "\n", + "Для поиска выхода из лабиринта рекомендуется использовать **A*** - он сочетает скорость и оптимальность.\n", "\n", "### Как паттерны помогли\n", "\n", "| Изменение | Без паттернов | С паттернами |\n", "|-----------|---------------|--------------|\n", - "| Добавить JSON лабиринт | Изменить весь код | Создать JSONBuilder |\n", - "| Добавить алгоритм | Изменить MazeSolver | Создать новую стратегию |\n", + "| Добавить новый алгоритм | Изменить MazeSolver | Создать новую стратегию |\n", "| Сменить визуализацию | Переписать MazeSolver | Добавить новый Observer |\n", "\n", - "**Итог:** Паттерны сделали код гибким, расширяемым и тестируемым." + "**Итог:** Паттерны сделали код гибким и расширяемым." ] - }, - { - "cell_type": "markdown", - "id": "cb24b904", - "metadata": {}, - "source": [] } ], "metadata": {