os macthings

Propaganda
Matchings
No nosso dia-a-dia existem muitas situações que podem ser representadas por um
conjunto de pontos e linhas que ligam aos pares esses pontos. Por exemplo, os pontos poderiam
representar cidades e as linhas as estradas entre pares destas cidades; ou os pontos poderiam
representar pessoas e as linhas a ligação entre pares de pessoas que se conhecem. Ou ainda, outro
exemplo, suponhamos que existem n candidatos para preencher m vagas distintas numa empresa,
mas nem todos têm as competências necessárias para desempenhar qualquer uma das vagas. Esta
situação pode ser representada por grafo bipartido, onde cada aresta liga um candidato a uma
vaga que poderia eventualmente ocupar. A questão agora é a seguinte: é possível empregar cada
candidato de tal maneira que cada um ocupa uma das vagas disponíveis, de acordo com as suas
capacidades? Em teoria de grafos isso é um problema de emparelhamento de um subconjunto de
vértices noutro subconjunto de vértices. Em outras palavras, um emparelhamento é um
subconjunto de arestas onde não existe duas arestas incidentes a um mesmo vértice.
O primeiro estudo relacionado com emparelhamentos em grafos foi efectuado pelo
matemático húngaro D. Konig que, em Abril de 1914, em Paris, no Congresso de Filosofia
Matemática, apresentava uma comunicação onde referia que todo o grafo bipartido regular
admitiria um emparelhamento perfeito. Desde então, têm-se desenvolvido inúmeros resultados
com emparelhamentos em grafos (bipartidos ou não) com muita aplicação quer na própria teoria
de grafos, quer noutras áreas da Matemática.
Dentre todos os problemas já tratados em teoria dos grafos sobre emparelhamentos, optei
por, neste trabalho, abordar a questão da procura de um emparelhamento máximo num grafo
bipartido. Por exemplo, suponhamos que os vértices de um grafo representam as pessoas e as
arestas a possibilidade de duas pessoas se casarem, estamos interessados em responder perguntas
deste tipo: "De que forma podemos realizar o maior número de casamentos, de modo a que as
pessoas casem com uma das pessoas de que gostam?"
Também abordarei o problema da procura de um emparelhamento completo. Neste exemplo dos
casamentos significa emparelhar as raparigas com os rapazes que gostam, de tal modo que todas
se casem.
1
Matchings
•
G = (V , E ) um grafo, em que V representa o conjunto dos vértices de G e E o conjunto das
arestas de G;
•
G = (V , E ) em que V = V1 ∪ V2 é um grafo bipartido;
•
| X | denota o número de elementos em X (cardinalidade);
•
⊕ denota o ou exclusivo (também chamada de diferença simétrica) ente dois conjuntos, ou
seja, se X e Y são dois conjuntos, então X ⊕ Y = ( X ∪ Y ) \ ( X ∩ Y ) = ( X \ Y ) ∪ (Y \ X ) ;
•
Γ(S ) denota a vizinhança de S, isto é, o conjunto de vértices adjacentes;
2
Matchings
Um grafo G é bipartido se o conjunto de vértices V está dividido em dois conjuntos V1 e
V2, de modo que toda a aresta a ∈ E (G ) possui um extremo em V1 e outro em V2, ou seja, não há
arestas a ligar os vértices do mesmo conjunto.
Dado um grafo G = (V , E ) , um emparelhamento (matching) é um subconjunto de
arestas M ⊂ E tal que, quaisquer duas arestas de M não são adjacentes. (*)
Seja M um emparelhamento de G.
Um vértice v diz-se saturado em M (ou emparelhado) se alguma aresta de M é incidente
nesse vértice; caso contrário, v diz-se livre.
Um emparelhamento M de G que sature todos os vértices de G designa-se por
emparelhamento perfeito.
Um grafo bipartido, cuja decomposição dos vértices é V1 ∪ V2 , diz-se completo se e só se
todo o vértice de V1 está emparelhado com um vértice de V2, ou seja, todos os vértices de V1
estão saturados.
(*) Optei por escrever emparelhamento em vez de matching, durante todo o trabalho.
3
Matchings
Um emparelhamento M é máximo se não existe um emparelhamento M´ tal que
M′ > M .
Seja M um emparelhamento de G.
Um caminho alternante (alternating) em G é um caminho cujas arestas estão
alternadamente em E\M e em M .
Um caminho aumentável (augmenting) em G é um caminho alternante, cujos extremos
são livres.
OBS: Quando estiver a considerar dois emparelhamentos diferentes M e M´, para evitar confusões, vou
escrever, por exemplo, M-alternante ou M’-alternante, para denotar caminho alternante em M ou em M´,
respectivamente; o mesmo para caminhos aumentáveis.
Seja S um conjunto constituído por vértices de G.
A vizinhança de S , representada por Γ( S ) , é definida como sendo o conjunto de todos os
vértices de G adjacentes aos vértices de S.
Seja M um emparelhamento do grafo bipartido G e x0 um vértice livre de V1.
Então, o subgrafo H de G é uma árvore alternante, com raiz no vértice x0 se:
i)
H é uma árvore;
ii)
x 0 ∈ V (G ) , isto é, x0 pertence ao conjunto de vértices de H;
iii)
para qualquer vértice v da árvore H o único caminho de H de x0 para v é um
caminho alternante.
4
Matchings
Seja G = (V , E ) , M e M´ emparelhamentos de G.
Então, as componentes conexas de H = (V , E ′) , em que E´é a diferença simétrica entre M
e M´, são de um dos seguintes tipos:
i) ciclo de comprimento par cujas arestas pertencem alternadamente a M e a M´;
ii) caminhos, com arestas pertencentes alternadamente a
M e a M´, e cujos
extremos são vértices que, num dos emparelhamentos, são livres.
O maior grau de um vértice de H é dois, pois, não existe mais do que uma aresta
de M, nem de M´, incidentes a um vértice de H. Isso implicaria que, num dos
emparelhamentos, existisse mais de uma aresta incidente no mesmo vértice, o que
contradiz a definição de emparelhamento. Além disso, se o grau de um vértice de H for 2,
então uma das arestas é proveniente de M e a outra de M´.
Sendo o grau dos vértices menor ou igual a 2, cada componente conexa ou é um
caminho ou é um ciclo. Os ciclos têm comprimento par, porque senão haveria duas arestas
adjacentes provenientes do mesmo emparelhamento. Os caminhos podem ter
comprimento par ou ímpar. Cada caminho tem dois vértices de grau 1, que são os
extremos. Cada vértice extremo tem uma aresta incidente pertencente a um dos
emparelhamentos. Este vértice tem de ser necessariamente livre no outro emparelhamento,
porque senão o vértice não seria extremo, e o caminho prosseguiria.
5
Matchings
Este teorema é de fundamental importância para o desenvolvimento de um algoritmo para
o problema de emparelhamento em grafos bipartidos. Permite caracterizar se um dado
emparelhamento é ou não máximo em função da existência de um caminho aumentável entre
vértices livres do grafo.
Vejamos então, o Teorema de Berge que caracteriza um emparelhamento máximo.
!"
de Berge, 1957
Um emparelhamento M em G é máximo se e só se não existir nenhum caminho
aumentável entre dois quaisquer vértices livres.
( )
Vamos supor que existe um caminho aumentável, e seja C o conjunto de arestas
desse caminho. É possível construir um emparelhamento M´ considerando, para além das
arestas de M que não pertencem ao caminho aumentável, todas as arestas de C que não
pertencem a M, isto é,
M ′ = (M \ C ) ∪ (C \ M ) = M ⊕ C . Este emparelhamento M´tem
cardinal maior que M, concretamente
M ′ = M + 1 , e, portanto, M não é um
emparelhamento máximo.
(⇐)
Suponhamos que M é um emparelhamento em G, tal que não admite um caminho
aumentável em G. Queremos mostrar que M é um emparelhamento máximo.
Sejam M´ um emparelhamento máximo qualquer em G e H o subgrafo de G, tal que
H = (V , M ⊕ M ′) , isto é, o conjunto das arestas de H estão em M ou em M´, mas não em ambos.
6
Matchings
Pelo Lema 1, sabemos que as componentes conexas de H podem ser:
i)
ciclos de comprimento par, cujas arestas estão alternadamente em M eM´;
ou
ii)
caminhos cujas arestas estão alternadamente em M e M´e os vértices extremos são
livres num dos emparelhamentos.
Se existir um caminho, definido em ii), cujo comprimento é ímpar, então a origem e a
extremidade desse caminho são ambos livres em M ou ambos livres em M´, então tal caminho
será M-aumentável ou M´-aumentável. Mas, a primeira hipótese não não acontece dado o modo
como M foi definido inicialmente e o segundo também não, uma vez que M´ é um
emparelhamento máximo e portanto, pela primeira parte da prova não tem caminho aumentável.
Deste modo, as componentes do subgrafo H ou são caminhos de comprimento par ou ciclos de
comprimento par e portanto cada uma delas envolve o mesmo número de arestas de M, como de
M´. Assim, M − M ′ = M − M ′ .
Como
M = M −M′ + M ∩M′
e
M′ = M′−M + M ∩M′ ,
pela
propriedade
de
intersecção de conjuntos, dado que M e M´ são subconjuntos do conjunto das arestas E(G). Temse então que, M = M ′ e portanto M é máximo.
A demonstração deste teorema envolve uma técnica que pode ser usada para encontrar um
emparelhamento máximo. Vou, sucintamente, referi-la:
Seja M um emparelhamento qualquer de G. Vou referir-me às arestas de M como as
arestas escuras e às outras arestas de G como as arestas claras (arestas de G/M). Seja C um
caminho alternante em G, logo as arestas de C são alternadamente escuras e claras. Suponhamos
que C é um caminho aumentável e como tal, o vértice inicial e final são livres, portanto a
primeira e a última aresta de C são claras. A sequências das arestas de C são da forma: clara,
escura, clara, ..., escura, clara , portanto o número de arestas de C é ímpar, digamos 2n+1, das
quais m são escuras e m+1 claras.
Qualquer aresta de M, que não esteja em C, não é incidente com qualquer vértice de C
porque o vértice inicial e final de C são livres em M e os outros já estão saturados em M. Por
7
Matchings
conseguinte, considerando M´ como o conjunto formado por todas as arestas escuras que não
estão em C e por todas as arestas claras que estão em C, isto é, M´ é obtido substituindo em C, k
arestas escuras por k+1 arestas claras ( removemos k arestas de M e são substituídas por k+1
arestas que não estão em M). Portanto, M´ é um novo emparelhamento, que contém mais uma
aresta que M.
Este procedimento, revela claramente que podemos estender um emparelhamento M se
existir um caminho aumentável.
!
O Teorema de Berge fornece um algoritmo para obter um emparelhamento máximo. Tal
como foi referido na técnica descrita a ideia é procurar caminhos aumentáveis, a partir de vértices
livres.
O algoritmo de emparelhamento máximo para grafos bipartidos é apresentado
seguidamente, de uma forma condensada. A operação de construção do novo emparelhamento
pode ser expresso como a diferença simétrica entre o emparelhamento anterior e o caminho
aumentável C.
Algoritmo
(
Input: grafo bipartido G = V1 ∪ V2 , E
)
Output: emparelhamento máximo M
begin
emparelhamento válido M
while existe caminho aumentável C do
M:= M ⊕ C
end;
8
Matchings
Em cada iteração é feita uma busca, a partir dos vértices livres de V1 que estão em M, à
procura de um caminho aumentável. Se tal caminho C for encontrado, pelo Teorema de Berge
sabemos que M não é o emparelhamento máximo. Nesse caso, substitui-se M por M ⊕ C e
vamos procurar, se existir, um outro caminho a partir do novo emparelhamento. Quando
consideramos um novo emparelhamento, aumentamos o número de arestas do emparelhamento,
portanto, o número de vértices livres de V1 e V2 diminui.
A busca pode terminar por dois motivos ou não existem vértices livres em V1 ou não
encontramos vértices livres em V2. E em ambos os casos, não existem mais caminhos
aumentáveis. Portanto, pelo Teorema de Berge, o último emparelhamento obtido é máximo.
Este algoritmo apresentado, descreve como determinar um emparelhamento máximo, mas
ainda fica uma questão por responder “Como encontrar um caminho aumentável (se existir) e
como determiná-lo?”, uma vez que para determinar um emparelhamento máximo é necessário
procurar caminhos aumentáveis a partir de vértices livres.
Responder a esta questão será o próxima etapa neste trabalho.
O processo de determinação de um caminho aumentável, corresponde à construção de
uma árvore de pesquisa, ou seja, de uma árvore alternante cuja raiz é um vértice livre de V1, onde
são integrados sucessivamente vértices, que são por sua vez analisados, até se encontrar um
vértice livre de V2.
"#$%& $
# ' ! () $
&!#( *+# $
Neste algoritmo, os vértices são rotulados como pares e ímpares. Como se trata de um
grafo bipartido, consideramos que os vértices de V1 têm rótulo par e os vértices V2 têm rótulo
ímpar. Atribui-se o nível 0 ao vértice livre, que constitui a raiz da árvore. Os vértices de V2
aparecem a um nível de profundidade ímpar e os vértices de V1 a um nível de profundidade par.
9
Matchings
Inicia-se a pesquisa de caminhos aumentáveis a partir de vértices livres em V1,
procurando encontrar um vértice livre de V2. Se tal acontecer é detectada a existência de um
caminho aumentável.
Por outro lado, os vértices de V2 encontrados que não sejam livres, estão necessariamente
emparelhados com vértices de V1. Assim, no processo de pesquisa, quando se encontra um
vértice de V2 que não seja livre, atribui-se um rótulo ímpar a esse vértice e, simultaneamente, um
rótulo par ao vértice de V1 que com ele está emparelhado.
O algoritmo mantém uma lista de vértices pares já rotulados, mas ainda não examinados,
todos pertencentes a V1. Se esta lista ficar vazia sem ter sido encontrado nenhum vértice livre,
então não existe nenhum caminho aumentável a partir do vértice livre escolhido.
Se a repetição da mesma pesquisa para os restantes vértices livres de V1 não produzir
nenhum caminho aumentável, então o emparelhamento em questão é máximo.
Seguidamente, vou apresentar um algoritmo de pesquisa para determinar se existe algum
caminho aumentável.
Algoritmo
(
Input: Grafo bipartido G = V1 ∪ V2 , E
)
Emparelhamento M definido pelo vector par ( ) , isto é,
∀j ∈ V 2 ,
par ( j ) =
i , se j emparelhado com i
0 , se j livre
Output: Existe ou não caminho aumentável
10
Matchings
begin
apagar todos os rótulos;
v 0 ← vértice livre de V1;
R(v 0 ) ← (−, P ) ;
{ }
X ← v0
( X é o conjunto de vértices rotulados e não examinados)
while X ≠ Ο do
begin
seleccionar um vértice i ∈ X ;
X ← X \ {}
i ;
for all j ∈ Γ(i ) não rotulados do
(Examinar os vértices da
vizinhança de i)
begin
R( j ) ← (i, I ) ;
if j livre then
return caminho aumentável
else
R( par ( j ) ) ← ( j , P ) ;
X ← X ∪ {par ( j )};
end;
end;
return não existe caminho aumentável;
end.
#
$
A figura ao lado apresenta um grafo bipartido, sendo
{
}
{
}
V1= v1 , v 2 , v 3 , v 4 , v5 e V2= v 6 , v 7 , v8 , v 9 , v10 . As arestas
sombreadas representam o emparelhamento definido. E
pretende-se encontrar, se existir, um caminho aumentável.
11
Matchings
A pesquisa de caminhos aumentáveis, vai começar num vértice livre de V1, por exemplo,
em v 4 . Este vértice é rotulado como (−, P ) , significando que não tem precedente e se trata de um
vértice par.
A análise de v 4 consiste em rotular os vértices adjacentes a ele, que são v 6 e v 7 , como
(v , I ) , indicando que são vértices ímpares. Como ambos estes vértices estão emparelhados, os
respectivos pares são rotulados. O vértice v é rotulado como (v , P ) e o vértice v é rotulado
como (v , P ) .
4
1
6
3
7
No fim desta fase, há na lista dois vértices pares, v1 e v3 . De seguida procede-se à análise
de um destes vértices, por exemplo, de v1 . A análise de v1 permite detectar um vértice livre em
V2, o v8 e a existência de um caminho aumentável, v 4 v 6 v1v8 . A árvore de pesquisa resultante é:
O novo emparelhamento (apresentado na figura seguinte), de cardinal 4, tem duas arestas
novas v 4 v 6 e v1v8 . A aresta que não faz parte do caminho aumentável, v3 v 7 , mantém-se no novo
emparelhamento.
12
Matchings
De seguida analisa-se o vértice v5 e detecta-se um caminho aumentável até ao vértice v10 ,
obtendo-se, assim, um emparelhamento de cardinal 5, que é um emparelhamento máximo.
Apresentado nas figuras seguintes:
(emparelhamento
máximo)
13
Matchings
)
O problema descrito na introdução, dos n candidatos para preencher m vagas existentes
numa empresa, é um exemplo de um problema de designação de tarefas. Neste tipo de problema
procuram-se condições para a existência de um emparelhamento completo. Para o resolver,
surgiram alguns resultados que apresentavam condições suficientes, mas não necessárias ou
condições necessárias, mas não suficientes para determinar tal emparelhamento. (referidos a
seguir).
Dado um emparelhamento M de grafo bipartido G, cujo conjunto dos vértices é dado por
V1 ∪ V2 , uma condição para esse emparelhamento ser completo, é que o número de vértices de
V2 seja igual ou maior ao número de vértices de V1. Mas não é suficiente. No exemplo da figura
1, apesar do número de candidatos ser igual ao número de vagas (5 candidatos e 5 vagas), não é
possível obter tal emparelhamento completo. O seguinte resultado dá uma condição suficiente
mas, não necessária, para que um grafo tenha um emparelhamento completo: “Seja G um
emparelhamento completo num grafo bipartido decomposto em dois subconjuntos V1 e V2 é
possível identificar um emparelhamento completo nesse grafo se existe um valor inteiro k tal que
o grau de todo o vértice de V1 é superior ou igual a k e o grau de todo o vértice de V2 é inferior ou
igual a k”. Mas, como já foi referido, este resultado não dá uma condição necessária, e por isso, o
grafo da figura 2 não respeita a condição do resultado, apesar de permitir um emparelhamento
completo, como se verifica pela figura 3.
C1
V1
C1
V1
C1
V1
C2
V2
C2
V2
C2
V2
C3
V3
C3
V3
C3
V3
C4
V4
C4
V4
C4
V4
C5
V5
C5
V5
C5
V5
Figura 1
Figura 2
Figura 3
14
Matchings
Em 1935, Philip Hall apresenta um teorema (conhecido como o teorema de Hall ou dos
casamentos) onde estabelece uma condição necessária e suficiente para a existência de um
emparelhamento completo.
!"
% de Hall
Seja G um grafo bipartido, cuja decomposição do conjunto de vértices é V = V1 ∪ V2 .
G tem um emparelhamento completo se e só se Γ( S ) ≥ S , para todo o subconjunto S de V1 .
Seja G um grafo bipartido, tal que V (G ) = V1 ∪ V2 .
( )
Num emparelhamento que sature todos os vértices de V1 , ou seja, completo, todos
os vértices de V1 estão emparelhados com vértices diferentes de V2 . Qualquer que seja o
subconjunto S de V1 “seleccionado”, a vizinhança desse conjunto tem cardinal maior ou igual a
S.
(⇐)
(por redução ao absurdo)
Suponhamos que a condição Γ( S ) ≥ S é satisfeita, para todo o subconjunto S de V1 .
Queremos mostrar que G contém um emparelhamento completo. Vamos então, supor que G
não tem tal emparelhamento e obteremos uma contradição.
Seja M um emparelhamento máximo em G, este não satura todos os vértices de V1 ,
dado não existir emparelhamento completo. Portanto, existe, pelo menos, um vértice de V1 que é
livre em M; seja x 0 , tal vértice. Como M é um emparelhamento máximo, pelo Teorema de
Berge, não admite um caminho aumentável em G. Assim, se C é um caminho alternante em G,
15
Matchings
que começa no vértice x 0 e que termina num vértice saturado qualquer de M, então C possui uma
das seguintes forma: x 0 y1 x1 y 2 x 2 ...x n −1 y n x n
(1)
ou x 0 y1 x1 y 2 x 2 ...x n −1 y n (2) , em que x 0 , x1 ,..., x n são vértices de V1 e y1 , y 2 , y 3 ,...
vértices de V2 ; as arestas y1 x1 , y 2 x 2 , ... estão em M e as outras arestas x 0 y1 , x1 y 2 ,... não estão
em M; e em (2), y n é um vértice saturado de M. Além disso, em (2) a aresta x n −1 y n
não está
em M, mas como y n é um vértice saturado podemos estender o caminho. Neste caso, com a
adição da aresta y n x n , em que x n está emparelhado com y n em M, transformando-se o caminho
na forma (1).
Seja R o conjunto formado por todos os vértices de V1 , que podem ser estendidos a partir
de x 0 num caminho alternante em M (excluindo o vértice inicial x 0 , isto é, não consideremos os
caminhos de comprimento 0), ou seja, R representa todos os x1 ,..., x n que podem ocorrer no
caminho C anteriormente referido. Seja T o conjunto formado por todos os vértices de V2 , que
podem ser estendidos a partir de x 0 num caminho alternante em M, isto é , T consiste em todos
os y1 , y 2 , y 3 ,... que podem ocorrer no caminho C anteriormente referido. Tem-se que R = T ,
pois cada um dos possíveis x 0 , x1 ,..., x n está emparelhado com o correspondente y i .
{ }
Consideremos S = R ∪ x 0 . Se um vértice y é adjacente a um vértice de S, pode
acontecer uma das duas situações :
i)
y é adjacente a x 0
ii)
y é adjacente a um dos vértices xi de V1 que ocorre em qualquer caminho
ou
alternante que começa no vértice x 0 .
Na situação i), y ∈ T , assim y é o vértice terminal do caminho alternante de comprimento 1.
Na situação ii), se C é um caminho alternante do vértice x 0 para o vértice xi , então y ou já é um
vértice pertencente ao caminho ou o caminho pode ser estendido adicionando a aresta xi y ,
obtendo-se um caminho alternante maior. E neste caso, também y ∈ T . Isto prova que
Γ( S ) ⊆ T . Além do mais, do modo como T foi construído, tem-se que T ⊆ Γ( S ) . Portanto,
{ }
Γ( S ) = T . Por outro lado, como S = R ∪ x 0 , vem S = R + 1 , mas como já vimos, R = T e,
16
Matchings
portanto, S = R + 1 = T + 1 = Γ( S ) + 1 . Logo, Γ( S ) < S , o que constitui uma contradição.
Mostramos que G admite um emparelhamento completo.
"&'
!
O problema já referido, dos n candidatos e das m vagas, pode ser representado por um
{
}
grafo bipartido, cujo conjunto dos vértices é dado por X ∪ Y , em que X = c1 , c 2 ,..., c n é o
{
conjunto dos candidatos e Y = y1 , y 2 ,..., y m
} é o conjunto das vagas e as arestas ligam os
candidatos ci às vagas y i se e só se têm qualificação para as preencher. Pretendemos obter
resposta à questão: “É possível empregar cada candidato de tal maneira que cada um ocupa uma
das vagas disponíveis, de acordo com as suas qualificações?”. Para obtermos uma resposta a esta
questão, temos de saber se existe um emparelhamento que sature cada vértice de X, ou seja, um
emparelhamento completo.
De seguida, vou apresentar um método que, para qualquer grafo bipartido G, ou encontra
um emparelhamento completo em G, ou se tal emparelhamento não existir , mostra que ele não
existe encontrando um subconjunto S de V1 tal que Γ( S ) < S (porque se tal subconjunto existir,
então pelo teorema de Hall, sabemos que não existe emparelhamento completo).
O Algoritmo que vou apresentar, tem por base esta ideia e o Teorema de Hall, e é um
algoritmo de busca de um emparelhamento completo. Este algoritmo parte de um grafo
bipartido G = (V , E ) , tal que V = V1 ∪ V2 e segue essencialmente os três passos seguintes:
Passo 1: Começar com qualquer emparelhamento M.
17
Matchings
Passo 2: Escolher um vértice livre x 0 de V1, caso exista.
Se não existir, então M é um emparelhamento completo.
Se existir, determinamos um caminho aumentável C com origem em x 0 .
Se tal caminho for encontrado, então obtemos um emparelhamento M´ maior
do que M e como tal, satura mais vértices de V1 do que M. Então, executa-se o
passo 3.
Se não for encontrado tal caminho então pelo processo utilizado na
demonstração de Teorema de Hall, obtém-se um subconjunto S de V1 tal que
Γ( S ) < S e portanto, G não tem um emparelhamento que sature V1.
Passo 3:
Se todos os vértices de V1 são saturados em M´, pará-se e portanto, M´é um
emparelhamento desejado.
Caso contrário, repete-se o passo 2, substituindo M por M´.
Algoritmo (representação esquemática)
Input: um emparelhamento qualquer de um grafo bipartido
Output: emparelhamento completo
Obtém um emparelhamento
Sim
M´ tal que
Não
Não existe emparelhamento
completo.
Existe caminho aumentável
em M?
Existe v0
livre em M?
Não
M′ > M .
Sim
Toma M´=M.
Volta ao inicio.
Pára.
(M é um emparelhamento
completo e máximo)
18
Matchings
Segundo este algoritmo, dado um grafo qualquer bipartido conseguimos determinar se
existe ou não um emparelhamento completo em G. No passo 2, é necessário determinar um
caminho aumentável, se tal existir. Embora, esta questão já tenha sida abordada anteriormente (T.
de Berge), vou agora apresentar um outro algoritmo, embora esteja de alguma forma relacionado
com o que já foi apresentado, distinguindo-se essencialmente na “estrutura da construção”, pois
este segue basicamente os passos da demonstração do Teorema de Hall. Tal algoritmo pode ser
olhado como uma representação algorítmica do Teorema de Hall.
Seja M um emparelhamento de um grafo bipartido G.
Para determinar um caminho aumentável vamos recorrer a uma árvore alternante, cuja
raiz é um vértice livre deV1. O “crescimento” de uma árvore aumentável H com raiz em x 0 é tal
que, em qualquer etapa, acontece uma das duas situações:
i)
todos os vértices de H excepto x 0 são saturados em M;
ii)
H tem um vértice livre diferente de x 0 .
No caso i) na primeira etapa, a árvore consiste apenas no vértice livre x 0 . Consideremos
então, R como o conjunto dos vértices emparelhados na árvore H cuja distância a x 0 é par
e T como o conjunto dos vértices de H cuja distância a x 0 é ímpar. Tem-se então que
R = T . A definição de R e de T é similar à que foi usada para estes conjuntos na
{ }
demonstração do teorema de Hall. Consideremos agora, S = R ∪ x 0 . Então T ⊆ Γ(S ) .
Vamos agora separar i) em dois subcasos: (i1) T = Γ( S ) e ( i2) T ≠ Γ( S ) .
Se acontece (i1), segundo a demonstração do Teorema de Hall, Γ( S ) = T = R = S − 1 ,
logo Γ(S ) < S , concluindo-se que não existe emparelhamento
Se acontece (i2), então existe um vértice y em G que não está em T, mas que é adjacente a
algum vértice x, qualquer em S (ou seja, pertence a Γ(S ) ). Continuando a olhar para o
caso i) pode acontecer um dos dois casos, ou x = x 0 ou x está em R. E nos dois casos a
aresta xy não está em M. Mas, se y é um vértice saturado em M, então a árvore “cresce” ,
19
Matchings
adicionando-se as aresta xy e yz e esta “nova” árvore continua a satisfazer o caso i). Se
pelo contrário, y não é um vértice saturado de M, aumentámos H adicionando o vértice y e
a aresta xy, produzindo uma nova árvore que satisfaz o caso ii).
Se em alguma etapa do crescimento obtivermos uma árvore que satisfaça o caso ii), então
a árvore contém um caminho aumentável de M, que começa num vértice x 0 livre e
termina noutro vértive livre. E assim, podemos substituir o emparelhamento M por outro
maior.
Vou, de seguida, apresentar um algoritmo que reflecte o método que estive a descrever,
seguindo os seguintes quatro passos:
Passo 1: Começar com um emparelhamento M, arbitrário.
Passo 2: Se M satura todos os vértices de V1, pára e M é o emparelhamento desejado.
{ }
Caso contrário, seja x 0 um vértice livre de M em V1 e seja S = x 0 e
T = Ο.
Passo 3:
Se , em G, Γ( S ) = T então Γ( S ) < S , portanto T = S − 1 . Neste caso, pára;
pois pelo Teorema de Hall sabemos que G não tem um emparelhamento
completo.
Caso contrário, escolhe qualquer elemento y em Γ( S ) , que não está em T.
Passo 4:
Se y é um vértice saturado em M, considera yz ∈ M , isto é, z é um vértice
emparelhado com y em M. Neste caso, substitui-se S por S ∪ {z} e T por
T ∪ {z} e retorna ao passo 3.
Caso contrário, y é um vértice livre em M, considera C como caminho
aumentável de x 0 a y e substitui M por um emparelhamento maior que M.
E retorna ao passo 2.
20
Matchings
#,#!" - ' ./
!
Para exemplificar este algoritmo, consideremos o grafo G, dado na figura 1 (página 15)
que representa 5 candidatos que pretendem preencher 5 vagas disponíveis.
C1
V1
C2
V2
C3
V3
C4
V4
C5
V5
Passo 1: Começar com o emparelhamento M, representado pelas arestas sombreadas.
{ }
Passo 2: O vértice c4 é livre em M. Seja S = c 4 e T = O .
{
}
Passo 3: Γ(S ) = v3 , v 4 , v5 , portanto Γ( S ) ≠ T . Escolhe-se v3 que está em Γ( S ) , mas não está
em T.
Passo 4: v3 é um vértice livre em M. Seja C o caminho aumentável de comprimento 1, v4v3.
Substitui-se M por um emparelhamento maior que M. Este novo emparelhamento está
representado na figura seguinte:
C1
V1
C2
V2
C3
V3
C4
V4
C5
V5
E retorna-se ao passo 2.
{ }
Passo 2: O vértice c5 é livre em M. Seja S = c 5 e T = O .
{}
Passo 3: Γ(S ) = v1 , portanto Γ( S ) ≠ T .
21
Matchings
{
}
{}
Passo 4: v1 é um vértice saturado em M. Tem-se S = c5 , c1 e T = v1 .
{
}
Passo 3: Γ(S ) = v1 , v 2 , v 3 ≠ T . Escolhe-se v3 que está em Γ( S ) , mas não está em T.
{
}
{
}
Passo 4: v3 é um vértice saturado em M. Logo, S = c5 , c1 , c 4 e T = v1 , v3 .
{
}
Passo 3: Γ(S ) = v1 , v 2 , v 3 ; v 4 ,v 5 ≠ T . Escolhe-se v5 que está em Γ( S ) , mas não está em T.
Passo 4: v5 é um vértice livre em M. Seja C o caminho aumentável de c5 a v5. Substitui-se M por
um emparelhamento maior que M. Este novo emparelhamento está representado na figura
seguinte:
C1
V1
C2
V2
C3
V3
C4
V4
C5
V5
E retorna ao passo 2.
Passo 2: O emparelhamento M satura todos os vértices de V1, o algoritmo pára. Logo, M é um
emparelhamento completo e portanto, é máximo.
22
Matchings
(!
)
Um treinador tem 6 jogadores disponíveis para formar uma equipa de hóquei em patins.
Além do guarda-redes (GR), é necessário preencher as posições de Defesa e de Ataque, tanto do
lado Direito (DD ou AD) como do lado Esquerdo (DE ou AE). Cada jogador tem aptidões que
lhe permitem jogar, pelo menos, numa posição, de acordo com o grafo apresentado na figura
seguinte.
1
GD
2
4
3
DD
DE
5
6
AD
AE
A questão a que se pretende responder é: Será possível, com estes jogadores, preencher
todas as posições e formar uma equipa?
Neste caso, a resposta é negativa, o que pode ser mostrado com o seguinte argumento: o
único jogador capaz de jogar na direita é o jogador 5, e ele não pode jogar simultaneamente à
defesa e ao ataque.
Do ponto de vista da teoria de grafos, existe um conjunto S = {DD, AD} , de cardinal 2,
cujo vértice adjacente é o 5, isto é, Γ(S ) = {5}, sendo Γ(S ) = 1 . Neste exemplo, S > Γ(S ) .
Logo, segundo o Teorema de Hall conclui-se de imediato que não existe um emparelhamento
perfeito.
Num dos treinos faltou um dos jogadores, o treinador decidiu modificar o esquema de
funcionamento implementado nos treinos anteriores, pedindo aos 5 jogadores para listarem no
máximo três posições que gostariam de ocupar nesse jogo, podendo escolher posições quaisquer.
Na tabela seguinte estão listadas as escolhas feitas (o X significa que o jogador escolheu a
posição indicada). O treinador pretende atribuir as posições de modo atender às preferências de
cada jogador.
23
Matchings
Jogadores
Posição
1
GD
X
DD
X
DE
2
3
X
X
X
AD
4
5
X
X
X
AE
X
X
A tabela apresentada pode ser representada pelo grafo bipartido correspondente:
2
1
GD
4
3
DD
5
AD
DE
AE
Começamos por escolher um emparelhamento qualquer, de seguida verificamos se
existem caminhos aumentáveis. Se existirem, substituímos o emparelhamento dado por outro que
é maior que este. E assim sucessivamente, até que a cada jogador seja atribuída uma posição.
1
GD
2
4
3
DD
DE
5
AD
AE
(Só apresentei uma ideia muito sucinta da resolução do problema, dado ser um exemplo
de aplicação simples dos teoremas apresentados.)
24
Matchings
0
1
"
2
Índices de notações e abreviaturas
Definições e resultados utilizados
3
Teorema e demonstração do teorema
Algoritmo de Emparelhamento Máximo
Pesquisa de Caminhos Aumentáveis
)
42
Teorema e demonstração do teorema
Algoritmo Emparelhamento Completo
Versão algorítmica do Teorema de Hall
Aplicação do teorema (exemplificação do algoritmo)
"
*
5! 0 6
+
25
Matchings
*
+
John M. Harris, Jeffry L.Hirst e Michael J. Mossinghoff; Combinatorics and Graph
Theory; Springer.
John Clark e Derek Allan Holton; A First Look at Graph Theory; World Scientific.
R.Brualdi; Introductory Combinatorics; Prentice-Hall.
R. Diestel; Graph Theory; Springer
Béla Bollobás; Graph Theory
Pearls in Graph Theory- A computative Introduction
A primer of Discrete Mathematics
Alguns sites na internet sobre matchings.
26
Download