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