Algoritmo para invertir una función biyectiva.

8

¿Existe un algoritmo generalizado para encontrar la función inversa de una función biyectiva arbitraria?

  • Para que este algoritmo sea útil, debe detenerse una vez que se encuentre la respuesta correcta.
  • Más allá del requisito de que finalmente debe encontrar la solución, no hay limitaciones de tiempo en el tiempo que lleva encontrar o ejecutar la función inversa (con eso en mente, algo mejor que la fuerza bruta de adivinar y verificar sería más interesante).

Por ejemplo, si existiera un algoritmo tan generalizado, podría resolver un algoritmo de descompresión para un algoritmo de compresión sin pérdidas.

EDITAR:

Realmente me gustaron las suposiciones de Evgenij Thorstensen, ya que resumieron mi pregunta bastante bien.

Supuestos

  • Funciones biyectivas computables sobre un alfabeto fijo (digamos {0, 1})
  • Representado por una máquina de Turing determinista (DTM) que lo calcula
  • El algoritmo propuesto podría resolver un DTM que invertiría la salida de la función biyectiva original.

Otra oportunidad para explicarlo:

Dado: Función biyectiva Fque mapea X del dominio A en Y del dominio B.

El algoritmo propuesto debería ser capaz de resolver una función biyectiva Gque mapee Y desde el dominio B a X desde el dominio A, de modo que G(F(X))=Xy F * G = Idónde Iesté la función de identidad.

Kendall Hopkins
fuente
¿De qué forma es la entrada al algoritmo?
Lev Reyzin
¿Cómo podría la forma de la entrada cambiar la existencia de una solución?
Kendall Hopkins
1
Se cree que existen permutaciones unidireccionales (p. Ej., RSA). ¿Supongo que estás buscando resultados negativos?
arnab
2
como nota al margen, si va a votar a favor, sería útil explicar por qué
Suresh Venkat
2
Acabo de votar porque esta pregunta no está lo suficientemente especificada como para proporcionar una respuesta concreta. Demasiado vago. Para mejorar: ¿cuál es la entrada precisa al algoritmo y cuál es la salida precisa del algoritmo? De lo contrario, solo estamos adivinando lo que podría significar.
Aaron Sterling

Respuestas:

7

Ha habido documentos sobre la conversión automática de algoritmos para funciones biyectivas en algoritmos para la función inversa; mi primer documento de conferencia fue uno de esos. Pero la clase de algoritmos que pueden invertirse de esta manera está severamente limitada, como ya sugieren las otras respuestas.

David Eppstein
fuente
4

En un dominio completamente desestructurado, lo mejor que puede hacer es la búsqueda de fuerza bruta, que lleva un tiempo lineal en el tamaño del dominio. Sin embargo, si el dominio del que habla es cadenas de n bits, eso es exponencial en n.

(Tenga en cuenta que, si hubiera un inversor eficiente de función totalmente general, invertir la función de multiplicación de enteros le daría un algoritmo de factorización eficiente).

Joshua Grochow
fuente
No tendría que ser eficiente. Solo porque un algoritmo para invertir cualquier función biyectiva dada, no dice nada sobre el inverso de esa función. Por ejemplo, compresión / descompresión.
Kendall Hopkins
También creo que podrías tener problemas con el problema de detención si simplemente estuvieras forzando una solución. Dado que cada intento tendría que verificarse para su corrección (ejecución). ¿Qué pasa si uno de los intentos de fuerza bruta en bucle infinito? ¿Qué pasa si la solución tarda infinito tiempo en ejecutarse?
Kendall Hopkins
Puede usar cola de milano para evitar ese problema de bucle infinito. en.wikipedia.org/wiki/Dovetailing_%28computer_science%29
Aaron Sterling el
@Aaron Solución muy interesante para el bucle infinito. Creo que todavía no resuelve el problema si la solución correcta tomaría un tiempo infinito para ejecutarse (aunque la utilidad de tal solución es cuestionable).
Kendall Hopkins
1
La multiplicación de enteros no es biyectiva, por lo que su nota está fuera del tema aquí.
Alexandru
3

Como @arnab señaló en los comentarios, las permutaciones unidireccionales son una primitiva criptográfica. Si desea invertir funciones arbitrarias de manera eficiente, tendrá que superar las barreras criptográficas (además de la factorización).

Lev Reyzin
fuente
Estoy bastante seguro de que una función criptográfica "generalizada" no es Bijective porque usar diferentes claves / datos podría terminar con los mismos datos (poco probable, pero aún posible). Si le asigna una función criptográfica con una clave preestablecida, el algoritmo generalizado solo tendría que resolver un algoritmo que pudiera aplicar fuerza bruta a la clave privada (factorizando el público), no tendría que ser fuerza bruta.
Kendall Hopkins
RE "el algoritmo generalizado solo tendría que resolver un algoritmo que pudiera forzar la clave privada" - No estoy seguro de entenderlo. Aparte de todo lo demás, ¿cómo es la fuerza bruta una clave eficiente?
Lev Reyzin
La pregunta es solo pedir un algoritmo que encuentre un algoritmo para resolver el problema, no tiene que resolverlo, y la solución de inversión o la solución de búsqueda de inversión tienen CUALQUIER restricción de tiempo.
Kendall Hopkins
3

Como muchos en esta página ya han señalado, la solución en general podría ser intratable.

No todo está perdido si está interesado en la programación invertible. Una alternativa para encontrar el inverso de una función dada es construir su función a partir de la composición de funciones invertibles, en cuyo caso encontrar el inverso es trivial.

Un ejemplo de este enfoque (usando Haskell) se explica en este documento http://www.cs.ru.nl/A.vanWeelden/bi-arrows/

Como sucede, he usado Biarrow para ayudarme a escribir solo una dirección de un algoritmo de compresión y obtener la otra (descompresión) de forma gratuita (libre podría ser la palabra incorrecta, son difíciles de usar, debido a la falta de soporte de idioma) .

Jonathan Fischoff
fuente
2

Aquí hay un algoritmo manual bajo algunas suposiciones fuertes.

Supuestos

  • Funciones biyectivas computables sobre un alfabeto fijo (digamos {0, 1})
  • Representado por una máquina de Turing determinista (DTM) que lo calcula y no algo "más" (ver más abajo)
  • Si el DTM de entrada no calcula una función biyectiva, no nos importa lo que ocurra.

Con estos supuestos, podemos mirar el DTM de entrada e invertir todas las transiciones (los estados de detención se convierten en estados de inicio, la lectura se convierte en escritura y viceversa, leemos desde el final, la izquierda es la derecha, etc.). Como la TM es determinista y la función calculada es biyectiva, el resultado también es una TM y calcula el inverso.

Tenga en cuenta que esto no funcionará para factorizar, porque la multiplicación no es biyectiva. La multiplicación de los números primos es , si ignoramos el orden, pero una TM que multiplica números no calcula "solo" la función biyectiva que queremos, calcula "demasiado", de ahí mi segunda suposición (sí, es bastante fuerte). Esto se relaciona muy bien con los comentarios sobre la representación.

Evgenij Thorstensen
fuente
No estoy seguro de que simplemente "invierta" un DTM según la descripción que proporcionó. Eso funcionaría para una gramática regular pero no para un DTM.
Kendall Hopkins el
Además, esto debería ser lineal en el tamaño de la entrada. Ah, qué útiles son estos supuestos fuertes. ¿Por qué crees que no funcionará para un DTM?
Evgenij Thorstensen
Una máquina de torneado no puede funcionar en reversa (que es lo que creo que estás pidiendo). Cuando estás en un estado, símbolo y posición, no sabes qué evento te hizo llegar allí (ya que puedes terminar en la misma posición / estado / símbolo más de una manera).
Kendall Hopkins
Un DTM arbitrario no puede, pero estaba tratando de usar la suposición de que calcula (en realidad, representa) una función biyectiva. Si estamos en un estado, símbolo y posición, de todos los caminos que conducen aquí, solo uno podría haber escrito lo que estamos leyendo ahora (ya que estamos hablando de inversas), de lo contrario no es una representación de una función biyectiva. Supongo que mi suposición sobre la biyectividad es precisamente que hay un camino único.
Evgenij Thorstensen
Estoy bastante seguro de que eso es incorrecto, piense en el ejemplo de cifrado (con una clave de publicación preestablecida) que se proporciona aquí. Es una función biyectiva, pero no puede simplemente "caminar" hacia atrás en un algoritmo de cifrado (algo importante). Lo que me hace concluir que no se puede hacer lo mismo para un DTM biyectivo.
Kendall Hopkins