Dada uma bola em movimento em uma grade, quais quadrados a bola atinge?

7

Você recebe uma grade mxn. Uma bola adimensional é colocada no centro de um dos quadrados da grade e começa a se mover em uma das quatro direções: nordeste, noroeste, sudeste ou sudoeste. A bola continua se movendo até atingir a borda do tabuleiro; nesse ponto, ela se recupera de acordo com as leis da Física.

Exemplo no qual a bola não atinge todos os quadrados.

Dado m, n, a posição e direção inicial (NE / NW / SE / SW) da bola, é possível determinar se a bola atingirá um quadrado de grade alvo especificado (x0, y0)?

É possível responder à pergunta traçando exaustivamente o movimento da bola, mas existe alguma alternativa mais fácil e eficiente? Qualquer indicação para literatura relacionada também seria muito apreciada.

Mandar Mitra
fonte
4
O método padrão para abordar esses tipos de problemas é estender a grade infinitamente. A bola quicando nas paredes é realmente a mesma que a bola que continua em linha reta para uma versão espelhada da mesma grade.
Tom van der Zanden

Respostas:

6

Rastrear exaustivamente o movimento da bola é o mais fácil de programar, e também não é tão ruim em termos de eficiência. Você deve manter uma tabela de hash de todos os estados da bola que foram vistos anteriormente (onde o estado de uma bola é o quadrado da grade em que se encontra e em qual direção está indo); se você repetir um estado passado, saberá que ele será repetido para sempre e poderá parar de rastrear o movimento. Dessa forma, rastrear o movimento da bola levará no máximoO(mn) tempo no pior dos casos.

Isso pode ser acelerado usando um pouco de álgebra simples para calcular "dado o estado atual, qual é o próximo muro que a bola atingirá?" noO(1) tempo - isso será mais rápido, mas não mais fácil.


Existe uma solução mais elegante e eficiente, baseada na teoria dos números e na técnica de Tom Van der Zanden de estender a grade infinitamente .

Imagine um universo paralelo onde a bola viaja em linha reta em uma grade infinita; como diz Tom, ricochetear nas paredes do nosso universo equivale a continuar em linha reta no universo paralelo. Este é o primeiro insight que usaremos.

Vamos elaborar as implicações desse insight. Em nosso universo, a bola começa com alguma coordenada inicial(x0,y0), movendo NE, e queremos saber se alguma vez alcançará as coordenadas (x,y). O que isso significa no universo infinito? Bem, imagine colocar minas em coordenadas(x,y), (x,2ny), (x,y+2n), (x,4n-y), ..., (2m-x,y), (2m-x,2n-y), ... - em particular, nas coordenadas (2im±x,2jn±y) Onde i,jintervalo sobre todos os números inteiros. Então eu afirmo que a bola acabará por chegar às coordenadas(x,y)em nosso universo, se e somente se a bola eventualmente atingir uma mina no universo paralelo. Portanto, nosso problema se reduz a perguntar: no universo paralelo, a bola atingirá uma mina?

A segunda percepção é que podemos usar a teoria dos números para responder a essa pergunta. Em particular, depois det unidades de tempo, a bola estará na posição (x0+t,y0+t)no universo paralelo. Queremos saber se existem números inteiros.t,i,j de tal modo que x0+t=2im±x e y0+t=2jn±y. Reorganizando essas equações e usando a linguagem da aritmética modular, estamos perguntando se existe um número inteiro.t de modo que ambas as seguintes equações sejam válidas:

t±xx0(mod2m),t±yy0(mod2n).

Agora estamos prontos para aplicar a teoria dos números. Em particular, isso é perfeitamente configurado para aplicar o teorema chinês do restante . Definirg=2gcd(m,n). Então o sistema de equações acima tem uma solução nos números inteiros se e somente se

±xx0±yy0(modg).

Em outras palavras, devemos verificar as quatro condições a seguir:

  • xx0yy0(modg)
  • xx0yy0(modg)
  • xx0yy0(modg)
  • xx0yy0(modg)

Se qualquer uma dessas quatro condições se mantiver, existe uma solução para o sistema de equações acima e, portanto, no universo paralelo, a bola atingirá alguma mina; se nenhuma dessas quatro condições se mantiver, a bola nunca atingirá nenhuma mina. (Essas 4 condições são as condições relevantes se a bola estiver viajando inicialmente NE. As outras direções podem ser manipuladas simetricamente com um conjunto semelhante de 4 condições.)

Reformulando em termos do problema original, obtemos uma solução para o problema original que é fácil de implementar e é executada em O(1)Tempo. Computamosg=2gcd(m,n)e verifique as quatro condições na lista de marcadores acima. Se alguma das quatro condições persistir, a resposta é sim: a bola acabará por chegar ao ponto(x,y). Se nenhuma das quatro condições se mantiver, a resposta é não: a bola nunca chegará ao ponto(x,y).

DW
fonte