Интерактивный разбор: https://grundyjs.ru/r/falling-sand-short
Откуда берётся горка песка, если каждая песчинка знает только соседние клетки? Открываем затвор и разбираем три правила: падение, скатывание и покой.
Останавливаем одну песчинку и смотрим на три клетки под ней. Затем разбираем конфликт: две песчинки выбирают одну цель, но переместиться может только одна. Все решения принимаются по старому полю, а перемещения выполняются после разрешения конфликтов.
В интерактивном примере можно насыпать песок, рисовать и стирать препятствия, открывать затвор, выбирать полки или два прохода, разбирать одну песчинку и проходить симуляцию по шагам. Это учебная клеточная модель, а не точная физика сыпучих материалов.
Визуализация — AlgiViz, запись — CanvasTake. Авторская озвучка, без музыки. Русские субтитры подготовлены отдельно.
#песок #симуляция #алгоритмы #визуализация #программирование
Интерактивный разбор: https://grundyjs.ru/algorithms/boids/?utm_source=rutube&utm_medium=social&utm_campaign=boids&utm_content=vertical
Как десятки птиц поворачивают вместе? В модели Boids движение стаи возникает из трёх локальных правил: разделения, выравнивания и сближения.
Останавливаем одну птицу и разбираем её соседей. Жёлтая стрелка показывает разделение, синяя — выравнивание, фиолетовая — сближение. Зелёная — сумма поправок скорости, а белый пунктир — курс на следующий шаг.
Добавляем островки, стенку и узкий проход. Розовая стрелка отвечает за обход препятствий и входит в общую поправку скорости. Это учебная модель локального поведения; она не строит маршрут всей стаи к цели.
В интерактивном примере на сайте можно менять число птиц и seed, отключать правила, выбирать препятствия, разбирать одну птицу, проходить шаги, делиться ссылкой на состояние и сохранять анимацию.
Визуализация — AlgiViz, запись — CanvasTake. Авторская озвучка, без музыки. Русские субтитры подготовлены отдельно.
#Boids #стая #алгоритмы #визуализация #программирование
Интерактивный разбор: https://grundyjs.ru/algorithms/strongly-connected-components/?utm_source=rutube&utm_medium=social&utm_campaign=strongly_connected_components&utm_content=vertical
Компоненты сильной связности — группы вершин ориентированного графа, внутри которых из каждой вершины можно добраться до любой другой. Сравниваем алгоритмы Косарайю и Тарьяна на одном графе.
Косарайю делает два обхода: сначала записывает порядок выхода в исходном графе, затем разворачивает все стрелки и обходит граф в обратном порядке выхода. Тарьян использует один DFS, номера посещения, метки low и отдельный стек ещё не выделенных вершин. Этот стек отличается от текущего пути DFS.
По ребру в вершину из стека Тарьяна учитываем её номер посещения, а при возврате из дочерней ветки — её low. Когда после проверки исходящих рёбер low равна номеру вершины, снимаем вершины со стека до неё включительно: это одна готовая компонента.
В примере получаются {A, B, C}, {D, E} и {F, G}. Порядок выдачи у алгоритмов различается, состав групп совпадает. Добавьте ребро F → B в интерактивном примере и проверьте, сколько компонент останется.
На сайте можно выбирать готовые графы, менять вершины и рёбра, проходить шаги, делиться ссылкой и сохранять анимацию. Такты анимации и счётчики не сравнивают время работы алгоритмов.
Авторская озвучка, без музыки. Русские субтитры подготовлены отдельно.
#алгоритмы #Косарайю #Тарьян #графы #программирование
Интерактивный разбор: https://grundyjs.ru/algorithms/topological-sort/?utm_source=rutube&utm_medium=social&utm_campaign=topological_sort&utm_content=vertical
В каком порядке выполнять задачи с зависимостями? Топологическая сортировка располагает все вершины так, чтобы для каждого направленного ребра его начало стояло раньше конца. Сравниваем алгоритм Кана и поиск в глубину (DFS) на одном графе.
Кан считает входящие рёбра и хранит готовые вершины в FIFO-очереди. После A вершина C ещё ждёт B; когда степень становится нулевой, добавляем вершину в конец очереди. DFS хранит текущий путь в стеке, записывает вершины после проверки исходящих рёбер и разворачивает полный порядок выхода.
В примере без цикла Кан получает A, B, C, D, E, F, а DFS — B, D, A, C, E, F. Оба ответа соблюдают все зависимости. В другом примере Кан выдаёт только A, затем очередь пустеет. DFS находит конкретный цикл B → C → D → B. Вершины E и F тоже заблокированы, но в этот цикл не входят. При цикле полного топологического порядка нет.
В интерактивном разборе можно выбирать готовые графы или менять зависимости, проходить шаги, сравнивать состояния, делиться ссылкой и сохранять анимацию. Такты анимации и счётчики рёбер не являются сравнением времени работы алгоритмов.
Авторская озвучка, без музыки. Русские субтитры подготовлены отдельно.
#алгоритмы #топологическаясортировка #DFS #графы #программирование
Интерактивный разбор: https://grundyjs.ru/algorithms/dsu/?utm_source=rutube&utm_medium=social&utm_campaign=dsu&utm_content=vertical
Как быстро узнать, входят ли два элемента в одно множество? Система непересекающихся множеств (DSU, Union-Find) хранит группы как лес родительских ссылок. У каждой группы есть корень — представитель множества. find находит этот корень, union объединяет две группы, same сравнивает их представителей.
На четырёх элементах A, B, C, D создаём две группы, затем объединяем их по размеру. При равных размерах сохраняем корень A. Первый поиск из D проходит D → C → A; сжатие пути заменяет ссылку D → C на D → A. Повторный поиск делает один переход. Состав множества и размер корня не меняются.
B и D уже в одной группе: повторное объединение не увеличивает размер и не уменьшает число множеств. Так Краскал проверяет, не создаёт ли очередное ребро цикл. Обычная DSU умеет объединять множества, но не разделять их. Стрелки parent — внутренние ссылки DSU, а не рёбра исходного графа.
В интерактивном примере можно менять число элементов и команды find, union, same, проходить шаги, делиться ссылкой и сохранять анимацию. Сравнение двух и одного перехода относится к показанному пути; это не замер времени и не гарантия одного перехода для любой операции.
Авторская озвучка, без музыки.
#алгоритмы #DSU #UnionFind #структурыданных #программирование
Интерактивное сравнение: https://grundyjs.ru/algorithms/maze-generation-comparison/?utm_source=rutube&utm_medium=social&utm_campaign=maze_generation_comparison&utm_content=vertical
На одинаковой сетке 9×7 с seed 34 сравниваем три рандомизированных генератора лабиринтов.
Синий DFS продолжает текущую ветку, выбирая непосещённого соседа. Когда вариантов нет, возвращается по стеку. Жёлтый Прим расширяет одну связанную область: случайно выбирает стену из кандидатов и присоединяет новую клетку; устаревшие кандидаты отбрасывает. Зелёный Краскал заранее перемешивает внутренние стены и соединяет разные компоненты, пропуская стены, удаление которых создало бы цикл.
У каждого результата 63 клетки и 62 прохода, без циклов: между любыми двумя клетками есть единственный путь. В этом примере тупиков у DFS — 8, у Прима — 23, у Краскала — 20. Это свойства конкретного seed, а не универсальный рейтинг алгоритмов или сложности прохождения. Равномерная выборка всех возможных лабиринтов не обещается.
Одновременные фазы анимации сравнивают решения, а не скорость вычислений. В интерактивном примере можно менять размер и seed, проходить шаги, включать полный экран, делиться ссылкой на свой запуск и сохранять видео.
Авторская озвучка, без музыки.
#алгоритмы #лабиринт #DFS #Прим #Краскал #программирование
Интерактивное сравнение: https://grundyjs.ru/algorithms/mst-comparison/?utm_source=rutube&utm_medium=social&utm_campaign=mst_comparison&utm_content=vertical
Сравниваем два алгоритма на одном неориентированном взвешенном графе. Прим растит одно дерево: каждый раз выбирает самое дешёвое ребро между уже присоединёнными вершинами и остальным графом. Краскал рассматривает рёбра всего графа по возрастанию веса и соединяет разные компоненты, пропуская циклы.
Прим от A выбирает A—C = 2, C—B = 1, C—E = 5 и E—D = 2. Краскал выбирает B—C = 1, A—C = 2, D—E = 2 и C—E = 5; A—B = 4 пропускает, поскольку его концы уже соединены через C. После третьего принятого ребра у Прима сумма 8, у Краскала — 5. Это промежуточные состояния: в конце оба получают четыре ребра и общую стоимость 10.
Синий — Прим, зелёный — Краскал. Общие рёбра показаны параллельными цветными линиями. Краскал временно строит несколько отдельных деревьев. Это сравнение порядка выбора, а не замер скорости: синхронные фазы анимации не равны времени работы алгоритмов. Минимальный остов всей сети и кратчайшие пути от старта — разные задачи.
В интерактивном примере можно менять граф, веса и старт Прима, проходить сравнение по шагам, поделиться ссылкой на свой граф и сохранить анимацию. Нулевые и отрицательные веса допустимы; в несвязном графе оба алгоритма строят минимальный остовный лес.
Авторская озвучка, без музыки.
#алгоритмы #Прим #Краскал #графы #программирование
Интерактивный разбор: https://grundyjs.ru/algorithms/kruskal/?utm_source=rutube&utm_medium=social&utm_campaign=kruskal&utm_content=vertical
Алгоритм Краскала строит минимальное остовное дерево неориентированного взвешенного графа: соединяет все вершины без циклов с минимальной суммой весов рёбер. Сортируем рёбра всего графа по весу. Если концы ребра находятся в разных компонентах — берём ребро и объединяем их. Если вершины уже связаны — пропускаем ребро, чтобы не создать цикл.
На этом графе выбираются B—C = 1, A—C = 2, D—E = 2 и C—E = 5. Ребро A—B = 4 пропускаем: его концы уже связаны через C. Получается четыре ребра с общей стоимостью 10. Как только все вершины соединены, остальные рёбра проверять не нужно. У Прима на том же графе та же сумма, но другой порядок выбора. Минимальная стоимость всей сети и кратчайшие пути от старта — разные задачи.
Нулевые и отрицательные веса допустимы. При B—C = −3 и D—E = 0 сумма становится 4. В несвязном графе получаем минимальный остовный лес: в примере два дерева, три ребра и общая сумма 5.
В интерактивном примере можно менять веса, проходить алгоритм по шагам, поделиться своим графом и сохранить анимацию. Зелёный — выбранный остов, жёлтый — текущее ребро, пунктир — пропущенное ребро цикла. Группы под графом показывают компоненты, список справа — порядок рёбер.
Авторская озвучка, без музыки.
#алгоритмы #Краскал #графы #деревья #программирование
Интерактивный разбор: https://grundyjs.ru/algorithms/prim/?utm_source=rutube&utm_medium=social&utm_campaign=prim&utm_content=vertical
Алгоритм Прима строит минимальное остовное дерево неориентированного взвешенного графа: соединяет все вершины без циклов с минимальной суммой весов рёбер. На каждом шаге выбираем самое лёгкое ребро на всей границе уже построенного дерева — из включённой вершины в ещё не включённую.
На этом графе выбираются A—C = 2, C—B = 1, C—E = 5 и E—D = 2. Получается четыре ребра с общей стоимостью 10. После добавления B следующее ребро выходит из более ранней C: сравниваем всю границу, а не только последнюю вершину. Это минимум стоимости всей сети; кратчайшие пути от старта — другая задача.
Нулевые и отрицательные веса допустимы. При B—C = −3 и D—E = 0 сумма становится 4. Если убрать связи между группами A,B,C и D,E, Прим построит минимальный остовный лес: два дерева, три ребра и общая сумма 5.
В интерактивном примере можно менять веса и старт, проходить алгоритм по шагам, поделиться своим графом и сохранить анимацию. Синий пунктир показывает все рёбра границы одновременно, жёлтый — выбранный минимум, зелёный — остов.
Авторская озвучка, без музыки.
#алгоритмы #Прим #графы #деревья #программирование
Интерактивное сравнение: https://grundyjs.ru/algorithms/shortest-path-comparison/?utm_source=rutube&utm_medium=social&utm_campaign=shortest_path_comparison&utm_content=vertical
На одном ориентированном графе сравниваем три алгоритма. Дейкстра закрепляет вершину с наименьшей известной стоимостью от старта и требует неотрицательных весов. Беллман — Форд повторяет полные проходы по рёбрам; он допускает отрицательные веса. Оба вычисляют расстояния от одного источника. Флойд — Уоршелл разрешает промежуточные вершины по очереди и вычисляет матрицу расстояний между всеми парами. Для сравнения берём её строку A.
На исходных весах все три находят путь A → B → C → D: 3 + 2 + 2 = 7. После изменения B → C на −2 стоимость становится 3. Дейкстру в этом режиме не запускаем; Беллман — Форд и Флойд — Уоршелл продолжают работать.
Добавляем C → B веса 1: цикл B → C → B стоит −1. Повторяя его, можно удешевлять путь из A в D сколько угодно — конечного минимума нет (−∞). Но D → D остаётся 0: от D этот цикл недостижим. Обратного пути D → A нет (∞).
При единичных весах минимальная стоимость совпадает с минимальным числом рёбер: прямое ребро A → D даёт стоимость 1. Такты анимации показывают этапы алгоритмов, а не замер быстродействия.
В интерактивном примере можно менять веса, источник и цель, сравнивать этапы и поделиться ссылкой на свой граф.
Авторская озвучка, без музыки. Русские субтитры подготовлены отдельной дорожкой.
#алгоритмы #Дейкстра #БеллманФорд #ФлойдУоршелл #графы #программирование
Интерактивный разбор Флойда — Уоршелла: https://grundyjs.ru/algorithms/floyd-warshall/?utm_source=rutube&utm_medium=social&utm_campaign=floyd_warshall&utm_content=vertical
Флойд — Уоршелл находит минимальную стоимость путей сразу между всеми парами вершин. В матрице строка задаёт начало, столбец — конец. На каждом этапе разрешаем ещё одну промежуточную вершину k и проверяем d(i,j) = min(d(i,j), d(i,k) + d(k,j)).
В примере прямой путь A → D стоит 10. Через B получается 3 + 6 = 9. Через C — маршрут A → B → C → D стоимостью 3 + (−2) + 2 = 3. Ячейки одного этапа обновляются вместе из предыдущего слоя матрицы. Обратного пути D → A здесь нет: ∞ означает недостижимость.
Если все веса равны единице, минимальная стоимость совпадает с минимальным числом рёбер. В этом примере прямое ребро A → D тогда даёт стоимость 1.
Отрицательные рёбра допустимы. Отрицательное число на диагонали после основных этапов указывает на отрицательный цикл. Цикл B → C → B стоит −2 + 1 = −1. Для пар, чей маршрут может пройти через такой цикл, конечного минимума нет: −∞. Остальные ответы сохраняются.
Время O(V³), матрицы расстояний и восстановления маршрутов занимают O(V²). В интерактивном примере можно менять веса, выбирать пару вершин и смотреть этапы алгоритма, а также поделиться ссылкой на свой граф.
Авторская озвучка, без музыки. Русские субтитры подготовлены отдельной дорожкой.
#алгоритмы #ФлойдУоршелл #графы #программирование
Интерактивный разбор Беллмана — Форда: https://grundyjs.ru/algorithms/bellman-ford/?utm_source=rutube&utm_medium=social&utm_campaign=bellman_ford&utm_content=vertical
Беллман — Форд ищет минимальную стоимость пути в ориентированном графе, в том числе с отрицательными весами. На каждом проходе проверяет все рёбра: если d(u) + вес меньше d(v), обновляет расстояние и предка.
В исходном примере четыре вершины и три основных прохода. После первого прохода d(A) = 2, d(B) = 5. Во втором цель сначала получает оценку 4, а отрицательное ребро B → A улучшает A до 1. На третьем проходе стоимость до цели уменьшается до 3. Итоговый путь S → B → A → G: 5 − 4 + 2 = 3.
После основных проходов выполняется отдельная контрольная проверка. Если достижимую оценку всё ещё можно улучшить, есть отрицательный цикл, достижимый от старта.
Добавим A → B с весом 3: цикл A → B → A стоит 3 − 4 = −1. Каждый круг уменьшает стоимость. Из цикла можно попасть в G, поэтому для цели нет конечного минимума: d(G) = −∞. Недостижимый от старта цикл X ↔ Y на ответ не влияет: путь к G по-прежнему стоит 3.
Отрицательное ребро само по себе не означает отрицательного цикла. Если достижимый цикл не ведёт к выбранной цели, стоимость до этой цели может оставаться конечной. На первой найденной оценке цели останавливать алгоритм нельзя.
В интерактивном разборе можно пройти алгоритм по шагам, изменить вес ребра, выбрать старт и цель, сравнить пять примеров и поделиться своим графом.
Авторская озвучка, без музыки. Русские субтитры подготовлены отдельной дорожкой.
#алгоритмы #БеллманФорд #графы #программирование
Интерактивное сравнение BFS, Дейкстры и A*: https://grundyjs.ru/algorithms/weighted-maze-search/?utm_source=rutube&utm_medium=social&utm_campaign=weighted_maze_search&utm_content=vertical
Один взвешенный лабиринт, одинаковые старт и выход — три правила выбора следующей клетки.
Синий BFS ищет минимум по числу переходов и не учитывает цену клеток. Жёлтый алгоритм Дейкстры выбирает минимальную известную стоимость от старта. Фиолетовый A* добавляет к ней оценку оставшегося пути: расстояние по горизонтали и вертикали без учёта стен, умноженное на минимальную цену шага.
Результаты исходной карты:
• BFS: 16 переходов, стоимость 22, обработано 76 клеток.
• Дейкстра: 18 переходов, стоимость 18, обработано 62 клетки.
• A*: 18 переходов, стоимость 18, обработана 31 клетка.
Больше переходов, зато дешевле. При единичных весах стоимость равна числу переходов: все три поиска находят путь из 16 переходов стоимостью 16.
Ветви одной волны показаны одновременно, исчерпанные тупики сереют. У алгоритмов разные приоритеты; длительность анимации не измеряет быстродействие программы. На другой карте преимущество A* по числу обработанных клеток может измениться.
В интерактивном разборе меняйте цену клетки, проходите поиск по шагам и сравнивайте результаты.
Авторская озвучка. Музыки нет.
#алгоритмы #BFS #Дейкстра #AStar #программирование
Интерактивный разбор алгоритма Дейкстры: https://grundyjs.ru/algorithms/dijkstra/?utm_source=rutube&utm_medium=social&utm_campaign=dijkstra&utm_content=vertical
Дейкстра выбирает вершину с минимальной известной стоимостью пути от старта. При проверке соседей складывает текущую стоимость с весом ребра и, если путь дешевле, обновляет расстояние и предка.
На этом графе BFS нашёл бы S → A → G: два перехода, но цена 8 + 1 = 9. Дейкстра находит S → B → C → G: три перехода с ценой 1 + 1 + 2 = 4. По ходу поиска стоимость до A уменьшается с 8 до 4 через B.
Если все веса равны единице, стоимость пути равна числу рёбер: минимальная стоимость и минимальное число переходов совпадают. Дейкстра гарантирует минимальную стоимость при неотрицательных весах. Останавливаем поиск при извлечении цели из границы, а не при её первом обнаружении.
В интерактивном разборе можно пройти поиск по шагам, переключить веса на единицу, изолировать цель или совместить её со стартом.
Авторская озвучка, без музыки. Русские субтитры подготовлены отдельной дорожкой.
#алгоритмы #Дейкстра #графы #программирование
Посмотрите A* по шагам на сайте: https://grundyjs.ru/algorithms/a-star-search/?utm_source=rutube&utm_medium=social&utm_campaign=a_star_search&utm_content=vertical
A* выбирает клетку с минимальным f = g + h. g — длина лучшего пока найденного пути от старта, h — манхэттенская оценка до цели без учёта стен.
На том же лабиринте 7 × 4 жадный поиск находит маршрут из 10 переходов, а A* — из 8. В ролике разбираем выбор из всей границы поиска, тупик рядом с выходом и восстановление пути по предкам.
В этой сетке движения разрешены по четырём направлениям и каждый проход стоит единицу. Манхэттенская эвристика согласованна, поэтому A* гарантирует кратчайший путь.
На сайте можно пройти алгоритм по шагам, менять скорость и проверить случай, когда старт совпадает с целью.
Авторская озвучка, без музыки. Русские субтитры подготовлены отдельной дорожкой.
#алгоритмы #лабиринт #AStar #программирование
Посмотрите жадный поиск по шагам на сайте: https://grundyjs.ru/algorithms/greedy-best-first-search/?utm_source=rutube&utm_medium=social&utm_campaign=greedy_best_first_search&utm_content=vertical
Жадный поиск (Greedy Best-First Search) выбирает среди обнаруженных клеток ту, у которой наименьшая оценка расстояния до выхода. В примере используется манхэттенское расстояние: сколько переходов понадобилось бы без стен.
На сетке 7 × 4 сначала попадаем в тупик рядом с выходом, затем находим верхний обход. Путь по сохранённым предкам содержит 10 переходов, хотя снизу можно пройти за 8. Жадный поиск не учитывает уже пройденное расстояние и не гарантирует кратчайший путь.
На сайте можно пройти алгоритм по шагам, менять скорость и сравнить обычный пример со случаем, когда старт совпадает с целью.
Авторская озвучка, без музыки. Русские субтитры подготовлены отдельной дорожкой.
#алгоритмы #лабиринт #GreedyBestFirst #программирование
Перенесите старт и сравните BFS и DFS на сайте: https://grundyjs.ru/algorithms/maze/?utm_source=rutube&utm_medium=social&utm_campaign=maze&utm_content=search_vertical
Сравниваем поиск в ширину (BFS) и поиск в глубину (DFS) на одном лабиринте. BFS использует очередь и распространяется по слоям расстояния; DFS идёт по ветке и возвращается из тупиков по стеку. Найденный маршрут восстанавливается по родителям клеток.
В примере — сетка 7 × 5, seed 34: от старта (1, 1) до выхода (7, 5) оба метода находят путь из 14 переходов. Здесь нет циклов, поэтому простой путь единственный. BFS сделал текущими 19 клеток, DFS — 27; это числа активированных клеток в данном примере, а не универсальное сравнение скорости алгоритмов.
Если есть циклы, DFS может найти более длинный путь. BFS гарантирует кратчайший маршрут по числу переходов, когда каждый переход имеет одинаковую стоимость. В загруженном лабиринте выход может быть недостижим.
Перенесите старт или выход, измените seed, управляйте шагами и сравните обходы. Можно сохранить лабиринт в JSON или загрузить свой.
Авторская озвучка, без музыки. Сцена использует модель и плеер сайта; MP4 со звуком записаны напрямую через CanvasTake. Русские субтитры подготовлены отдельной дорожкой.
Как построен этот лабиринт: https://rutube.ru/video/c4095f82edb36b2ff6d04382eaaf7570/
#алгоритмы #лабиринт #BFS #DFS #программирование
Постройте свой лабиринт: https://grundyjs.ru/r/maze-short
Меняйте seed, делайте шаги вперёд и назад и наблюдайте за стеком.
Рандомизированный поиск в глубину (DFS) строит лабиринт: выбираем ещё не посещённого соседа, открываем проход и сохраняем текущую ветку в стеке. В тупике возвращаемся до клетки с неисследованным направлением.
В примере — сетка 7 × 5, seed 34: 35 клеток и 34 прохода. Каждый новый проход ведёт в новую клетку, поэтому циклов нет. После обхода всей сетки получается связное дерево: между любыми двумя клетками, в том числе выбранными стартом и выходом, есть единственный простой путь.
Попробуйте другой seed, управляйте шагами и сравните получившиеся лабиринты. Поиск пути через BFS и DFS — отдельная тема; этот ролик посвящён генерации.
Авторская озвучка, без музыки. Запись canvas со звуком — CanvasTake.
#алгоритмы #лабиринт #DFS #программирование
Меняйте старт и цель в интерактивном DFS: https://grundyjs.ru/algorithms/depth-first-search/?utm_source=rutube&utm_medium=social&utm_campaign=depth_first_search&utm_content=vertical
Управляйте шагами, проследите за стеком и сравните с поиском в ширину.
Поиск в глубину (DFS) идёт по одной ветке, хранит активные вызовы в стеке и возвращается назад, когда новые соседи заканчиваются.
В этом графе путь из A до F — A → B → D → G → E → C → F: 6 рёбер. Но есть путь A → C → F — всего 2 ребра. DFS находит путь, но не гарантирует кратчайший. BFS находит кратчайший путь по числу рёбер в невзвешенном графе.
Показываем полный обход достижимой компоненты, возвраты и восстановление пути по предкам. Вершина H недостижима из A. Для списка смежности время — O(V + E), дополнительная память самого алгоритма — O(V), без снимков истории визуализации.
Озвучка автора, без музыки. Визуализация — AlgiViz, запись со звуком — CanvasTake.
#алгоритмы #DFS #поисквглубину #программирование
Попробуйте BFS и посмотрите код: https://grundyjs.ru/algorithms/breadth-first-search/?utm_source=rutube&utm_medium=social&utm_campaign=breadth_first_search&utm_content=vertical
Выберите старт и цель, управляйте шагами и проследите за очередью.
Как очередь помогает найти кратчайший путь в невзвешенном графе? Показываем поиск в ширину (BFS) шаг за шагом: открытие вершин, очередь, расстояния и восстановление пути по родителям.
В примере путь из A в G — A → B → D → G: три ребра. Вершина H недостижима из A. Обходим всю достижимую компоненту, затем восстанавливаем один из кратчайших путей.
BFS минимизирует число рёбер: все переходы имеют одинаковую стоимость. Для списка смежности время — O(V + E), дополнительная память самого алгоритма — O(V), без истории визуализации.
Озвучка автора, без музыки. Визуализация — AlgiViz, запись со звуком — CanvasTake.
#алгоритмы #поисквширину #BFS #программирование
