Какая реальная асимптотика Диница на двудольном паросочетании и на сетях с единичными пропускными?
Знаю, что у Диница общая оценка . Но в разборах пишут, что на двудольном паросочетании он работает за . Откуда берётся и какие ещё есть улучшенные оценки для специальных сетей? Хочу понимать, когда Диниц «бесплатно» становится быстрым.
2 ответа
Общая оценка Диница — — пессимистична. На специальных сетях она резко улучшается из-за ограничения на число фаз.
1. Единичные пропускные на двудольном паросочетании / сети с единичными capacity: . Ключ — лемма: после фаз остаточный поток (сколько ещё осталось добрать) не превышает , а каждая оставшаяся единица потока требует не больше одной фазы. Значит фаз всего , каждая → . Это в точности оценка Хопкрофта-Карпа для паросочетания.
2. Единичные сети (unit-capacity networks), где у каждой внутренней вершины степень вход/выход = 1: или . Аналогичный аргумент: длина кратчайшего пути растёт, и после фаз поток почти добран.
3. Планарные сети, сети с малыми целыми capacity — свои улучшенные оценки.
Практический вывод: если в задаче все пропускные = 1 (паросочетания, Менгер, выбор непересекающихся путей), смело считайте Диница как — он пройдёт там, где «общий» max-flow по верхней оценке кажется медленным. Память всегда .
На произвольных больших пропускных же оценка остаётся , но на практике Диниц почти всегда работает кардинально быстрее теоретической границы — поэтому он де-факто стандарт в CP.
Стоит подчеркнуть: оценка — это число фаз (т.к. кратчайшее строго растёт после каждой фазы, а длина не больше ), умноженное на стоимость одной фазы (блокирующий поток с указателями). На единичных сетях число фаз падает до , а стоимость фазы — до (каждое ребро насыщается один раз), отсюда и ускорение. То есть оба множителя улучшаются. Понимание «откуда и откуда » помогает на ходу прикинуть, пройдёт ли поток по времени для данных ограничений.