Download Tema 5: Emparejamientos

Document related concepts
no text concepts found
Transcript
Fundamentos de la teoría de grafos.
3º I.T.I. de Sistemas
Mª Teresa Cáceres Sansaloni
Tema 5: Emparejamientos
• Preliminares.
• Emparejamientos máximos en grafos bipartitos.
• grafos no ponderados
• grafos ponderados, asignación óptima
• Emparejamientos máximos en grafos en general.
• grafos no ponderados
• grafos ponderados
1
Problema de los matrimonios
Problema de la asignación de tareas
Problema de los horarios
Problema de los matrimonios
Dada una reunión de hombres y mujeres, donde cada mujer
conoce a alguno/s de los hombres ¿bajo qué condiciones
puede cada mujer casarse con un hombre al que conoce
previamente?
Determinar el número máximo de mujeres de la reunión que
puede casarse con algún hombre al que conoce previamente.
Modelización del problema:
problema
Un grafo bipartito G
conjuntos partitos: el conjunto de hombre y el conjunto
de mujeres
aristas: une un vértice que corresponde a un hombre con
otro que representa a una mujer si y sólo si
ambos se conocen previamente.
El problema de los matrimonios puede expresarse en términos
de Teoría de Grafos como:
¿Bajo qué condiciones un grafo bipartito G dado
posee un subgrafo 1-regular que incluya a todos los
vértices de uno de los subconjuntos partitos (el que
representa a las mujeres)?
¿Cuál es el tamaño máximo de un subgrafo 1-regular
de un grafo bipartito?
Problema de la asignación de tareas
Dada una serie de trabajos (tareas) vacantes y otra de candidatos
para uno o más de dichos trabajos ¿bajo qué condiciones existe
una asignación ?
¿Qué asignación de candidatos a tareas permite cubrir el máximo
número de tareas?
Modelización del problema
Un grafo bipartito G
conjuntos partitos: los trabajos vacantes y los candidatos
aristas: un vértice que representa a un candidato es
adyacente a los vértices que representan las tareas
que está capacitado a realizar el candidato
El problema de la asignación de tareas puede expresarse en
términos de Teoría de Grafos como:
¿Bajo qué condiciones un grafo bipartito G dado
posee un subgrafo 1-regular que incluya a todos los
vértices de uno de los subconjuntos partitos, el que
representa a los candidatos (o bien a los trabajos)?
¿Cuál es el tamaño máximo de un subgrafo 1-regular
de un grafo bipartito?
Problema de la asignación óptima
Es otra versión del problema anterior, no se exige cubrir el
máximo número posible de trabajos vacantes sino dar una
asignación tal, que los salarios que pague la compañía produzca el
máximo beneficio.
Modelización del problema
Un grafo G bipartito ponderado. Si el candidato (C) se le
asigna la tarea (T), entonces el peso de la arista CT, w(CT), en G
es una medida del beneficio que la compañía obtendrá
contratando al candidato C para cubrir el puesto T.
El problema de encontrar una asignación de candidatos a
trabajos vacantes que produzca un beneficio máximo a la empresa
es equivalente a encontrar un subgrafo 1-regular H de G tal que la
suma de los pesos de las aristas de H sea máximo.
Definición
Un emparejamiento de un grafo G es cualquier subgrafo
1-regular de G (es decir, un subgrafo inducido por una
colección de aristas dos a dos no incidentes entre sí).
Un emparejamiento máximo de un grafo G es cualquier
emparejamiento de G de orden máximo (con el máximo
número posible de vértices).
emparejamientos (no máximos)
emparejamiento máximo
no es emparejamiento
Definición
Un emparejamiento perfecto de un (p,q)-grafo G es un
emparejamiento de tamaño p/2 (luego p ha de ser par). En el
ejemplo anterior, el emparejamiento máximo es perfecto.
Nota:
Aunque cada grafo que admita un emparejamiento
perfecto ha de ser de orden par (p/2 ha de ser natural),
NO todo grafo de orden par admite un emparejamiento
perfecto (por ejemplo, k1,2n+1 con n≥1)
Definición:
Un emparejamiento de un grafo ponderado G es cualquier
subgrafo 1-regular de G(≡ cualquier conjunto de aristas NO
incidentes dos a dos).
Un emparejamiento de peso máximo de un grafo ponderado G
es un emparejamiento de G tal que la suma de los pesos de sus
aristas sea máximo.
Nota:
Un emparejamiento
de peso máximo en un grafo
ponderado NO tiene por qué corresponder a un emparejamiento
máximo del grafo subyacente.
1
3
2
1
1
emparejamiento
de
peso
máximo
w(H)=4.
No
es
emparejamiento máximo en el
grafo subyacente.
Hay cuatro tipos de Problemas relacionados con
emparejamientos:
1.
Encontrar un emparejamiento máximo en un
grafo bipartito.
2. Encontrar un emparejamiento máximo en un
grafo general.
3. Encontrar un emparejamiento ponderado máximo en
un grafo bipartito ponderado.
4. Encontrar un emparejamiento ponderado máximo en
un grafo ponderado general.
El 4 es mas complejo y requiere tratamientos más
avanzados.
Sea M un emparejamiento de G.
Se llama arista emparejada con respecto a M a cada una de las
aristas de G que pertenecen a M y arista no emparejada con
respecto a M a las que pertenecen a G-M.
Se llama vértice emparejado con respecto a M a cada uno de los
vértices incidentes con aristas de M (vértices de M) y vértice no
emparejado (o soltero) con respecto a M en otro caso.
Se llama camino alternado de G con respecto a M a un camino de
G cuyas aristas son alternativamente emparejadas y no
emparejadas con respecto a M.
Se llama camino aumentante (o creciente) de G con respecto a
M a un camino alternado no trivial cuyos vértices extremos son
ambos solteros.
Nota: Todo camino alternado tiene longitud par y todo camino
aumentante tiene longitud impar.
Resultados técnicos:
Teorema 1:
Sean M1 y M2 dos emparejamientos de un grafo G. Sea
_
A el conjunto de _
aristas que pertenecen a M1 o a M2 pero no a
ambos (es decir, A=(M1-M2) ∪ (M2-M1)).
Sea H_ el subgrafo recubridor de G de conjunto de aristas
E(H)=A. Entonces, cada componente de H es de uno de los
siguientes tipos:
a) un vértice aislado
b) un ciclo cuyas aristas pertenecen, alternativamente,
a M1 y M2.
c) un camino no trivial cuyas aristas pertenecen,
alternativamente, a M1 y M2 y tal que cada vértice
final del camino es un vértice no emparejado con
respecto a M1 o a M2, pero no a ambos.
Demostración:
D(H) § 2 (cada vértice de H incide como mucho con una arista
de M1 y una de M2 )
Cada componente de H es o un camino o un ciclo.
(a) Camino trivial ï vértice aislado
(b) Ciclo (alternan aristas de M1 y de M2) ï Ciclo par
(c) Camino P, componente de H con la arista e=uv con u como
vértice final del camino P.
e œ E(H) Ø (e œ M1 - M2 ó e œ M2 – M1)
Entonces, u es vértice de emparejamiento de M1 y
no de M2 o viceversa, (u es vértice de emparejamiento de M2
pero no de M1)
Teorema 2: (de Berge)
Un emparejamiento M de un grafo G es máximo ⇔ no
existen caminos aumentantes de G con respecto a M.
Demostración:
(fl ) Por R.A.
Sea M un emparejamiento máximo en G y suponemos que G
contiene camino aumentante P. P tiene longitud impar.
M’ = E(P) … M;
M’’ = E(P) – M’
|M’’| = |M’| + 1 fl |(M - M’) » M’’| > |M| (contradicción)
(›) Sea M1 emparejamiento en G. No existe camino aumentante
respecto a M1. Entonces M1 es un emparejamiento máximo.
Sea M2 emparejamiento máximo en G, entonces no existe
camino aumentante con respecto a M2. Sea H subgrafo
recubridor de G con
E(H) = (M1 - M2 ) » (M2 – M1)
H contiene tantas aristas de M1 como de M2 , ya que H contiene
un número par de aristas y por tanto, tantas aristas de M1
como de M2 , veámoslo:
si H1 una componente de H será del tipo del teorema anterior
(a), (b), (c)
Si H1 es del tipo (a), (b) ⇒ E(H1)=par
Si H1 es de tipo (c) no puede ser un camino aumentante
respecto M1 o M2 (a M1 por hipótesis y a M2 porque es
máximo) ⇒ H1 es un camino alternado ⇒ E(H1)=par
Así
| M1| = | M2|
y M1 es máximo.
†
Sea G con U1, U2 Õ V(G) tal que U1 … U2 ∫ «
U1 está emparejado con U2 si existe un emparejamiento M en G tal
que:
cada arista de M es incidente con un vértice de U1 y un
vértice de U2
y cada vértice de U1 o U2 es incidente con una arista de
M.
Sea U un subconjunto no vacío de vértices de G,
N(U) = {v∈V(G) adyacentes con, al menos, un elemento de U}
(vecinos o entorno de U)
Se dice que U es no deficiente si |N(S)|¥|S| "SŒU S∫«
Teorema:
Sea G grafo bipartito, con V(G) = V1 » V2
El conjunto V1 puede estar emparejado con V2 si y sólo si
|N(S)| ¥ |S| "SŒ V1 S ∫ «
Una colección S1, S2,..., Sn, n ¥ 1, de conjuntos finitos no vacíos,
tiene un sistema de representación si existe un conjunto
{s1 , s2 ,..., sn} de elementos distintos con si œ Si , para 1§ i § n
Teorema: Una colección S1, S2,..., Sn, n ¥ 1, de conjuntos finitos no
vacíos, tiene un sistema de representación si y sólo si para cada k
(1§ k § n) la unión de cualesquiera k de estos conjuntos contiene
al menos k elementos.
Para el problema de los matrimonios: Una condición necesaria y suficiente
que garantiza que cada mujer puede casarse con un hombre al que conoce
previamente, es que cualquier subconjunto de k mujeres (1§ k § n)
colectivamente conozcan al menos a k hombres.
Emparejamiento máximo en un grafo bipartito.
Sea M un emparejamiento en G y P un camino aumentante
respecto a M
M’ = E(P) … M;
M’’ = E(P) – M’;
M1 = (M - M’) » M’’
M1 es un emparejamiento para G con |M1| = |M| + 1
M1 se obtiene aumentando M a lo largo de P
G
G
v1
v8
v1
v8
Emparejamiento máximo en un grafo bipartito.
Teorema:
Sea M un emparejamiento de G que no es máximo, v vértice suelto
respecto a M. M1 emparejamiento obtenido aumentando M por un
camino aumentante. Si G contiene un camino aumentante respecto a
M1 con v como vértice final, entonces G contiene un camino
aumentante con respecto a M que tiene v como vértice final.
Corolario:
Sea M un emparejamiento de G. Supongamos que M1, M2,..., Mk es una
secuencia de emparejamientos de G de modo que Mi (2§i§k) es
obtenido de Mi-1por un camino aumentante. Sea v un vértice suelto
respecto de M para el cual no existe un camino aumentante con v
como vértice final. Entonces G no contiene un camino aumentante
con respecto a Mi (2§i§k) que tiene v como vértice final.
Algoritmo 1
[Encuentra un emparejamiento máximo en un (p, q)-grafo bipartito con V (G) = {v1, v2, . . . , vp}
y con emparejamiento inicial M1]
P1.− i ô 1, Mô M1
P2.− Si i < p, entonces continua
Si no, STOP (ya que hemos encontrado un
emparejamiento máximo M)
P3.− Si vi está emparejado entonces iô i + 1 y ve al P2.
Si no vôvi y la cola Q se inicializa sólo con v, (Q ô {v})
P4.−
[Construye el árbol alternado enraizado en v]
P4.1.− Para j = 1, 2, . . . , p y j ≠ i, ARBOL(vj) ô F
Además, ARBOL(vi) ô V
P4.2.− Si Q =«; entonces iô i + 1 y ve al P2.
Si no, borra un vértice x de Q y continua (QôQ−{x})
P4.3.− [Determina si hay camino aumentante o extiende el árbol]
P4.3.1− Supóngase que N(x) = {y1, y2, . . . , yk}. j ô 1
P4.3.2− Si j ≤ k, entonces yô yj
Si no, ve al paso P4.2.
P4.3.3− Si ARBOL(y) = V , entonces jôj+1 y ve a P4.3.2
Si no, continua.
P4.3.4− Si y es incidente con una arista emparejada yz,
entonces ARBOL(y)ô V , ARBOL(z)ô V ,
PADRE(y)ô x, PADRE(z) ô y, QôQ + {z},
j ô j + 1 y ve al paso P4.3.2.
Si no, y es vértice no emparejado y continua.
P4.3.5− Usamos la lista PADRE para encontrar el camino
alternado P’≡ v − x en el árbol alternado. Sea P el
camino aumentante obtenido añadiendo {x, y} a P’.
P5− Aumenta M a lo largo de P para obtener un nuevo
emparejamiento M’. Sea M ← M’, i ← i + 1 y ve al P2.
Complejidad: O(pq)
Cada vez que construimos un árbol alternado, los vértices
adyacentes a cada vértice borrado de la cola Q han sido
examinados a lo sumo una vez.
Dado que ∑δ(u)=2q ⇒ para cada árbol alternado se realizan
O(q) pasos en P4.
Cada camino aumentante tiene a lo sumo p-1 aristas, así que P5
tiene complejidad O(p). Como p-1≤q, se tiene que P5 tiene
complejidad O(q).
Ya que cada vértice se elige a lo sumo una vez como raíz de un árbol
alternado, sigue que la complejidad del algoritmo completo es
O(pq).
Problema de asignación óptimo
Encontrar un emparejamiento de peso máximo en un grafo
bipartito ponderado.
G grafo bipartito ponderado con V(G) = V1» V2
Sea G’ grafo bipartito completo ponderado. G subgrafo de G’
V(G’) = U1» U2 con |U1| = |U2| = max{|V1|, |V2| } y Vi Œ Ui i=1,2
Si x œ U1; y œ U2
ï wG’(xy) = wG(xy) si xy œ E(G)
wG’(xy) = 0 en otro caso
Si M es un emparejamiento ponderado máximo de G’, entonces:
1.- M es un emparejamiento perfecto de G’
(puede haber aristas de M con peso 0)
2.- M … E(G) emparejamiento ponderado máximo de G.
Es suficiente un algoritmo para encontrar un emparejamiento
perfecto de peso máximo en grafos bipartitos completos
ponderados.
Sea G grafo bipartito completo ponderado,
ponderado con
V1 = {v1, v2, ... , vp} y V2 = {u1, u2, ... , up}
Etiquetado de vértices viable,
viable es una función { real del conjunto
de vértices tal que "v œ V1, " u œ V2 {(v) + {(u) ¥ w(vu)
Un etiquetado de vértices viable de G es:
{(v) = max{ w(vu): u œ V2 } " v œ V1
{(u) = 0
" u œ V2
Se define:
E{ ={vu œ E(G): vœV1, uœV2, {(v) + {(u) = w(vu)}
H{ subgrafo recubridor de G con conjunto de aristas E{
Teorema:
Teorema
Sea { un etiquetado de vértices viable de un grafo G bipartito
completo ponderado. Si H{ contiene un emparejamiento perfecto
M’, entonces M’ es un emparejamiento ponderado máximo de G.
Algoritmo 2 (Kuhn-Munkres)
[Algoritmo de emparejamiento ponderado máximo para grafos bipartitos
completos ponderados. Sea G un grafo bipartito ponderado completo]
P1.- [Inicializa un etiquetado viable]
P1.1- Para cada v∈V1, l(v)←max {w(vu): u∈V2} .
P1.2- Para cada u∈V2, l(u)←0.
P1.3- Sea Hl el subgrafo recubridor de G con
conjunto de aristas El.
P1.4- Sea Gl el grafo subyacente de Hl.
P2. - Se aplica el algoritmo 1 para grafos bipartitos no
ponderados para encontrar un emparejamiento
máximo M en Gl.
P3.– [Determina si se ha encontrado un emparejamiento ponderado máximo]
P3.1- Si cada vértice de V1 está emparejado con
respecto a M, entonces retorna M y STOP.
Si no, continua.
P3.2- Sea x el primer vértice no emparejado de V1.
P3.3- Se construye un árbol alternado con respecto a M
que está enraizado en x. Si se encuentra un camino
aumentante P, entonces aumentamos M a lo largo
de P y ve al paso P3.1.
Si no, sea T el árbol alternado con respecto a M y
enraizado en x que no puede ser extendido más en Gl.
P4.- Calcular ml←min{l(v)+l(u)-w(vu): v∈V1∩V(T) y u∈V2-V(T)}
Sea
l(v)-ml si v∈V1∩V(T)
l’(v)← l(v)+ml si u∈V2∩V(T)
l(v) en otro caso
P5.- Sean l←l’, construye Gl y ve a P3.3.
Complejidad del algoritmo:
algoritmo O(p4)
Cada vértice de G tiene grado p ⇒
complejidad O(p2).
el paso P1 tiene
En P2, se construye p veces un árbol alternado ⇒ la
complejidad es O(p3).
P3.1 y P3.2 tienen complejidad O(p) si mantenemos la
posición del último vértice no emparejado considerado .
Cada vez que se construye un árbol alternado en P3.3, se
realizan O(p2) operaciones.
Para cada vértice no emparejado x seleccionado en
P3.2, el paso P3.3 se realiza O(p) veces,
Así, P3.3 tiene complejidad O(p4).
P3.3 tiene complejidad O(p4).
Cada vez que volvemos a P3.3 después de la primera,
construimos un árbol alternado (O(p2)) enraizado en x
y, además una de dos:
- o encontramos un camino aumentante
- o se añaden dos vértices al árbol alternado
enraizado en x que teníamos previamente.
Puesto que un árbol alternado enraizado en x que no
contenga ningún camino aumentante tiene, como
máximo, 2p-1 vértices, volvemos al paso P3.3 como
mucho p-1 veces.
El mismo argumento prueba que P4 se realiza O(p2)
veces. Cada vez que se ejecuta P4 se realizan O(p2)
operaciones.
Puesto que P5 se realiza cada vez que se completa P4 y
que la construcción de Gl tiene complejidad O(p2), la
complejidad de P5 es O(p4).
Así, la
complejidad del algoritmo es O(p4)
Emparejamientos máximos en grafos generales
a
a
b
b
c
h
Alg. 1
g
f
d
e
c
g
f
d
e
El algoritmo 1 se pararía y nunca encontraríamos el camino
aumentante P: abcdefgh
El algoritmo 1 no permite la existencia de caminos alternados con
longitudes par unos e impar otros. Por ej., P’: abcg P’’:abcdefg son
ambos caminos a-g alternados de longitud 3 (impar) P’ y 6 (par) P’’.
La contribución más importante del algoritmo se debe a
Edmonds en 1965. Desarrolló el método llamado “la flor
menguante”.
Actualmente
se
han
descrito
diversas
modificaciones a dicho procedimiento. Nuestra descripción sigue
fielmente el trabajo de Pape y Conradt de 1980.
Sea G grafo general con v vértice sin emparejar (soltero)
respecto del emparejamiento M.
Construimos un árbol alternado enraizado en v. (Todos los
caminos desde v son alternados respecto a M en G)
Si u es un vértice soltero adyacente a v, añadir (vu) a M
En otro caso, todos los vértices adyacentes a v están
emparejados.
v en Nivel 0
u1, u2, … , uk vértices adyacentes a v en Nivel 1
Sean uivi œ M para 1§ i § k.
vi en Nivel 2
(Es posible vi = uj, entonces uiuj œ M y
Supongamos que estamos en el Nivel m
vj = ui)
(m par)
Para cada vértice x en el nivel m examinamos los vértices y
adyacentes con x en G.
Si xy ΠM o y = v no hacer nada.
Si xy œ M, y π v,
Si y es no emparejado (soltero) entonces el camino
alternado v-x seguido de xy es un camino aumentante
respecto a M.
Si y está emparejado yz œ M hay tres casos:
1.- y pertenece a algún nivel impar del árbol
alternado
( no extender el árbol yz ya está explorado)
2.- y pertenece a algún nivel par del árbol alternado
(determinar si y es antecesor de x, si lo es no hacer
nada y si no lo es, entonces añadir xy, yz, y en
el nivel m + 1, z en el nivel m + 2
3.- y no pertenece al árbol alternado, entonces añadir
xy, yz, y en el nivel m + 1, z en el nivel m + 2.
La construcción del árbol alternante termina por:
9se encuentra un camino aumentante
9después de un nivel m par, no se puede añadir niveles
según las reglas anteriores.
Ejemplo.
c
d
a
a no emparejado respecto a M.
Construimos un árbol alternado
enraizado en a. Al finalizar se verá
que existe un camino aumentante a-z.
b
u
z
y
x
v
w
En el nivel 0 se sitúa a. En el nivel 1 sus
adyacentes, b,c,d y se unen con a. Como los tres
están emparejados, se llevan sus parejas al nivel
2 y se unen con los vértices del nivel 1. b
Obsérvese que los vértices c y d están
emparejados entre sí, así que aparecen en los
niveles 1 y 2.
Como c y d no tienen más adyacentes
pero el vértice u es adyacente a y, v, w y
(además de b que es antecesor), se añaden y,
v, w al nivel 3 del árbol y sus parejas x, w, v
al nivel 4, incluyendo las aristas de M que los x
unen. De nuevo se repiten vértices de los
niveles 3 y 4 (luego aristas)
Como los adyacentes a x son y, w y ambos están
en un nivel impar, no se hace nada. Lo mismo
ocurre con v. Adyacentes a w son x y v, wx∉M y x
está emparejado, xy∈M, x está en nivel par, x no
antecesor de w, añadir wx, xy, x en el nivel 5 e y
en el nivel 6. Con v, wv ∈M, no se hace nada.
a
c
d nivel 1
d
u
nivel 0
c nivel 2
w v
nivel 3
v w
nivel 4
x
nivel 5
y
nivel 6
z
nivel 7
Sea ahora el vértice y del nivel 6, y es adyacente a u, x, z, tanto u como x
son antecesores suyos, sólo resta el vértice z, yz ∉M y z no emparejado,
hemos encontrado el camino aumentante.
M el emparejamiento
Q cola cuyos vértices pertenecen a un nivel par, y sus aristas
incidentes aun no han sido estudiadas.
Listas de tamaño p:
PAREJA describe el emparejamiento actual.
PAREJA(vi)=vj si (vivj) œ M ;
PAREJA(vi)=0 si vi es SOLTERO
NIVEL con valor lógico verdadero T o falso F
NIVEL(w) = F si w es la raíz o está en nivel impar
NIVEL(w) = T en otro caso
Inicialmente, NIVEL (v) =F si v raíz ,
NIVEL (w) = T " w œ V(G) w ∫ v
ABUELO para determinar si un vértice es antecesor
ABUELO(w) = u si w es de nivel par y existe un camino
uvw en el árbol tal que vw œ M.
Variable SOLTERO , número de vértices sin emparejar.
Inicialmente SOLTERO = p - 2|M|
Modo de actuar para extender el árbol alternado:
Eliminar x de Q
Considerar todas las aristas incidentes xy con
NIVEL(y) = T
Si y no emparejado, añadir.
Si y emparejado,
si es antecesor de x ABUELO(x) =y, seguir
si no es antecesor: sea PAREJA(y)=z,
añadir y, z, aristas xy, yz al árbol,
añadir z a Q,
ABUELO(z) =x, NIVEL(y)=F
Algoritmo 3 (Emparejamiento máximo en un (p,q) grafo G)
[Sea un (p,q) grafo G, con V(G)={v1, v2, ... , vp}, dado un emparejamiento M (puede ser «)
definido por el vector PAREJA(vi)=vj si (vivj) œ M; PAREJA(vi)=0 si vi es SOLTERO]
P1.- SOLTERO ≠ p - 2 |M| ,
i≠1
P2.- Si SOLTERO < 2, parar, M emparejamiento máximo. Fin
En otro caso, continuar.
P3.- Si i < p entonces continuar;
Si no, retorna M emparejamiento máximo. Fin.
P4.- Si PAREJA( vi) ∫ 0, entonces i≠ i + 1, ir a P3;
En otro caso, vi raíz del árbol alternado, continuar.
P5.- [Inicializar NIVEL y Q para la nueva raíz vi]
NIVEL(vj) ≠ T para 1§ j § p , j ∫ i
NIVEL(vi) ≠ F, Q ≠ {vi}
[P6-P9 construye un árbol alternante con raíz vi. Si se encuentra camino alternante se
mejora el emparejamiento]
P6.- Si Q = «, i ≠ i + 1 , volver P3;
en otro caso, Q ≠ Q – {x}
P7.- [Determina si se expande el árbol alternado en x]
7.1.- Sea N(x) = {w1, w2, ... , wk}, j ≠ 1
7.2.- Si j > k, volver P6; en otro caso, y ≠ wj
7.3.- Si NIVEL(y) = F, j ≠ j + 1, volver P7.2;
en otro caso NIVEL(y) = T continuar.
7.4.- Si PAREJA(y) = 0 ir a P8; en otro caso, ir a P9.
P8.- [Mejora del emparejamiento
y actualización de PAREJA]
8.1.- PAREJA(y) ≠ x
8.2.- SIGUIENTE ≠ PAREJA(x)
8.3.- PAREJA(x) ≠ y
8.4.- Si SIGUIENTE = 0, ir P8.7; si no, continuar
8.5.- x ≠ ABUELO(x) , PAREJA( SIGUIENTE) ≠ x
8.6.- y ≠ SIGUIENTE volver P8.2
8.7.- SOLTERO ≠ SOLTERO -2, i ≠ i + 1 , ir P2
P9.- [Determinar si y es antecesor de x, para extender o no el árbol alternado.]
9.1.- Si x = vi, ir P9.5; si no continuar.
9.2.- u ≠ ABUELO(x)
9.3.- Si u = y, j ≠ j + 1 , volver P7.2; si no continuar
9.4.- Si u ∫ vi, u ≠ ABUELO(u) ir P9.3;
En otro caso continuar, y no es antecesor de x
9.5.- NIVEL(y) ≠ F, Q ≠ Q » {PAREJA(y)}
9.6.- ABUELO(PAREJA(y)) ≠ x
9.7.- j ≠ j + 1 , volver P7.2
Ejemplo:
1
4
2
3
10
5
6
PAREJA:
7
2
3
4
5
6
7
8
9
10 11
3 5 1 0 2 8 9 6 7 0 0
11
8
1
9
SOLTERO=3
Primer vértice no emparejado, 4.
Construimos el árbol alternado.
(a)
1
4
NIVEL
2
Q
1
4
5
6
7
8
9
10 11
T F T F T T T T T T T
4
4 5
4
2
3
3
ABUELO
5
(b)
2
5
1
NIVEL
2
3
4
5
6
7
8
9
T F F F T F F T T T T
ABUELO
6
7
8
9
5
Q
10 11
4
4 5 1 8 9
5 5
(c)
4
2
1
NIVEL
2
3
4
5
6
7
8
9
T F F F T F F F F T T
5
3
1
9
7
6
7
8
9
ABUELO
5
4 9 8 5 5
8
6
Q
10 11
4 5 1 8 9 7 6
(d)
4
1
2
NIVEL
2
3
4
5
6
7
8
9
10 11
T F F F F F F F F F T
5
3
1
6
7
8
9
ABUELO
5 7
4 9 8 5 5
8
9
Q=«
7
6
10
El vértice 5 es adyacente a 7, no
se añade pues 5 es antecesor de 7.
11
1
PAREJA:
SOLTERO=1
2
3
4
5
6
7
8
9
10 11
3 4 1 2 7 10 5 9 8 6 0
Complejidad: O(p2q)
La complejidad total de los pasos 2, 3, 4 es O(p).
Realizamos el paso 5 cuando un vértice es considerado la
raíz de un árbol alternado. Como el paso 5 sólo actualiza las p
entradas de la lista NIVEL y actualiza la cola Q, requiere
complejidad O(p). Como cada vértice de G es a lo más una vez raíz
de un árbol alternado, el paso 5 requiere O(p2).
Pasos 6-9. Cuando un vértice v es seleccionado para ser raíz
de un árbol alternado, cada vértice de G aparece a lo más una vez
en la cola para el árbol alternado. Supongamos que z se añade a la
cola durante la construcción del árbol. El vértice v es soltero
respecto de M. Puesto que v aparece sólo una vez en Q (como
primer elemento), podemos suponer z≠v. Entonces, existe un vértice
x de G tal que el camino x,y,z pertenece al árbol alternado. Además,
esta aparición de z en el árbol alternado es en un nivel par, pues y
aparece en un nivel impar del árbol a lo más una vez, de donde sigue
que z aparece a lo más una vez en la cola Q.
Para cada vértice x que es borrado de la cola en el paso 6,
cada vértice y adyacente a x es examinado a lo más una vez en el
paso 7. Chequeamos los valores de NIVEL(y) para como mucho δ(x)
vértices y adyacentes a x.
Si NIVEL(y)=T entonces se chequea el paso 7.4 y es
realizado exactamente uno de los pasos 8 ó 9. El paso 8 cambia las
aristas de un camino aumentante y aumenta el emparejamiento
inicial. Como cada camino de G contiene a lo más p-1 aristas, el paso
8 tiene complejidad O(p). El paso 9 también tiene complejidad
O(p), la mayor parte del tiempo consumido es para determinar si y
aparece en el camino v-x del árbol alternado. Así, el número de
veces que se realiza el paso 8 o el 9 para cada raíz de un árbol
alternado es a lo más ∑δ(x)=2q.
Así, el tiempo estimado en los pasos 7-9 para una raíz
fijada de un árbol alternado es O(pq). Como cada vértice es a lo
más una vez raíz, la complejidad del algoritmo es O(p2q).