Edit page

Algoritmos de Gale-Shapley

Definições

Grafo k-partido

Um grafo diz-se kk-partido (kN2)(k \in \N_2) se existe uma partição do conjunto dos seus vértices em kk conjuntos, nenhum deles contendo vértices adjacentes.
Se k=2k=2 pode-se chamar bipartido, se k=3k=3 tripartido e para k>3k> 3 multipartido.

Exemplo

Grafo Tripartido

É um grafo tripartido. Repare-se que existe uma partição em 33 conjuntos (azuis, verdes e vermelhos), e em cada conjunto não há vértices adjacentes.

Algoritmo da Estabilidade

Relacionamento

Sejam HH e MM dois conjuntos finitos equipolentes (com o mesmo tamanho), que representam o conjunto de Rapazes e Raparigas, respetivamente. Seja L:HM\operatorname{L}: H \rightarrow M uma bijeção, representa um relacionamento entre rapazes e raparigas que consiste numa lista de pares (h,m)(h,m), designada Lista de Relacionamentos.
Como é uma bijeção, também podemos ter a relação inversa W:MH\operatorname{W}: M \rightarrow H.

Bloqueio

Usando o exemplo do Relacionamento entre Rapazes e Raparigas, diz-se que o par (h,m)(h,m), hM,mMh \in M, m \in M, é um Bloqueio na lista de relacionamentos, se não pertence à lista de relacionamentos, mas hh preferia estar com mm do que com L(h)\operatorname{L}(h) e mm preferia estar com hh do que com W(m)\operatorname{W}(m).

Uma Lista de Relacionamentos diz-se Estável se não existirem pares de bloqueio em L\operatorname{L}.

Lista de Preferências

Usando mais uma vez o exemplo do Relacionamento entre Rapazes e Raparigas, cada Rapaz e cada Rapariga poderá ter uma Lista de Preferências onde apresenta os membros do conjunto oposto que prefere por ordem.

Exemplo

Neste exemplo vamos trabalhar com o Relacionamento entre Rapazes e Raparigas, onde temos 44 Raparigas e 44 Rapazes.

A seguinte tabela é um exemplo de Lista de Preferências

Rapazes12>4>1>323>1>4>232>3>1>444>1>3>2Raparigas12>1>4>324>3>1>231>4>3>242>1>4>3\begin{array}{|} \text{Rapazes} & & & & & & & &\\ 1&\quad &2 &> &4 &> &1 &> &3\\ 2&\quad &3 &> &1 &> &4 &> &2\\ 3&\quad &2 &> &3 &> &1 &> &4\\ 4&\quad &4 &> &1 &> &3 &> &2\\ \hline \text{Raparigas} & & & & & & & &\\ 1&\quad &2 &> &1 &> &4 &> &3\\ 2&\quad &4 &> &3 &> &1 &> &2\\ 3&\quad &1 &> &4 &> &3 &> &2\\ 4&\quad &2 &> &1 &> &4 &> &3\\ \end{array}

Exemplo de Lista de Relacionamentos Estável:

  • {(1,4),(2,1),(3,2),(4,3)}\{(1,4),(2,1),(3,2),(4,3)\}

Exemplos de Listas de Relacionamentos Instáveis:

  • {(1,1),(2,3),(3,2),(4,4)}\{(1,1),(2,3),(3,2),(4,4)\}
    Esta lista tem um Bloqueio (1,4)(1,4). Repare-se que o Rapaz 11 prefere a Rapariga 44 à Rapariga 11 (o seu par na lista) e a Rapariga 44 prefere o Rapaz 11 ao Rapaz 44 (o seu par na lista).

  • {(1,1),(2,2),(3,4),(4,3)}\{(1,1),(2,2),(3,4),(4,3)\}
    Esta lista tem 66 Bloqueios: (1,2),(1,4),(2,1),(2,4),(3,2),(4,4)(1,2),(1,4),(2,1),(2,4),(3,2),(4,4)

Algoritmo da Estabilidade

Serve para verificar se uma Lista de Relacionamentos é estável ou instável.

O Algoritmo é descrito pelo seguinte pseudo-código.

Estabilidade Pseudo

Algoritmo de Gale-Shapley

Descrição Do Algoritmo

Informal

  1. Cada Rapaz e Rapariga ou estão comprometidos ou livres
  2. Cada Rapariga, assim que fica comprometida, continuará nesse estado durante o resto da execução do algoritmo. Poderá, eventualmente, trocar de par
  3. Todo o Rapaz que pede em namoro mais do que uma vez, fica com namoradas cada vez menos desejáveis
  4. As Raparigas ficam tanto mais favorecidas quanto maior for o número de trocas de namorado
  5. Quando um Rapariga livre recebe uma proposta, aceita e fica comprometida
  6. Quando uma Rapariga comprometida recebe nova proposta, compara o novo pretende com o namorado e escolhe ficar com o que lhe favorece mais
  7. Cada Rapaz pede namora às Raparigas seguindo a sua ordem de preferência
  8. Assim que um Rapaz é rejeitado, propõe-se imediatamente à Rapariga seguinte na sua Lista de Preferências.

Pseudo-Código

Gale-Shapley Pseudo

NOTA

Não importa qual a ordem das propostas dos Rapazes, o Algoritmo acabará sempre na mesma Lista


Correção Do Algoritmo de Gale-Shapley

Para toda a instância do problema do relacionamento estável, o algoritmo Gale-Shapley termina com uma lista de relacionamentos estáveis.

Demonstração
  1. Provar que cada Rapaz está associado a uma Rapariga

Como cada Rapariga aceita sempre uma proposta se estiver livre, se um Rapaz pedir namoro à última rapariga da sua Lista de Preferências, significa que as outras Raparigas têm par (namorado), a última só o rejeitará se também tiver namorado.
Isso é impossível, pois só se confirmaria se o número de Rapazes fosse maior que o número de Raparigas, o que nunca se verifica.

Se um Rapaz chegar à última Rapariga ela aceita-o sempre.

  1. Provar que o algoritmo termina.

Como nenhum rapaz se pode propor 22 vezes à mesma Rapariga, o número máximo de propostas que poderá haver são r2r^2, onde r=#Rapazes=#Raparigasr = \#Rapazes = \#Raparigas. Como é um número finito, o Algoritmo tem fim.

  1. Provar que no final a Lista é Estável

Se o Rapaz acabou por não ficar relacionado com uma rapariga mm, que preferia em relação à com quem ficou L(h)\operatorname{L}(h), então é porque mm o rejeitou.
Se mm o rejeitou foi porque tinha recebido uma proposta de um pretendente que preferia, não havendo assim Bloqueio.

Deste modo, será impossível encontrar Bloqueios na Lista final que resulta de aplicar o Algoritmo.

QED

Exemplos da Emulação do Algoritmo

No teste só poderemos usar 22 Maneiras, ambas exemplificadas abaixo.

Maneira 1
Rapazes13>2>1>423>2>4>133>4>1>243>2>1>4Raparigas11>4>3>222>3>1>434>3>1>242>3>4>1\begin{array}{|} \text{Rapazes} & & & & & & & &\\ 1&\quad &3 &> &2 &> &1 &> &4\\ 2&\quad &3 &> &2 &> &4 &> &1\\ 3&\quad &3 &> &4 &> &1 &> &2\\ 4&\quad &3 &> &2 &> &1 &> &4\\ \hline \text{Raparigas} & & & & & & & &\\ 1&\quad &1 &> &4 &> &3 &> &2\\ 2&\quad &2 &> &3 &> &1 &> &4\\ 3&\quad &4 &> &3 &> &1 &> &2\\ 4&\quad &2 &> &3 &> &4 &> &1\\ \end{array}

Resolução:

  1. Rapaz 11 propõe-se à Rapariga 33; ela aceita
  2. Rapaz 22 propõe-se à Rapariga 33; ela rejeita
  3. Rapaz 33 propõe-se à Rapariga 33; ela aceita e rejeita o Rapaz 11
  4. Rapaz 44 propõe-se à Rapariga 33; ela aceita e rejeita o Rapaz 33
  5. Rapaz 11 propõe-se à Rapariga 22; ela aceita
  6. Rapaz 22 propõe-se à Rapariga 22; ela aceita e rejeita o Rapaz 11
  7. Rapaz 11 propõe-se à Rapariga 11; ela aceita
  8. Rapaz 33 propõe-se à Rapariga 44; ela aceita

A Lista de Relacionamentos obtida é {(1,1),(2,2),(3,4),(4,3)}\{(1,1),(2,2),(3,4),(4,3)\} que é estável.

Maneira 2
Rapazes13>2>1>423>2>4>133>4>1>243>2>1>4Raparigas11>4>3>222>3>1>434>3>1>242>3>4>1\begin{array}{|} \text{Rapazes} & & & & & & & &\\ 1&\quad &3 &> &2 &> &1 &> &4\\ 2&\quad &3 &> &2 &> &4 &> &1\\ 3&\quad &3 &> &4 &> &1 &> &2\\ 4&\quad &3 &> &2 &> &1 &> &4\\ \hline \text{Raparigas} & & & & & & & &\\ 1&\quad &1 &> &4 &> &3 &> &2\\ 2&\quad &2 &> &3 &> &1 &> &4\\ 3&\quad &4 &> &3 &> &1 &> &2\\ 4&\quad &2 &> &3 &> &4 &> &1\\ \end{array}

Resolução:

(1,3)(2,)(3,)(4,)(1,3)(2,3)(3,)(4,)(1,3)(2,3)(3,3)(4,)(1,3)(2,3)(3,3)(4,3)(1,2)(2,3)(3,3)(4,3)(1,2)(2,2)(3,3)(4,3)(1,1)(2,2)(3,3)(4,3)(1,1)(2,2)(3,4)(4,3)\begin{array}{c} (1,3)&(2,)&(3,)&(4,)\\ (1,3)&(2,\cancel{3})&(3,)&(4,)\\ (1,\cancel{3})&(2,\cancel{3})&(3,3)&(4,)\\ (1,\cancel{3})&(2,\cancel{3})&(3,\cancel{3})&(4,3)\\ (1,2)&(2,\cancel{3})&(3,\cancel{3})&(4,3)\\ (1,\cancel{2})&(2,2)&(3,\cancel{3})&(4,3)\\ (1,1)&(2,2)&(3,\cancel{3})&(4,3)\\ (1,1)&(2,2)&(3,4)&(4,3) \end{array}

Consequências

Teorema 1

Todas as possíveis execuções do algoritmo de Gale-Shapley (tendo os rapazes como proponentes *) produzem o mesmo relacionamento estável, e, neste relacionamento estável, cada rapaz obtém a melhor das parceiras que pode ter em qualquer relacionamento estável.

* são os Rapazes que se propõem às raparigas, como descrito inicialmente no Algoritmo. Se fossem as Raparigas as proponentes, os papeis invertiam-se.

Demonstração

Sendo um parceiro estável de h0/m0h_0/m_0, um m1/h1m_1/h_1 par com h0/m0h_0/m_0 numa dada Lista Estável.

Supondo que uma certa execução EE do Algoritmo de Gale-Shapley produz um Relacionamento estável R0R_0 que inclui o par (h,m)(h,m).
Imaginemos que R0R_0 não é o Relacionamento estável que mais beneficia hh, porque existe outro Relacionamento estável R1R0R_1 \neq R_0, onde hh está relacionado com mm', que prefere a mm.
Pelo Algoritmo, conclui-se que, numa dada iteração de EE, mm' teve de rejeitar hh (Relembrar que os Rapazes vão se propondo às Raparigas segundo a sua preferência).
Supondo que essa rejeição (de mm' face a hh), foi a primeira vez em que uma rapariga rejeito um parceiro estável, pois mm' preferia outro Rapaz hh' a hh.

Se nenhuma rapariga rejeitara um parceiro estável antes, então hh' não tem nenhuma parceira estável que prefira a mm'.
Então, como em R1R_1 temos o par (h,m)(h,m') e hh' está relacionado com uma Rapariga que não prefere, em relação a mm', é óbvio que o par (m,h)(m',h') é um bloqueio de R1R_1. Assim, este Relacionamento não é estável.

Conclui-se que, qualquer Relacionamento, onde um Rapaz hh fica com uma Rapariga mm' que prefere em relação ao seu par mm que resultou da Aplicação do Algoritmo de Gale-Shapley, é Instável.

QED

Teorema 2

No relacionamento estável optimal para os rapazes, cada rapariga obtém o pior parceiro que pode obter em qualquer relacionamento estável.

NOTA

Relacionamento Estável Otimal para Rapazes/Raparigas:
Relacionamento Estável, onde os Rapazes/Raparigas obtêm o melhor parceiro possível.

Demonstração

Tentando provar por absurdo.

Vamos supor que o Teorema é Falso e que, sendo R0R_0 o relacionamento estável otimal para os Rapazes, que resulta do Algoritmo de Gale-Shapley, existe outro relacionamento estável R1R_1, onde uma dada Rapariga mm fica com um rapaz h1h_1, que prefere menos em relação ao rapaz h0h_0 com que ficou em R0R_0.

Como R0R_0 é otimal para os Rapazes , em R1R_1 h0h_0 ficará com uma rapariga que prefere menos, em relação a mm. Para além disso, mm também ficou com um Rapaz h1h_1 que prefere menos em relação ao h0h_0.
Conclui-se que (m,h0)(m,h_0) é um Bloqueio de R1R_1, logo R1R_1 não é estável.

QED