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.


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′,2n−y′), (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≡±x′−x0(mod2m),t≡±y′−y0(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

±x′−x0≡±y′−y0(modg).

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

  • x′−x0≡y′−y0(modg)
  • −x′−x0≡y′−y0(modg)
  • x′−x0≡−y′−y0(modg)
  • −x′−x0≡−y′−y0(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′).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.