Теоремы Карзанова о числе итераций алгоритма Диница в сети с целочисленными пропускными способностями — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
{{Лемма
 
{{Лемма
 
|id=lemma1.
 
|id=lemma1.
|statement=Пусть <tex>f</tex> - блокирующий поток в графе <tex>G</tex>. <tex>s</tex>, <tex>t</tex> - исток и сток, соответственно. Тогда <tex>\rho_{G}(s, t) < \rho_{G_{f}}(s, t)</tex>.
+
|statement=Пусть <tex>f</tex> - блокирующий поток в сети <tex>G</tex>. <tex>s</tex>, <tex>t</tex> - исток и сток, соответственно. Тогда <tex>\rho_{G}(s, t) < \rho_{G_{f}}(s, t)</tex>.
 
}}
 
}}
  
Строка 7: Строка 7:
 
|definition=
 
|definition=
 
В графе G, в котом s, t - исток и сток, соответственно.
 
В графе G, в котом s, t - исток и сток, соответственно.
Для v - вершины, не являющаейся истоком или стоком:
+
Для v - вершины, не являющейся истоком или стоком:
  
 
<tex>c^{+}(v) = \sum\limits_{uv \in E} c_{uv}</tex>.
 
<tex>c^{+}(v) = \sum\limits_{uv \in E} c_{uv}</tex>.
Строка 23: Строка 23:
 
|id=th1.  
 
|id=th1.  
 
|about=Первая теорема Карзанова
 
|about=Первая теорема Карзанова
|statement=Чило итераций алгоритма Диница в сети G с целочисленными пропускными способностями - <tex>O(\sqrt{c(G)})</tex>.
+
|statement=Число итераций алгоритма Диница в сети <tex>G</tex> (<tex>s</tex>, <tex>t</tex> - исток и сток, соответственно.) с целочисленными пропускными способностями - <tex>O(\sqrt{c(G)})</tex>.
|proof=доказательство (необязательно)
+
|proof=Разобьём все итерации на 2 группы:
 +
 
 +
1). Короткие фазы - когда <tex>\rho(s, t) \leq k</tex>.
 +
 
 +
2). Длинные фазы - когда <tex>\rho(s, t) > k</tex>.
 +
 
 +
Коротких фаз - <tex>O(k)</tex> штук, т.к. после каждой итерации <tex>\rho(s, t)</tex> увеличивается, но не может быть больше <tex>k</tex>.
 +
 
 +
Длинные фазы:
 +
Число длинных фаз <tex>\leq</tex> количество путей из <tex>s</tex> в <tex>t</tex> длины "<tex> > k</tex>" <tex> \leq \frac{\sum\limits_{v \in V} c(v)}{k} = \frac{c(G)}{k}</tex>. (т.к. через вершину <tex>v</tex> не может пройти больше <tex>c(v)</tex> путей, а на каждом пути лежит <tex>\geq k</tex> вершин.)
 +
 
 +
Получается, что число длинных фаз - <tex>O(\frac{c(G)}{k})</tex>.
 +
 
 +
Давайте возьмём <tex>k = \sqrt{c(G)}</tex>.
 +
 
 +
Получим, что количество фаз - <tex>O(\sqrt{c(G)})</tex>.
 +
 
 +
А, значит, что количество итераций тоже - <tex>O(\sqrt{c(G)})</tex>.
 +
}}
 +
 
 +
{{Теорема
 +
|id=th2
 +
|about=Вторая теорема Карзанова
 +
|statement=Число итераций алгоритма Диница в сети <tex>G</tex> (<tex>s</tex>, <tex>t</tex> - исток и сток, соответственно.) с целочисленными пропускными способностями меньше <tex>c_{max}</tex> - <tex>O(\sqrt[3]{{|V|}^2 c_{max}})</tex>.
 
}}
 
}}

Версия 16:19, 23 декабря 2010

Лемма:
Пусть [math]f[/math] - блокирующий поток в сети [math]G[/math]. [math]s[/math], [math]t[/math] - исток и сток, соответственно. Тогда [math]\rho_{G}(s, t) \lt \rho_{G_{f}}(s, t)[/math].


Определение:
В графе G, в котом s, t - исток и сток, соответственно.

Для v - вершины, не являющейся истоком или стоком:

[math]c^{+}(v) = \sum\limits_{uv \in E} c_{uv}[/math].

[math]c^{-}(v) = \sum\limits_{vu \in E} c_{vu}[/math].

[math]c^{+}(s) = +\infty[/math]. [math]c^{-}(t) = +\infty[/math].

[math]c(v) = min(c^{+}(v), c^{-}(v))[/math].

[math]c(G) = \sum\limits_{v \in V}c(v)[/math].


Теорема (Первая теорема Карзанова):
Число итераций алгоритма Диница в сети [math]G[/math] ([math]s[/math], [math]t[/math] - исток и сток, соответственно.) с целочисленными пропускными способностями - [math]O(\sqrt{c(G)})[/math].
Доказательство:
[math]\triangleright[/math]

Разобьём все итерации на 2 группы:

1). Короткие фазы - когда [math]\rho(s, t) \leq k[/math].

2). Длинные фазы - когда [math]\rho(s, t) \gt k[/math].

Коротких фаз - [math]O(k)[/math] штук, т.к. после каждой итерации [math]\rho(s, t)[/math] увеличивается, но не может быть больше [math]k[/math].

Длинные фазы: Число длинных фаз [math]\leq[/math] количество путей из [math]s[/math] в [math]t[/math] длины "[math] \gt k[/math]" [math] \leq \frac{\sum\limits_{v \in V} c(v)}{k} = \frac{c(G)}{k}[/math]. (т.к. через вершину [math]v[/math] не может пройти больше [math]c(v)[/math] путей, а на каждом пути лежит [math]\geq k[/math] вершин.)

Получается, что число длинных фаз - [math]O(\frac{c(G)}{k})[/math].

Давайте возьмём [math]k = \sqrt{c(G)}[/math].

Получим, что количество фаз - [math]O(\sqrt{c(G)})[/math].

А, значит, что количество итераций тоже - [math]O(\sqrt{c(G)})[/math].
[math]\triangleleft[/math]
Теорема (Вторая теорема Карзанова):
Число итераций алгоритма Диница в сети [math]G[/math] ([math]s[/math], [math]t[/math] - исток и сток, соответственно.) с целочисленными пропускными способностями меньше [math]c_{max}[/math] - [math]O(\sqrt[3]{{|V|}^2 c_{max}})[/math].