¿Cómo obtener los valores desconocidos

19

¿Alguien puede ayudarme con el siguiente problema?

Quiero encontrar algunos valores a i , b jai,bj (mod norteN ) donde i = 1 , 2 , ... , K , j = 1 , 2 , ... , Ki=1,2,,K,j=1,2,,K (por ejemplo K = 6K=6 ), dada una lista de valores K 2K2 que corresponden a las diferencias a i - b j( modN )aibj(modN) (por ejemplo N = 251N=251 ), sin conocer la relación correspondiente concreta. Dado que los valores a i , b j( modN )ai,bj(modN) no están definidos de manera única dadas las diferencias a i - b j( modN )aibj(modN) , buscamos cualquier asignación válida de valores.

Definitivamente, probar cada permutación de los números K 2K2 en la lista (¡totalmente K 2 !K2! Posibles casos) y luego resolver las ecuaciones modulares con a i , b jai,bj como las variables no es factible.

De hecho, este problema surge en un documento sobre el criptoanálisis de una versión temprana del esquema de firma NTRU ( http://eprint.iacr.org/2001/005 ). Sin embargo, el autor escribió solo una oración "Un algoritmo simple de retroceso encuentra una solución ..." (en la Sección 3.3) y ¿alguien puede dar más explicaciones? Además, el autor también mencionó que "cada cambio circular { ( ( a i + M )modificaciónN , ( b i + M )modificaciónN } K i = 1{((ai+M)modN,(bi+M)modN}Ki=1 o un intercambio ( { ( N - 1 - b i , N - 1 - a i ) } K i = 1 )({(N1bi,N1ai)}Ki=1) da como resultado el mismo patrón de a i - b jmodificaciónnorteaibjmodN ”y ¿es útil esta afirmación?

un invitado
fuente
77
Tenga en cuenta que es imposible recuperar a i , b jai,bj , ya que si agrega C constante CCa todos los números, las diferencias siguen siendo las mismas.
Yuval Filmus
1
@Yuval: Esto ya está incluido en la última oración de la descripción. Creo que solo se necesita una solución, ya que pueden existir varias.
domotorp
2
@Yuval Lo siento por no señalar que los a i , b jai,bj 's también deben tomarse como N modular norteN. Entonces no hay soluciones infinitas.
un invitado
@domotorp Sí, encontrar cualquiera de las soluciones está bien.
un invitado
1
Tal vez el OP podría aclarar que a iai , b jbj se toman el módulo norteN anteriormente en la publicación: tal vez en el título o en el primer párrafo. El problema con la constante CC también vale la pena mencionar. Ambas cosas me confundieron cuando comencé a leer.
Juan Bermejo Vega

Respuestas:

4

Aquí hay una sugerencia, para y . Se nos da una lista . Comience tomando uno de ellos, sin pérdida de generalidad . Sin pérdida de generalidad , y obtenemos el valor de . Ahora tome otro, y espere que tenga la forma (esto sucede con probabilidad ), y deduzca .K = 6 N = 251 a i - b jK=6N=251( modN ) un 1 - b 1 b 1 = 0 un 1 a 2 - b 1 5 / 35 = 1 / 7 de un 2aibj(modN)a1b1b1=0a1a2b15/35=1/7a2

En esta etapa, sabemos . Nuestro próximo objetivo es buscar para . Para cada candidato , si entonces también debería estar en la lista. Si , entonces la probabilidad de que también esté en la lista es aproximadamente . Entonces, si encontramos algún candidato para el cual también está en la lista, entonces probablemente . De esta manera, podemos recuperar con cierta certeza.a 1 , a 2 , b 1 a 1 - b j j 1 a i - b j i = 1 ( a i - b j ) + ( a 2 - a 1 ) = a 2 - b j i 1 ( a i - b j ) + ( a 2 - aa1,a2,b1a1bjj1aibji=1(aibj)+(a2a1)=a2bji11 ) 33 / 251 un i - b j ( un i - b j ) + ( un 2 - un 1 ) i = 1 b 2(aibj)+(a2a1)33/251aibj(aibj)+(a2a1)i=1b2

En esta etapa, conocemos . De la misma manera que recuperamos , podemos recuperar con certeza razonable. Entonces podemos recuperar buscando un candidato para el cual y estén ambos en la lista. Debido a que tenemos más s, nuestra probabilidad de falla disminuye considerablemente. Continuamos y encontramos .a 1 , a 2 , b 1 , b 2 b 2 a 3 b 3 a i - b j ( a i - b j ) + ( a 2 - a 1 ) ( a i - b j ) + ( a 3 - a 1 ) a b 3 , a 4 , b 4a1,a2,b1,b2b2a3b3aibj(aibj)+(a2a1)(aibj)+(a3a1)a, a 5 , b 6 , a 6 , b 6b3,a4,b4,a5,b6,a6,b6

En cualquier punto de este algoritmo, podríamos haber adivinado algo mal, y esto eventualmente resultará en una contradicción (por ejemplo, en algún momento, no hay un buen candidato ). Luego retrocedemos e intentamos otra posibilidad; si agotamos todas las posibilidades, retrocedemos nuevamente e intentamos otra posibilidad (para una etapa diferente del algoritmo); y así.a i - b jaibj

Es un buen ejercicio programar realmente este algoritmo; esa es probablemente la única forma de entender cómo implementar el retroceso correctamente. Esa es también la única forma de saber si este algoritmo funciona en la práctica.

Yuval Filmus
fuente
Gracias y también codificaré este backtracking para que se entienda mejor. Tal vez el autor de ese artículo original usó un método similar porque también mencionó "retroceso".
un invitado el
Perdón por olvidar publicar mi comentario a tu respuesta! También implementé el método que sugirió (en C ++). La conclusión es que su algoritmo funciona bastante bien y una de las soluciones se puede encontrar muy rápido (en menos de un segundo en mi PC). Y esta vez, puedo entender mejor los procedimientos de retroceso. ¡Muchas gracias!
un invitado
¿Por qué no puedo "@Yuval" en mi último comentario? Lo siento, pero lo he intentado varias veces.
un invitado
Tal vez podría compartir el código en línea, para que otras personas que lean el periódico tengan acceso a él.
Yuval Filmus
5

Actualización : La siguiente descripción es para un problema diferente (en el que tiene todas las distancias por pares en un conjunto en lugar de distancias por pares entre dos conjuntos distintos). Lo dejaré de todos modos ya que está estrechamente relacionado.

Este problema se llama problema de circunvalación y es un caso especial del problema general de incrustación -torus. También está estrechamente relacionado con el problema de la autopista de peaje, en el que las diferencias de distancia son absolutas (no módulo algún número).dd

No se sabe si el problema de la circunvalación admite un algoritmo de poli-tiempo. Existen varios algoritmos de pseudo-poli-tiempo para preguntas relacionadas. La mejor referencia (por desgracia, una antigua) es el artículo de Lemke, Skiena y Smith .

Suresh Venkat
fuente
1
Creo que este problema es diferente. En el problema de la circunvalación, conocemos todas las distancias por pares, aquí solo lo sabemos entre dos puntos que están en diferentes grupos. Si bien esto parece tener menos información, de hecho puede ayudar a resolver el problema.
domotorp
Ah, sí. Es un gráfico bipartito. buen punto.
Suresh Venkat
¿Gráfica bipartita? Algo como. Tal vez debería tratar el problema de esta manera, pero no tengo el tren de pensamiento concreto ahora.
un invitado
3

Aquí hay una observación que creo que te da un punto de apoyo, posiblemente suficiente para resolver el problema.

Supongamos que tenemos cuatro diferencias , , , que surgen como las diferencias por pares entre dos 'sy dos ' s. Llama a esto un cuarteto de diferencias. Tenga en cuenta que tenemos una relación no trivial:a1b1a1b1a1b2a1b2a2b1a2b1a2b2a2b2aabb

( a 1 - b 1 ) - ( a 1 - b 2 ) = ( a 2 - b 1 ) - ( a 2 - b 2 )( modN ) .

(a1b1)(a1b2)=(a2b1)(a2b2)(modN).

Puede intentar usar esta relación para identificar posibles cuartetos fuera de la lista de K 2 . Por ejemplo, elija cuatro diferencias de la lista; si no satisfacen la relación anterior, definitivamente no surgen de una estructura de cuarteto; si satisfacen la relación, pueden surgir de un cuarteto.K2

Hay muchas maneras en que puede tomar las cosas desde aquí, pero sospecho que esto será suficiente.

Sospecho especialmente que, para su configuración de parámetros de ejemplo, el problema será bastante fácil, porque la prueba anterior para reconocer un cuarteto probablemente no tendrá demasiados falsos positivos. Nuestro de todos ( K 24 ) formas de elegir 4 diferencias de la lista, habrá ( K(K24)2 ) 2cuartetos (que satisfarán la relación) y el resto son no cuartetos (que satisfacen la relación con probabilidad1/N, heurísticamente). Por lo tanto, esperamos ver acerca de((K2(K2)21/N4 ) - ( K2 ) 2)/Nfalsos positivos, es decir, 4 tuplas que pasan la prueba a pesar de que no son cuartetos. Para sus parámetros, esto significa que tenemos 225 cuartetos y(58905-225)/251234otros falsos positivos; así que aproximadamente la mitad de las 4 tuplas que pasan la prueba son en realidad cuartetos. Esto significa que la prueba anterior es una forma bastante buena de reconocer los cuartetos. Una vez que puede reconocer los cuartetos, realmente puede ir a la ciudad para recuperar la estructura de la lista de diferencias.((K24)(K2)2)/N(58905225)/251234

DW
fuente
@DW: Gracias, pero ahora me pregunto el siguiente paso después de encontrar todos los cuartetos posibles (totalmente 225 + 234 = 459). ¿Debería buscar 3 cuartetos no superpuestos y probar si pueden constituir una posible solución? ¿Cómo lograr esto de manera eficiente? Tal vez no sea tan difícil porque no habrá muchas superposiciones.
un invitado el
@aguest, buena pregunta! No puedo recordar lo que estaba pensando en ese momento. Creo que recuerdo haber pensado que un enfoque podría ser comenzar con un cuarteto, luego buscar todos los demás que se superponen en 2 diferencias (por ejemplo, que surgen de a 1 , a j , b 1 , b 2 donde j 2 ), pero yo No sé a dónde ir desde allí (cómo filtrar los falsos positivos). a1,aj,b1,b2j2
DW
3

Aquí hay un enfoque diferente, basado en encontrar iterativamente números que no pueden aparecer entre { a 1 , ... , a 6 } . Llame a un conjunto A un exceso de aproximación de la una 's si sabemos que { a 1 , ... , un 6 } A . Del mismo modo, B es un overapproximation de la b 's si sabemos que { b 1 , ... , b 6 } B . Obviamente, la A más pequeña{a1,,a6}Aa{a1,,a6}ABb{b1,,b6}BAes, más útil este exceso de aproximación es, y lo mismo pasa con B . Mi enfoque se basa en refinar iterativamente estas sobre aproximaciones, es decir, reducir de forma iterativa el tamaño de estos conjuntos (a medida que descartamos que cada vez más valores sean imposibles)B

El núcleo de este enfoque es un método de refinamiento : dada una sobre-aproximación A para las a 's y una sobre-aproximación B para las b ' s, encuentre una nueva sobre-aproximación A para las a 's tal que A *A . En particular, normalmente A será más pequeño que A , por lo que esto nos permite refinar la sobre-aproximación para las a 's.AaBbAaAAAAa

Por simetría, esencialmente el mismo truco nos permitirá refinar nuestra sobre-aproximación para las b 's: dada una sobre-aproximación A para las a ' sy una sobre-aproximación B para las b 's, producirá un nuevo sobre -aproximación B para los b 's.bAaBbBb

Entonces, déjame decirte cómo hacer el refinamiento, luego armaré todo para obtener un algoritmo completo para este problema. En lo que sigue, supongamos que D denota el conjunto múltiple de diferencias, es decir, D = { a i - b j : 1 i , j 6 } ; nos centraremos en la búsqueda de un refinado exceso de aproximación A * , dada A , B .DD={aibj:1i,j6}AA,B

Cómo calcular un refinamiento. Considere una sola diferencia d D . Considere el conjunto d + B = { d + y : y B } . Según nuestro conocimiento de que B es una sobre-aproximación de las b 's, sabemos que al menos un elemento de d + B debe ser un elemento de { a 1 , ... , a 6 } . Por lo tanto, podemos tratar cada uno de los elementos en d + BdDd+B={d+y:yB}Bbd+B{a1,,a6}d+Bcomo una "sugerencia" para un número de, posiblemente, incluir en una . Entonces, recorramos todas las diferencias d D y, para cada una, identifiquemos qué números son "sugeridos" por d .AdDd

Ahora voy a observar que el número a 1 seguramente se sugerirá al menos 6 veces durante este proceso. ¿Por qué? Debido a que la diferencia a 1 - b 1 está en D , y cuando la procesamos, a 1 será uno de los números que sugiere (ya que estamos garantizados que b 1B , ( a 1 - b 1 ) + B lo hará seguramente incluye un 1 ). Del mismo modo, la diferencia a 1 - b 2 aparece en algún lugar dea1a1b1Da1b1B(a1b1)+Ba1a1b2D , y haráque se vuelva a sugerir un 1 . De esta manera, vemos que el valor correcto de un 1 se sugerirá al menos 6 veces. Lo mismo vale para un 2 y un 3 , y así sucesivamente.Da1a1a2a3

Entonces, sea A el conjunto de números a que se han sugerido al menos 6 veces. Esto seguramente será una sobre-aproximación de las a 's, según los comentarios anteriores.Aaa

Como una optimización, podemos filtrar todas las sugerencias que no están presentes en un inmediato: en otras palabras, podemos tratar la diferencia d como una sugerencia de todos los valores ( d + B ) A . Esto asegura que tendrán un *A . Esperamos que A sea ​​estrictamente más pequeño que A ; sin garantías, pero si todo va bien, tal vez lo sea.Ad(d+B)AAAAA

En conjunto, el algoritmo para refinar A , B para producir A es el siguiente:A,BA

  1. Deje que S = d D ( d + B ) A . Este es el conjunto múltiple de sugerencias.S=dD(d+B)A

  2. Cuente cuántas veces cada valor aparece en S . Deje A * el conjunto de valores que aparecen por lo menos 6 veces en S . (Esto se puede implementar de manera eficiente mediante la construcción de una matriz de una de 251 inicialmente, inicialmente todos cero, y cada vez el número s se sugiere, se incrementa un [ s ] ; al final se barre a través de un busca de elementos cuyo valor es 6 o más grande)SASasa[s]a

Se puede construir un método similar para refinar A , B para obtener B . You cosas básicamente inversa arriba y voltear algunas señales: por ejemplo, en lugar de d + B , se mire - d + A .A,BBd+Bd+A

Cómo calcular una sobre-aproximación inicial. Para obtener nuestra sobre-aproximación inicial, una idea es suponer (wlog) que b 1 = 0 . De ello se deduce que cada valor a i debe aparecer en algún lugar entre D , por lo tanto, la lista de diferencias D se puede utilizar como nuestra sobre-aproximación inicial para las a 's. Desafortunadamente, esto no nos da una sobre-aproximación muy útil para los b 's.b1=0aiDDab

Un mejor enfoque es adivinar adicionalmente el valor de una de las a 's. En otras palabras, suponemos (wlog) que b 1 = 0 , y usamos A = D como nuestra sobre-aproximación inicial de las a 's. Entonces, adivinamos cuál de estos 36 valores es de hecho una de las a 's, digamos un 1 . Eso nos da una sobre-aproximación B = a 1 - D para las b 's. Utilizamos esta sobre-aproximación inicial A , Bab1=0A=Daaa1B=a1DbA,B, luego refínalo iterativamente hasta la convergencia y prueba si el resultado es correcto. Repetimos hasta 36 veces, con 36 diferentes conjeturas en un 1 (en promedio 6 conjeturas debería ser suficiente) hasta que encuentre uno que funcione.a1

Un algoritmo completo. Ahora podemos tener un algoritmo completo para calcular a 1 , ... , a 6 , b 1 , ... , b 6 . Básicamente, derivamos una sobre-aproximación inicial para A y B , luego la refinamos iterativamente.a1,,a6,b1,,b6AB

  1. Adivina: para cada z D , adivina que a 1 = z . Haz lo siguiente:zDa1=z

    1. Inicial sobre-aproximación: Definir A = D y B = z - D .A=DB=zD

    2. Refinamiento iterativo: aplique repetidamente lo siguiente hasta la convergencia:

      • Refine A , B para obtener una nueva sobre-aproximación B de las b 's.A,BBb
      • Refine A , B para obtener una nueva sobre-aproximación A de las a 's.A,BAa
      • Deje A : = A y B : = B .A:=AB:=B
    3. Compruebe el éxito: si los conjuntos resultantes A , B tienen cada uno un tamaño 6, pruebe si son una solución válida para el problema. Si lo son, deténgase. Si no, continúe con el ciclo sobre los valores candidatos de z .A,Bz

Análisis. esto funcionara? ¿Eventualmente convergerá en A = { a 1 , ... , a 6 } y B = { b 1 , ... , b 6 } , o se atascará sin resolver completamente el problema? La mejor manera de averiguarlo es probablemente probarlo. Sin embargo, para sus parámetros, sí, espero que sea efectivo.A={a1,,a6}B={b1,,b6}

Si usamos el método # 1, siempre que | A | , | B | no son demasiado grandes, heurísticamente espero que los tamaños de los conjuntos se reduzcan monotónicamente. Considere derivar Una * de A , B . Cada diferencia d sugiere | B | valores; uno de ellos correcto, y el otro | B | - 1 puede ser tratado (heurísticamente) como números aleatorios. Si x es un número que no aparece entre las a 's, ¿cuál es la probabilidad de que sobreviva al filtrado y se agregue a A|A|,|B|AA,Bd|B||B|1xa ? Bueno, esperamos una a sugerirse sobre ( | B | - 1 ) × 36 / 251 veces en total (en promedio, con una desviación estándar sobre la raíz cuadrada de eso). Si | B | 36 , la probabilidad de que una x incorrectasobreviva al filtrado debe ser aproximadamente p = 0.4 o menos (usando la aproximación normal para el binomio, con corrección de continuidad). (La probabilidad es menor si | B | es menor; por ejemplo, para | B | =Aa(|B|1)×36/251|B|36xp=0.4|B|30 , espero p 0.25 .) Espero que el tamaño de A sea ​​aproximadamente p ( | A | - 6 ) + 6 , lo que mejorará estrictamente la sobre-aproximación ya que es estrictamente más pequeño que | A | . Por ejemplo, si | A | = | B | = 36 , luego basado en estas heurísticas que espero | A | 18 , que es una gran mejora sobre | A ||B|=30p0.25Ap(|A|6)+6|A||A|=|B|=36|A|18|A|.

Por lo tanto, predigo que el tiempo de ejecución será muy rápido. Espero que aproximadamente 3-5 iteraciones de refinamiento sean suficientes para la convergencia, por lo general, y aproximadamente 6 conjeturas en z probablemente deberían ser suficientes. Cada operación de refinamiento involucra quizás unos pocos miles de lecturas / escrituras de memoria, y lo hacemos tal vez 20-30 veces. Entonces, espero que esto sea muy rápido, para los parámetros que especificó. Sin embargo, la única forma de averiguarlo con certeza es probarlo y ver si funciona bien o no.z

DW
fuente
@DW: ¡Muchas gracias por su larga respuesta y el esfuerzo que tomó para escribir tantas palabras! Según su descripción, su algoritmo aquí es bastante correcto. Y voy a codificarlo para probar la eficiencia ahora mismo.
un invitado
@DW: Hola, he implementado tu descripción en C ++. El algoritmo se ejecuta rápido y el refinamiento paso reduce el tamaño de los conjuntos originales A y B . Sin embargo, la convergencia parece no ser tan perfecta. De hecho, para cada aproximación z D , los tamaños finales de A y B siguen siendo más de 10 de acuerdo con mi salida de registro por el programa. El número más frecuente de elementos existentes cuando A (y B ) no se puede mejorar con más repeticiones de refinamiento es 11, pero apenas puedo ver un número por debajo de 10. Sin embargo, esto ha solucionado el problema al intentar cada 6- elementos elegidos deABzDABAB
un invitado
@DW: (Cotinued) final A y B para cada aproximación z (aunque no implementé el último paso en mi PC). El cálculo de la cantidad total será de aproximadamente 2 20 , calculo. ¡Muchas gracias! AB
un invitado
Lo siento, pero mi último comentario es demasiado largo y tengo que dividirlo en dos.
un invitado