2010-11-17 2 views
5

У меня есть сеть, которая может выглядеть следующим образом:
Network
В принципе, я хочу знать, минимальное количество зеленых кругов, которые могут отключать исток и сток, если удалить/отключить. (в этом случае 1)
Я уже успешно реализовал алгорифм Эдмондса-Карпа, но я не знаю, как моделировать сеть с направленными краями, поэтому я получаю желаемый результат.
Если я просто заменю каждое соединение между узлами двумя противоположными направленными краями с емкостью 1, я получаю максимальный поток 2 с помощью EdmondsKarp, но мне нужно удалить только один зеленый круг, чтобы разбить сеть.
Как смоделировать мою сеть как узлы и направлять их?Моделирование сети в ориентированном графе

ответ

4

Вы можете уменьшить эту проблему до стандартной проблемы s-t cut в ориентированных графах, которые затем могут быть решены, например. по алгоритму Эдмондса-Карпа. Для каждой вершины v создайте две вершины v_in и v_out и направленную границу (v_in, v_out), а для каждого ребра {v, w} добавьте два направленных ребра (v_out, w_in) и (w_out, v_in). Тогда нетрудно видеть, что максимальный поток от s_in до t_out соответствует минимальной вершине, пересекаемой между s и t.

0

Вы правильно определили максимальный поток - это 2 для вашей сети.

Из определения flow network

Поток должен удовлетворять ограничению , что количество потока в узел равно количеству потока из него, кроме случаев, когда он является источником, который имеет более исходящие потоки, или раковина, которая имеет более входящего поток

так для среднего узла у вас есть 2 как максимальный поток (входя и выходящий). Знание только максимального потока не даст вам ответа на минимальный разрез.

теорема

макс потока мин-вырезать теорема утверждает, что в сети потока, максимальное количество , проходящего от источника к раковине потока равна минимальной мощности , который, когда удалено определенным образом от сети вызывает ситуацию , что поток не может проходить от источника к раковине

так, да, вы знаете объем потока, который вам нужно удалить, но вы не знаете, каким образом его удалить. Я думаю, что это не так тривиально и вам нужно будет специально искать минимальный разрез.

+0

После некоторого бездоказательного Google, я предполагаю, что сначала попытаюсь использовать метод «грубой силы»: найдите максимальный поток. Удалите узел с большим количеством потоков через него. Повторите эти 2 шага, пока максимальный поток не станет равным нулю. Количество удаленных узлов должно быть минимальным, поэтому я просто считаю это. – Svante

+0

@Svante, нет, это не даст правильного ответа - представьте себе случай, когда один и тот же максимальный поток, значение 7, проходит через 2 набора узлов, frist через 4,2,1, а затем через 3,2,2. Удаление 4 и 3 не приведет к нулю, и вы достигнете нулевого потока только после удаления последних 2 во втором наборе. Таким образом, вы будете считать слишком много узлов. Но, я считаю (не прошел алгоритм), что Эдмондс-Карп рассматривает сценарий минимального сокращения, но не сохраняет его.Я бы искал способ модифицировать алгоритм максимального потока таким образом, чтобы возвращать узлы, через которые проходит максимальный поток. – Unreason

+0

Да, это просто реализовано, и это не сработало. Максимальный расход и минимальный разрез всегда одинаковы. Но минимальный разрез - это минимальная сумма потока по краям, которые нужно разрезать, чтобы разделить источник и слив. Поэтому на самом деле это не говорит мне больше или что-либо о том, какие ребра или узлы являются критическими. – Svante

Смежные вопросы