Algoritmo para inverter uma função bijetiva.

8

Existe um algoritmo generalizado para encontrar a função inversa de uma função bijetiva arbitrária?

  • Para que esse algoritmo seja útil, ele deve ser interrompido assim que a resposta correta for encontrada.
  • Além do requisito de que ela deva encontrar a solução eventualmente, não restrições de tempo para encontrar ou executar a função inversa (com isso em mente, algo melhor do que a força bruta de adivinhação e verificação seria mais interessante).

Por exemplo, se esse algoritmo generalizado existisse, ele poderia resolver um algoritmo de descompressão para um algoritmo de compressão sem perdas.

EDITAR:

Gostei muito das suposições de Evgenij Thorstensen, pois resumiram minha pergunta bastante bem.

Premissas

  • Funções bijetivas computáveis ​​sobre um alfabeto fixo (digamos {0, 1})
  • Representado por uma máquina de Turing determinística (DTM) que a calcula
  • O algoritmo proposto seria capaz de resolver um DTM que inverteria a saída da função bijetiva original.

Outra chance de explicar isso:

Dado: Função bijetiva Fque mapeia X do domínio A para Y do domínio B.

O algoritmo proposto deve ser capaz de resolver uma função Bijective Gque mapeia Y do domínio B para X do domínio A, de modo que G(F(X))=Xe F * G = Ionde Iestá a função de identidade.

Kendall Hopkins
fonte
que forma é a entrada para o algoritmo?
Lev Reyzin
Como a forma da entrada pode mudar a existência de uma solução?
Kendall Hopkins
1
Acredita-se que existem permutações unidirecionais (por exemplo, RSA). Suponho que você esteja procurando resultados negativos?
Arnab
2
Como uma nota lateral, se você estiver indo para downvote, seria útil para explicar por que
Suresh Venkat
2
Acabei de votar porque esta questão não está suficientemente especificada para fornecer uma resposta concreta. Muito vago. Para melhorar: qual é a entrada precisa para o algoritmo e qual é a saída precisa do algoritmo? Caso contrário, estamos apenas adivinhando o que você pode querer dizer.
Aaron Sterling

Respostas:

7

Houve trabalhos sobre a conversão automática de algoritmos para funções bijetivas em algoritmos para a função inversa; meu próprio trabalho na primeira conferência foi um deles. Mas a classe de algoritmos que podem ser invertidos dessa maneira é severamente limitada, como as outras respostas já sugerem.

David Eppstein
fonte
4

Em um domínio completamente não estruturado, o melhor que você pode fazer é a pesquisa de força bruta, que leva tempo linear no tamanho do domínio. No entanto, se o domínio do qual você está falando é de n bits, isso é exponencial em n.

(Observe que, se houvesse um inversor eficiente de função totalmente geral, a inversão da função de multiplicação inteira forneceria um algoritmo de fatoração eficiente.)

Joshua Grochow
fonte
Não teria que ser eficiente. Só porque um algoritmo para inverter qualquer função bijetiva não diz nada sobre a função inversa. Por exemplo, compactação / descompactação.
Kendall Hopkins
Eu também acho que você poderia ter problemas com o problema de interrupção se estivesse simplesmente brutalmente forçando uma solução. Como cada tentativa teria que ser verificada quanto à correção (execução). E se uma das forças brutas tentar um loop infinito? E se a solução levar um tempo infinito para ser executada?
Kendall Hopkins
Você pode usar o encaixe para evitar esse problema de loop infinito. en.wikipedia.org/wiki/Dovetailing_%28computer_science%29
Aaron Sterling
@ Aaron Solução muito interessante para o loop infinito. Acredito que ainda não resolva o problema se a solução correta levar um tempo infinito para ser executada (embora a utilidade dessa solução seja questionável).
Kendall Hopkins
1
A multiplicação de números inteiros não é bijetiva, portanto, sua anotação é offtopic aqui.
Alexandru
3

Como o @arnab apontou nos comentários, as permutações unidirecionais são um primitivo criptográfico. Se você deseja inverter funções arbitrárias com eficiência, terá barreiras criptográficas a serem superadas (além de fatorar).

Lev Reyzin
fonte
Tenho certeza de que uma função criptográfica "generalizada" não é bijetiva porque, usando chaves / dados diferentes, você pode acabar com os mesmos dados (improvável, mas ainda possível). Se você fornecesse uma função criptográfica com uma chave predefinida, o algoritmo generalizado teria que resolver um algoritmo que pudesse forçar a força da chave privada (fatorando o público), não precisaria se forçar.
Kendall Hopkins
RE "o algoritmo generalizado teria apenas que resolver um algoritmo que pudesse forçar a chave privada" - não tenho certeza de que o entendo. Tudo o resto, como o bruto força uma chave eficiente?
Lev Reyzin
A questão é pedir apenas um algoritmo que encontre um algoritmo para resolver o problema, ele não precisa resolvê-lo, e a solução invertida nem a solução invertida-descoberta têm QUALQUER restrição de tempo.
Kendall Hopkins
3

Como muitos nesta página já apontaram, a solução em geral pode ser intratável.

Nem tudo está perdido se você estiver interessado em programação invertível. Uma alternativa para encontrar o inverso para uma determinada função é construir sua função a partir da composição de funções invertíveis; nesse caso, encontrar o inverso é trivial.

Um exemplo dessa abordagem (usando Haskell) é explicado neste documento http://www.cs.ru.nl/A.vanWeelden/bi-arrows/

Por acaso, usei o Biarrow's para me ajudar a escrever apenas uma direção de um algoritmo de compactação e obter a outra (descompactação) de graça (livre pode ser a palavra errada, é difícil de usar, devido à falta de suporte ao idioma) .

Jonathan Fischoff
fonte
2

Aqui está um algoritmo ondulado sob algumas suposições fortes.

Premissas

  • Funções bijetivas computáveis ​​sobre um alfabeto fixo (digamos {0, 1})
  • Representado por uma máquina de Turing determinística (DTM) que a calcula e não algo "mais" (veja abaixo)
  • Se o DTM de entrada não computar uma função bijetiva, não nos importamos com o que acontece

Com essas suposições, podemos olhar para o DTM de entrada e inverter todas as transições (estados de parada se tornam estados de início, leitura se torna escrita e vica versa, lemos do final, esquerda é direita, etc.). Como a MT é determinística e a função calculada é bijetiva, o resultado também é uma MT e calcula o inverso.

Observe que isso não funcionará para fatoração, porque a multiplicação não é bijetiva. A multiplicação de números primos é , se desconsiderarmos a ordem, mas uma MT que multiplica números não computa "apenas" a função bijetiva que queremos, calcula "demais", daí a minha segunda suposição (sim, é bastante forte). Isso está muito bem relacionado aos comentários sobre representação.

Evgenij Thorstensen
fonte
Não sei se você acabou de "inverter" um DTM pela descrição que você deu. Isso funcionaria para uma gramática regular, mas não para um DTM.
Kendall Hopkins
Além disso, isso deve ser linear no tamanho da entrada. Ah, quão úteis são essas fortes suposições. Por que você acha que não vai funcionar para um DTM?
Evgenij Thorstensen
Uma máquina de tornear não pode funcionar ao contrário (o que acho que você está pedindo). Quando você está em um estado, símbolo e posição, você não sabe qual evento o levou a chegar lá (pois pode terminar na mesma posição / estado / símbolo de mais de uma maneira).
Kendall Hopkins
Um DTM arbitrário não pode, mas eu estava tentando usar a suposição de que ele calcula (na verdade, representa) uma função bijetiva. Se estivermos em um estado, símbolo e posição, dentre todos os caminhos que levam até aqui, apenas um poderia ter escrito o que estamos lendo agora (já que estamos falando de inversos); caso contrário, não é uma representação de uma função bijetiva. Eu acho que minha suposição sobre bijetividade é precisamente que existe um caminho único.
Evgenij Thorstensen
Tenho certeza de que isso está incorreto, pense no exemplo de criptografia (com uma chave de pub predefinida) dada aqui. É uma função bijetiva, mas você não pode simplesmente "andar" para trás em um algoritmo de criptografia (meio que o ponto). O que me leva a concluir que você não pode fazer a mesma coisa com um DTM bijetivo.
Kendall Hopkins