PDF de programación - Algoritmos de emparejamiento

Algoritmos de emparejamientográfica de visualizaciones

Actualizado el 30 de Octubre del 2017 (Publicado el 22 de Julio del 2017)
620 visualizaciones desde el 22 de Julio del 2017
182,0 KB
13 paginas
Creado hace 4a (30/11/2015)
Max-Flow

Jesús, Mager

Algoritmos de emparejamiento

Mager, Jesús

1Universidad Autónoma Metropolitana

Unidad Azcapozalco

2015

Introducción

Max-Flow

Jesús, Mager

El presente trabajo es un resumen del libro “Combinatorial
Optimization. Algorithms and Complexity” escrito por
Christos H. Papadimitriou y Kenneth Steiglitz.
Un emparejamiento en un grafo es un conjunto de aristas que no
comparten un mismo nodo. Buscaremos la mejor combinación
para tener el máximo número de emparejamientos posible.
También podemos agregar pesos a las aristas, donde el reto sería
encontrar el conjunto de aristas que contengan el peso mayor.
Estos algoritmos pueden ser consideras instancias del concepto
camino de incremento usado en Max-Flow. Se tratarán los grafos
bipartitos primero por ser más sencillos para su resolución.

Conceptos

Max-Flow

Jesús, Mager

Un emparejamiento M es un subconjunto de G = (V , E ) con

la propiedad de que ningún par de aristas comparten algún
nodo.

Un emparejamiento máximo es el que más se acerque a |V|/2.
Dado G , el problema del emparejamiento es encontrar un

emparejamiento máximo M sobre G .

Cuando la cardinalidad de un emparejamiento es |V|/2, el
emparejamiento mas grande posible en un grafo de |V| nodos,
decimos que el emparejamiento es completo o perfecto.
Los arcos en M serán llamados arcos emparejados; los

restantes nodos libres.

Si un camino contiene nodos libres entonces será llamado un

camino alternativo.

Los vértices que se encuentran en caminos alternativos

comenzando con un vértice expuesto y tienen un rango impar
en este camino son llamados exteriores; que tienen un rango
par se llaman interiores.

Max-Flow

Jesús, Mager

Con esto, planteamos:
Lema: Sea P un conjunto de arcos en un camino de incremento
p = [u1, u2, . . . , u2k ] en un grafo G con respecto al

emparejamiento M. Entonces M = M P es una cardinalidad de
emparejamiento |M| + I . (El operador S T denota la diferencia
simétrica de S y T , definida como S T = (S − T ) ∪ (T − S) )

Teorema: Un M de emparejamiento en un grafo G es máximo, si
y sólo si, no existe un camino de incremento en G respecto a M.
Por esto, será posible plantear que dado un emparejamiento, se
puede buscar caminos de aumento, hasta que ya no exista alguno
nuevo, con lo que se resolverá el problema.

Algoritmo de emparejamiento bipartita

Max-Flow

Jesús, Mager

Entrada: Un grafo bipartita B = (V , U, E ).
Salida: El máximo emparejamiento de B representado como un arreglo
mate.
for all v ∈ V ∪ U do

Inizializando

Construimos el grafo auxiliar

mate[v ] ← 0
end for
for all v ∈ V do

exposed[v ] ← 0

end for
A ← ∅
for all

[v , u] ∈ E do
if mate[u] = 0 then
exposed[v ] ← u
else if mate[u] = then
A ← A ∪ (v , mate[u])

end if
Q ← ∅
for all v ∈ V do

if mate[v ] = 0 then

Q ← Q ∪ {v}, label[v ] ← 0

end if

end for
Continua en la siguente página.

end for

Algoritmo de emparejamiento bipartita
(Continuación)

Max-Flow

Jesús, Mager

while Q = ∅ do

Sea v un nodo de Q
remueve v de Q
if exposed[v ] = 0 then

else

augment(v), goto estado
for all dovs /∈ label tal que (v , v) ∈ A:

label[v] ← v , Q ← Q ∪ {v}

end for

end if
end while
function augment(v)
if label[v ] = 0 then

else

mate[v ] ← exposed[v ], mate[exposed[v ]] ← v
exposed[label[v ]] ← mate[v ]
mate[v ] ← exposed[v ]
mate[exposed[v ]] ← v
augment(label[v])

end if

end function

Max-Flow

Jesús, Mager

Cada incremento también incrementa la cardinalidad del
emparejamiento en uno, por lo que podemos tener a lo mucho
mín(|V|,|U|) estados. La complejidad de cada estado es de
O(|E|). La contrucción del grafo auxiliar y el calculo del arreglo
expuesto requiern O(|E|), ya que |E| arcos deben de considerarse.
Por lo que el algoritmo resuele correctamente el problema del
emparejamiento sobre un grafo bipartito B = (V , U, E ) en
O(mín(|V|,|U|)˙|E|)).

Max-Flow

Jesús, Mager

El resultado de O(mín(|V|,|U|)˙|E|)) se puede mejorar. Se puede
recudir el problema de del emparejamiento bipartito a un problema
de max-flow para redes sencillas. Para el grafo bipartita
B = (V , U, E ) definimos la siguente red N(B) = (s, t, W , A),
donde s y t son dos nodos nuevos, W es la unión entre {s, t}, V y
U, y A, es un conjunto de arcos consistentes de tres categorías:

Los arcos (s, v ) para todo v ∈ V
Los arcos (u, t) para todo u ∈ U
Los arcos (v , u) para todo v ∈ V y v ∈ V tal que [v , u] ∈ E .

Apareamiento no bipartito: blossoms

Max-Flow

Jesús, Mager

Lema: La cardinalidad del máximo apareamiento de un grafo
bipartita B equivale al valor del máximo flujo s − t
Teorema: Podemos resolver el porblmea del emparejameiento
bipartita en O(|V|1/2|E|).

Max-Flow

Jesús, Mager

Teorema: Suponga que mientras se busca po run camino de
incremento desde un no do expuesto en un grafo G con respecto
al apareamiento M, descubrimos un blossom en b. Entonces,
existe un camino alternativo desde u a cualquier nodo en b,
terminando en un arco apareado.
Teorema: Suponga que, mientras se busca por un camino de
incremento desde un nodo u de un grafo G con respecto al
emparejamiento M, se descubre un blossom b. Entonces ixiste un
camino de aumento desde u ∈ G con respecto a M hay uno de u
(vb si u está en la base de b) en G /b con respecto a M/b.

Max-Flow

Jesús, Mager

El algoritmo para la solución del problema de apareamiento no
bipartita es de O(|V|4). Se utiliza el algoritmo del caso bipartita,
junto a los métodos necesarios para enfrentarse a los blossoms. Se
va a usar el digrafo auxiliar como en el primer algoritmo y se va a
realizar un vértice expuesto a la vez.
Teorema: Suponga que un grafo G no existe un camino de
incremento desde un vértice expuesto u con respecto al
apareamiento M. Sea p un camino de aumento que termina en
otros nodos expustas v y w . Entonces no existe un camino de

incremento desde u respecto a M P tampoco.

Crolario: Si en algún estado no existe un camino de aumento
desde un nodo u, entonces nunca habrá caminos de aumento
desde u.
Por lo tanto, si la búsqueda falla en encontrar un camino de
incremento desde el nodo u, u nunca volverá a ser considerado
como un potencial punto de partida. Se mantendrá esto en un
registro llamado considered[u] ← 1

Algoritmo no bipartita de emparejamiento

Max-Flow

Jesús, Mager

Entrada: Un grafo G = (V , E )
Salida: Un emparejamiento máximo de G en terminos del arreglo mate.
for all v ∈ V do

mate[v ] ← 0, considered[v ] ← 0

end for
estado:
while ∃v ∈ V con considered[u] = 0 y mate[u] = 0 do

considered[] ← 1, A ← ∅
for all v ∈ V do

exposed[v ] ← 0
for all [v , w ] ∈ E do

if mate[w ] = 0 y w = u then
exposed[v ] ← w
else if mate[w ] = v then
A ← A ∪ (v , mate[w ])

end if

end for
for all v ∈ V do
seen[v ] ← 0

end for
Q ← u, label[u] ← 0
Continúa...

end for
end while

Algoritmo no bipartita de emparejamiento.
Continuación...

Max-Flow

Jesús, Mager

while Q = ∅ do

Sea v un nodo de Q
Remueve v de Q
for all los nodos no etiquetados w ∈ V tales que (v , w ) ∈ A do

Q ← Q ∪ w , label[w ] ← v
seen[mate[w ]] ← 1
if exposed[w ] = 0 then

augment(w)
goto estado

end if
if seen[w ] = 1 then

blossom(w)

end if

end for
end while

Teorema: El algoritmo encuentra correctamente el
emparejamiento máximo en un grafo G = (V , E ) en O(|V|4)
  • Links de descarga
http://lwp-l.com/pdf5693

Comentarios de: Algoritmos de emparejamiento (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad