Min s-t cut в сети

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

У меня есть сеть узлов с некоторыми возможностями ребер. Это эквивалентно чему-то вроде проблемы сетевого потока в алгоритмах. Существует источник node (который определяет определенные события) и приемник node (моя базовая станция). Теперь я хочу найти минимальный разрез s-t в сети, чтобы размер исходного набора был минимизирован. Исходный набор здесь относится к набору узлов, разделенных секцией min s-t, которая содержит источник.

например. если st cut, C = {S,T}, тогда существует набор ребер, которые можно удалить, чтобы разделить сеть на два набора, S и T, а набор S содержит источник, а T содержит тонуть. Разрез минимален, когда сумма емкостей ребер в разрезе минимальна среди всех возможных разрезов s-t. Это может быть несколько таких минимальных разрезов. Мне нужно найти min-cut, который имеет наименьшее количество элементов в наборе S

Обратите внимание, что это не оригинальная проблема, но я попытался упростить ее, чтобы выразить ее с точки зрения алгоритмов.

Ответы

Ответ 1

Я считаю, что вы можете решить эту проблему, найдя минимальное сокращение графика со слегка измененными ограничениями. Идея заключается в следующем: поскольку стоимость разреза равна общей пропускной способности, пересекающей разрез, мы можем попробовать изменить график, добавив дополнительный край из каждого node в графе к t, который имеет емкость один. Интуитивно это означало бы, что каждый node в той же части разреза, что и, внесет одну дополнительную стоимость в общую стоимость разреза, потому что край от этого node до t пересечет край. Конечно, это определенно испортило бы минимальный разрез из-за дополнительной емкости. Чтобы исправить это, применим следующее преобразование: во-первых, умножьте емкости ребер на n, где n - число узлов в графе. Затем добавьте один к каждому ребру. Интуиция здесь заключается в том, что, умножая пропускные способности к краю на n, мы сделали так, чтобы стоимость min-cut (игнорируя новые ребра от каждого node до t) будет в n раз больше первоначальной стоимости разреза, Когда мы добавляем дополнительные края одной емкости из каждого node в t, максимальный возможный вклад, который эти ребра могут внести в стоимость разреза, равен n - 1 (если каждый node на графике, кроме t, равен на той же стороне, что и s). Таким образом, стоимость старого минимального разреза была C, стоимость нового минимального разреза (S, V - S) равна nC + | S |, где | S | - количество узлов на одной стороне разреза как s.

Более формально конструкция такова. Учитывая направленный, емкостный граф G и пару (источник, приемник) (s, t), построим граф G ', выполнив следующее:

  • Для каждого ребра (u, v) в графе умножьте его емкость на n.
  • Для каждого node v на графике добавьте новое ребро (v, t) с емкостью 1.
  • Вычислить min s-t, вырезанный на графике.

Я утверждаю, что min s-t, вырезанный на графе G ', соответствует min s-t, вырезанного на графе G с наименьшим количеством узлов на одной стороне разреза в виде s. Доказательство состоит в следующем. Пусть (S, V - S) - min s-t, вырезанная в G '. Во-первых, нам нужно показать, что (S, V - S) является min s-t разрезом в G. Это доказательство от противного; предположим для противоречия, что существует s-t cut (S ', V - S'), стоимость которого ниже стоимости (S, V - S). Пусть стоимость (S ', V - S') в G равна C ', а стоимость (S, V - S) в G равна C. Теперь рассмотрим стоимость этих двух разрезов в G'. По сужению стоимость C 'будет nC' + | S '| (так как каждая node на стороне S 'разреза вносит одну пропускную способность через разрез), а стоимость C будет nC + | S |. Поскольку мы знаем, что C ' C, мы должны иметь C '+ 1 & le; C. Таким образом,

nC + | S | & GE; n (C '+ 1) + | S | = nC '+ n + | S |

Теперь обратите внимание, что 0 & le; | S | < n и 0 & le; | S '| < n, поскольку на одной стороне разреза может быть не более n узлов. Таким образом,

nC + | S | & GE; nC '+ n + | S | > nC '+ | S' | + | S | > nC '+ | S' |

Но это означает, что стоимость (S, V - S) в G 'больше стоимости (S', V - S ') в G', что противоречит тому, что (S, V - S) является минимальным разрезом в G '. Это позволяет сделать вывод, что любой отрезок min s-t в G 'также является min s-t, вырезанным в G.

Теперь нам нужно показать, что не только минимальный разрез в G 'также минимальный разрез в G, но он соответствует min st cut в G с наименьшим числом узлов на одной стороне разрезать как s. Опять же, это доказательство противоречит; предположим, что (S, V - S) является min s-t, вырезанным в G ', но существует некоторое min s-t, разрезанное в G с меньшим числом узлов на s-стороне разреза. Назовите этот лучший срез (S ', V - S'). Так как (S, V - S) является минимальным разрезом в G ', это также min st cut в G, поэтому стоимость (S', V - S ') и (S, V - S) в G равна некоторое число C. Тогда стоимость (S, V - S) и (S ', V - S') в G 'будет nC + | S | и nC + | S '|, соответственно. Мы знаем, что nC + | S '| < nC + | S |, так как мы выбрали (S ', V - S') как st min cut в G с наименьшим числом узлов на той же стороне, что и S. Но это означает, что (S ', V - S ') имеет более низкую стоимость, чем (S, V - S), что противоречит тому, что (S, V - S) является минимальным разрезом в G'. Таким образом, наше предположение было неверным и (S, V - S) - это min s-t cut в G с наименьшим числом узлов на той же стороне, что и S. Это завершает доказательство корректности конструкции.

Надеюсь, это поможет!

Ответ 2

tl; dr Вычислить поток max s-t и S - множество узлов, достижимых из s дугами положительной остаточной емкости.

Доказательство корректности: ясно, что S - min s-t cut (cut = множество узлов в части, содержащей s). Предположим, что S * - отрезок s-t, меньший S (т.е. | S * | &lt | | S |). Легким аргументом подсчета пусть u будет node в S - S *. Если мы добавим дугу положительной емкости от u до t, то вычисленный поток будет иметь расширенный путь и уже не будет максимальным, но емкость разреза S * не изменится, так как u и t оба принадлежат V - S *. В заключение отметим слабую двойственность, что S * не является минимальным разрезом.

Фактически класс s-t min cuts является дистрибутивной решеткой при пересечении и объединении, поэтому каждый экземпляр вашей проблемы имеет уникальное решение.

Ответ 3

В вашем вопросе и комментарии я думаю, что вы говорите две разные вещи: первое обнаружение minmum st cut, которое выделяет источник node и думает, и его вес минимален (вес будет вычисляться путем удаления размеров ребер), и это можно сделать с алгоритмом Форда-Фулкерсона и вот пример реализации в java (также Matlab имеет функцию graphmaxflow), также он доступен в igraph.

Но в качестве вашего комментария и первой части вопроса вы попросили найти минимальный разрез, так что количество узлов в части s минимизировано. В этом случае вы должны удалить все ребра s, чтобы иметь группы размера 1,n-1, или вы должны перефразировать свой вопрос.