![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Часть 1. Minimum Spanning Trees.
Всё очень просто.
крестиками буквой Х.
Часть 2. Shortest Paths.
Здесь для записи промежуточных ответов было удобно пользоваться LibreOffice Calc.
Всё очень просто.
- Kruskal's algorithm - проходить edges в порядке возрастания и добавлять, если не возникает циклов.
- Prim's algorithm - всё тоже самое, но плясать от построенного дерева.
Часть 2. Shortest Paths.
Здесь для записи промежуточных ответов было удобно пользоваться LibreOffice Calc.
- Dijkstra's algorithm - всё просто, relax a vertex, выбираем vertex с наименьшей дистанцией, relax его и так до победного.
- Topological order - аналогично предыдущему, но vertex-ы выбираем в указанном порядке.
- Bellman-Ford algorithm - а вот с ним я помучалась. Почему-то не сразу сообразила в каком порядке relax vertex-ы. А проходятся они на каждом шаге от первого до последнего. Вкратце:
- Шаг 1. Все vertex-ы - infinity, кроме того, от которого считаем дистанцию. Он - 0. Relax первый vertex. Предположим, это D. Значит, A, B и С мы уже прошли. Их relax на этом шаге больше не нужно. А если D "открыл" последующие, скажем, E и F, их нужно relax по порядку. Причём, если D "открыл" E, а сумма расстояний от D-F-E меньше расстояния от D до E, менять ничего на этом шаге не нужно. А вот если расстояние D-E-F меньше расстояния D-F - значение для F изменить нужно.
- Шаг 2. Проходим все vertex-ы, открытые на предыдущем шаге, в порядке возрастания. Опять-таки, никаких возвратов обратно.
- Шаг 3. Аналогично шагу 2.