master
nihonium 2 years ago
parent a31509d093
commit 2c956b7c18
No known key found for this signature in database
GPG Key ID: 0251623741027CFC

@ -0,0 +1,13 @@
В случае классической задачи, поиска пути минимальной длины между двумя вершинами графа, мы поддерживаем в каждой посещенной алгоритмом вершине графа минимальную длину пути до этой вершины.
Здесь стоит оговориться, что будем именовать множество **X** посещенными вершинами, а **V - X** - часть графа, для которой еще нужно найти величину пути или узкого места.
В отличии от классического алгоритма, решение этой задачи должно поддерживать величину актуального узкого места пути, приводящего в вершину **v ∈ X**.
А при добавлении новой вершины из **V - X**, мы должны смотреть не увеличивает ли ребро **(v,u_1)** величину узкого места пути, которое теперь приводит в **u_1**.
Если ребро **(v, u_1)** увеличивает узкое место, то лучше рассмотреть вершину **u_2**, ребро **(v, u_2)** до которой легче **(v,u_1)**.
Поиск неувеличивающих узкое место ребёр нужно осуществлять не только среди соседей определенного узла **v**, но и среди всех **v ∈ X**, поскольку отдавая предпочтение вершине, путь в которую имеет наименьшее узкое место в данный момент, мы гарантируем, что мы не ухудшаем ситуацию для других вершин.
В результате разбора выше, предлагается руководствоваться следующей формулой при выборе очередной вершины из непосещенных и обновлении величин, которые мы поддерживаем:
![](https://hsto.org/getpro/habr/post_images/6bf/459/cbd/6bf459cbdc59a4ffaf8b7bfe68ed0f27.svg)
Стоит пояснить, что поиск по **v ∈ X** осуществляется, только для существующих связей **(v,u)**, а **w(v,u)** - это вес ребра **(v,u)**.