Algoritmo para perseguir un objetivo en movimiento.

20

Supongamos que tenemos un cuadro negro f que podemos consultar y restablecer. Cuando reiniciamos f , el estado fS de f se establece en un elemento elegido de manera uniforme al azar a partir del conjunto

{0,1,...,n1}
donde n es fijo y se conoce por dada f. Para consulta f , un elemento x (la suposición) a partir de
{0,1,...,n1}
se proporciona y el valor devuelto es (fSx)modn . Además, el estado fS de f se establece en un valor fS=fS±k , donde k se selecciona uniformemente al azar entre
{0,1,2,...,n/2((fSx)modn)}

Al hacer conjeturas uniformemente al azar con cada consulta, uno esperaría tener que hacer n conjeturas antes de obtener fS=x , con una varianza n2n (indicada sin prueba).

¿Se puede diseñar un algoritmo para que funcione mejor (es decir, hacer menos conjeturas, posiblemente con menos variación en el número de conjeturas)? ¿Cuánto podría mejorar (es decir, qué es un algoritmo óptimo y cuál es su rendimiento)?

Una solución eficiente a este problema podría tener importantes implicaciones de ahorro de costos para disparar a un conejo (confinado a saltar en una pista circular) en una habitación oscura.

Patrick87
fuente
No estoy seguro de si disparar conejos es informática.
Dave Clarke
66
@DaveClarke Pero si puedes disparar a los conejos, has resuelto el problema de detención de los conejos.
Patrick87
@DaveClarke Tampoco está disparando satélites al espacio, pero el cálculo de la posición del satélite sí lo es. Esta pregunta no es del todo diferente al criptoanálisis.
Gilles 'SO- deja de ser malvado'

Respuestas:

13

En primer lugar, supondré que por

Además, el estado de se establece en un valor , donde se selecciona uniformemente al azar entrefSffS=fS±kk

{0,1,2,...,n/2((fSx)modn)}

en realidad quieres decir

Además, el estado de se establece en un valor , donde se selecciona uniformemente al azar desdefSffS=fS+kmodnk

{|n2((fSx)modn)|,,1,0,1,2,,|n2((fSx)modn)|}

De lo contrario, no está del todo claro que siempre se cumple y cómo se exactamente .fS{0,...,n1}fS±k

Usando esto, el problema básicamente se reduce a "faltar tanto como sea posible". Observe que cuanto más cerca disparamos al conejo, más grandes saltos hace; en el caso extremo tenemos . Esto da como resultado un salto uniforme entre y , que básicamente aleatoriza completamente la posición del conejo nuevamente. Por otro lado, si tanto como sea posible, por un desplazamiento de , el conejo en realidad no se mueve en absoluto (!) Y el cuadro negro realmente nos actualiza en este hecho Por lo tanto, podemos dar la vuelta y disparar al conejo.fSx=±1modn(n/2±1)(n/2±1)fSxmodn=n/2

Nos queda encontrar un procedimiento para fallar cada vez más en cada disparo. Propongo una simple "búsqueda binaria". (Omitiré convenientemente el redondeo). Se realiza aproximadamente de la siguiente manera:

  1. Restablezca y dispare en una posición arbitraria hasta que obtenga de la caja negra la respuestaEsto toma una cantidad constante de pasos en la expectativa.(fSxmodn){14n,...,34n}.
  2. Ahora, sabemos que la posición pasada del conejo , y que no se movió más de pasos en cualquier dirección. Básicamente, esto reduce a la mitad nuestro espacio de búsqueda en la próxima iteración, ya que el conejo debe estar en una posiciónfS14nfS{(fS14n)modn,...,fS,...,(fS+14n)modn}
  3. Recurse: dispara en la posición . Con probabilidad , la posición la que saltó el conejo en los pasos 1 y 2 se encuentra en el rango . En ese caso, redujimos a la mitad el espacio de búsqueda una vez más. Con una probabilidad de , el conejo no saltó en ese rango, pero como sabemos que , tenemos los mismos supuestos que en el paso (2) y por lo tanto no pierdes nada.fSn/2modn1/2fS{fS18n,...,fS,...,fS+18n}1/2fSxmodn=fSfS+n/2modn{12n14n,...,12n+14n}

Cada paso necesita tiempo esperado para tener éxito y reduce a la mitad el espacio de búsqueda, produciendo un total de número esperado de pasos.2=O(1)O(logn)

HdM
fuente