Como determinar com eficiência se uma determinada escada é válida?

28

No meu clube de squash local, há uma escada que funciona da seguinte maneira.

  1. No início da temporada, construímos uma tabela com o nome de cada membro do clube em uma linha separada.
  2. Em seguida, escrevemos o número de jogos vencidos e o número de jogos disputados ao lado de cada nome (na forma: vitórias / jogos).

Assim, no início da temporada, a tabela fica assim:

Carol 0/0
Billy 0/0
Alice 0/0
Daffyd 0/0

Quaisquer dois jogadores podem jogar uma partida, com um jogador vencendo. Se o jogador mais próximo da parte inferior da mesa vencer, a posição dos jogadores será alterada. Em seguida, repetimos a etapa 2., atualizando o número de vitórias e jogos ao lado de cada jogador. Por exemplo, se Alice bate em Billy, temos

Carol 0/0
Alice 1/1
Billy 0/1
Daffyd 0/0

Essas partidas acontecem ao longo da temporada e, eventualmente, resultam na lista de jogadores em ordem aproximada de força.

Infelizmente, a atualização acontece de maneira aleatória, para que erros sejam cometidos. Abaixo estão alguns exemplos de tabelas inválidas, ou seja, tabelas que não puderam ser produzidas seguindo corretamente as etapas acima para alguma ordem inicial (esquecemos a ordem que usamos no início da temporada) e a sequência de correspondências e resultados:

Alice 0/1
Billy 1/1
Carol 0/1
Daffyd 0/0

Alice 2/3
Billy 0/1
Carol 0/0
Daffyd 0/0

Alice 1/1
Billy 0/2
Carol 2/2
Daffyd 0/1

Dada uma tabela, como podemos determinar com eficiência se é válida? Poderíamos começar observando o seguinte:

  1. A ordem dos nomes não importa, pois esquecemos a ordem inicial original.

  2. O número total de vitórias deve ser metade da soma do número de jogos disputados. (Isso mostra que o primeiro exemplo acima é inválido.)

  3. Suponha que a tabela seja válida. Depois, há um multigráfico - um gráfico que admite várias arestas, mas sem loops - com cada vértice correspondente a um jogador e cada aresta a uma partida disputada. Em seguida, o número total de jogos disputados por cada jogador corresponde ao grau do vértice do jogador no gráfico múltiplo. Portanto, se não houver multigráficos com os graus de vértice apropriados, a tabela deverá ser inválida. Por exemplo, não há multigraph com um vértice de grau um e um de grau três, portanto, o segundo exemplo é inválido. [Podemos verificar com eficiência a existência de um tal multigráfico.]

Portanto, temos duas verificações que podemos aplicar para começar, mas isso ainda permite tabelas inválidas, como o terceiro exemplo. Para ver que esta tabela é inválida, podemos trabalhar para trás, esgotando todas as formas possíveis de surgir a tabela.

Eu queria saber se alguém pode pensar em um algoritmo de tempo polinomial (no número de jogadores e no número de jogos) resolvendo esse problema de decisão?

Ben
fonte
2
Talvez exista um teorema do tipo Havel Hakimi para multigrafias dirigidas ...
Aryabhata
Por que o terceiro exemplo não é possível? E se Alice vencesse Bob, Carol vencesse Bob e Carol vencesse Daffyd. Então Alice venceu 1 em 1 jogos, Bob venceu 0 de 2 jogos, Carol venceu 2 de 2 jogos e Daffyd venceu 0 de 1 jogos?
utdiscant
utdiscant: Após cada jogo, se o jogador mais baixo vencer, os jogadores serão trocados. Para mostrar que o terceiro exemplo é possível, você precisaria fornecer uma configuração inicial e uma sequência de jogos - ou seja, com uma ordem - resultando na tabela fornecida.
Ben
aryabhata: Obrigado - sim, isso seria um passo útil. Infelizmente, parece bastante difícil ...
Ben
1
uma sugestão para estudar / resolver isso. especifique-o como um problema SAT. então tente muitos casos aleatórios. veja se algum é difícil para um solucionador padrão. se não, talvez um restrito subconjunto em P.
vzn

Respostas:

1

Esta não é uma resposta completa. Dou uma declaração mais simples do problema e algumas observações.

[n]

vulabel(v)<label(u)

Gne

NPG

Observação

label(v)vv

Eu acho que deveria ser possível combinar essa observação com Havel-Hakimi para dar um algoritmo de tempo polinomial.

Kaveh
fonte
Oi. Obrigado. Você se importaria de afirmar sua observação novamente formulada no contexto de escadas? Acho que há um contra-exemplo para um gráfico da ordem 3, mas talvez eu tenha interpretado mal.
Ben
@ Ben, acho que seria o seguinte: você pode presumir que a última pessoa na escada jogou todos os jogos que ganhou no início do torneio e jogou todos os jogos que perdeu no final do torneio . Deixe-me saber se há um contra-exemplo para isso, eu não verifiquei isso com cuidado.
Kaveh
Infelizmente, existem escadas como esta: A 2/2 B 0/1 C 0/1
Ben
@ Ben, acho que o exemplo é consistente com o que escrevi, ou seja, não é um contra-exemplo para a observação.
Kaveh
A escada é válida. Vamos supor que o último jogo jogado foi uma perda para C. Então, antes do último jogo, a escada deve ter a seguinte aparência: C 0/0 B 0/1 A 1/1, mas essa escada é inválida. Portanto, não podemos supor que o último jogo tenha sido uma perda para C. #
22713 Ben Ben
0

Não resolvi o problema, mas tenho resultados parciais, cujas declarações são dadas abaixo. Vou escrever as provas, se alguém estiver interessado.

Proposição . Suponha que a escada (1) contenha mais de um jogador (2) contenha um número igual de vitórias e derrotas; e (3) é tal que cada jogador ganhou pelo menos um jogo e perdeu pelo menos um jogo. Então a escada é válida.

WiiLiiRi

Li=0

Wik:Rk>Ri,Wk>0(Lk1)++k:Rk<RiLk,
LiWi=0
Ben
fonte