Кратчайший путь в ациклическом графе — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
()
Строка 1: Строка 1:
{{Определение|definition= '''Кратчайший путь''' из '''u''' в '''v''' – это любой путь '''p''' из '''u '''в '''v''', для которого <math>\boldsymbol w(p) = \delta(u, v)</math>, где: <br>
+
{{Определение|definition= '''Кратчайший путь''' из '''u''' в '''v''' – это любой путь '''p''' из '''u '''в '''v''', для которого <tex>\boldsymbol w(p) = \delta(u, v)</tex>, где: <br>
* <math>\boldsymbol w(p)</math> = сумма весов всех ребер пути p
+
* <tex>\boldsymbol w(p)</tex> = сумма весов всех ребер пути p
*<math>\boldsymbol \delta (u,v) = \begin{cases}   
+
*<tex>\boldsymbol \delta (u,v) = \begin{cases}   
 
\boldsymbol {min} \text{ }  \boldsymbol \omega(p) : \text{for all ways p from u to v},& \mbox{if } \mathcal{9} p  \\
 
\boldsymbol {min} \text{ }  \boldsymbol \omega(p) : \text{for all ways p from u to v},& \mbox{if } \mathcal{9} p  \\
 
\mathcal{1}, & \mbox{if }\nexists p\mbox { в противном случае}
 
\mathcal{1}, & \mbox{if }\nexists p\mbox { в противном случае}
\end{cases} </math>
+
\end{cases} </tex>
 
}}
 
}}
 
==Принцип оптимальности на префиксе==
 
==Принцип оптимальности на префиксе==
 
Префикс оптимального решения сам является оптимальным решением (в другой подзадаче)<br>
 
Префикс оптимального решения сам является оптимальным решением (в другой подзадаче)<br>
<math>a \rightsquigarrow b \rightsquigarrow c </math>  <br>
+
<tex>a \rightsquigarrow b \rightsquigarrow c </tex>  <br>
 
Если ac - оптимальное решение , то и ab (префикс ac) тоже является оптимальным решением.<br>
 
Если ac - оптимальное решение , то и ab (префикс ac) тоже является оптимальным решением.<br>
  
Строка 15: Строка 15:
 
Для нахождения кратчайшего пути в графе заведем функцию переменную opt[x], в которой хранится длина кратчайшего пути до вершины х.<br>
 
Для нахождения кратчайшего пути в графе заведем функцию переменную opt[x], в которой хранится длина кратчайшего пути до вершины х.<br>
 
В общем случае мы можем написать: <br>
 
В общем случае мы можем написать: <br>
<math>opt[u] = min_{v,u \in E}  (opt[v] + cost(vu))</math>, где  cost(vu) - вес ребра из u в v.  <br>
+
<tex>opt[u] = min_{v,u \in E}  (opt[v] + cost(vu))</tex>, где  cost(vu) - вес ребра из u в v.  <br>
 
Будем обходить вершины в порядке, обратном к топологической сортировке.
 
Будем обходить вершины в порядке, обратном к топологической сортировке.

Версия 00:28, 11 января 2011

Определение:
Кратчайший путь из u в v – это любой путь p из u в v, для которого [math]\boldsymbol w(p) = \delta(u, v)[/math], где:
  • [math]\boldsymbol w(p)[/math] = сумма весов всех ребер пути p
  • [math]\boldsymbol \delta (u,v) = \begin{cases} \boldsymbol {min} \text{ } \boldsymbol \omega(p) : \text{for all ways p from u to v},& \mbox{if } \mathcal{9} p \\ \mathcal{1}, & \mbox{if }\nexists p\mbox { в противном случае} \end{cases} [/math]

Принцип оптимальности на префиксе

Префикс оптимального решения сам является оптимальным решением (в другой подзадаче)
[math]a \rightsquigarrow b \rightsquigarrow c [/math]
Если ac - оптимальное решение , то и ab (префикс ac) тоже является оптимальным решением.

Для нахождения кратчайшего пути в графе заведем функцию переменную opt[x], в которой хранится длина кратчайшего пути до вершины х.
В общем случае мы можем написать:
[math]opt[u] = min_{v,u \in E} (opt[v] + cost(vu))[/math], где cost(vu) - вес ребра из u в v.
Будем обходить вершины в порядке, обратном к топологической сортировке.