Эвристика разрыва push-relabel

Я не понимаю, как реализовать эвристику разрыва с помощью push relabel. Вики описала это так:

«В эвристике перемаркировки промежутков мы поддерживаем массив A размера n, содержащий в A[i] количество узлов для каждой метки (до n). Если найдена метка d, такая что A[d] = 0, то все узлы с меткой > d перемаркированы на метку n».

Используйте эвристику разрыва. Если существует «k», такое что ни для одного узла height(u) =k, вы можете установить height(u) = max(height(u), height(source) +1) для всех узлов, кроме источника, для которого высота (у) >к. Это связано с тем, что любое такое «k» представляет собой минимальный разрез в графе, и поток больше не будет идти от узлов S = {u, где высота (u) > k} к узлам в T = {v, где высота (v) 0. Но тогда height(u) > height(v)+1 , что противоречит height(u) > k и height(v) ‹ k.

Может ли кто-нибудь объяснить мне в псевдокоде, как добавить эвристику пробела в push-relabel FIFO, как показано в примере кода вики?

Спасибо, Винс


person vpakwong    schedule 28.01.2013    source источник


Ответы (1)


Это может быть немного поздно, но вот ссылка на блокнот Стэнфордского университета, где вы можете найти максимальный поток push-relabel, используя эвристику Gap в C. Я надеюсь, что это поможет вам.

http://www.stanford.edu/~liszt90/acm/notebook.html#file3

person Scratch    schedule 16.08.2013
comment
Это C++, и это несколько сбивает с толку. - person Chiffa; 13.08.2014