Prova de Adleman que está contido em P / p o l y mostra que, se houver um algoritmo aleatório para um problema que é executado no tempo t ( n ) em entradas de tamanho n , em seguida, há também um algoritmo determinística para o problema que é executado no tempo Θ ( t ( n ) ⋅ n ) em entradas de tamanho n [o algoritmo executa o algoritmo aleatório em Θ ( n )seqüências de aleatoriedade independentes. Deve haver aleatoriedade para o algoritmo repetido que seja bom para todos os entradas possíveis]. O algoritmo determinístico não é uniforme - pode se comportar de maneira diferente para diferentes tamanhos de entrada. Portanto, o argumento de Adleman mostra que - se alguém não se importa com a uniformidade - a randomização pode acelerar os algoritmos apenas por um fator linear no tamanho da entrada.
Quais são alguns exemplos concretos em que a randomização acelera a computação (tanto quanto sabemos)?
Um exemplo é o teste de identidade polinomial. Aqui, a entrada é um circuito aritmético de tamanho n que calcula um polinômio m-variado sobre um campo, e a tarefa é descobrir se o polinômio é identicamente zero. Um algoritmo aleatório pode avaliar o polinômio em um ponto aleatório, enquanto o melhor algoritmo determinístico que conhecemos (e possivelmente o melhor que existe) avalia o polinômio em muitos pontos.
Outro exemplo é a árvore de abrangência mínima, onde o melhor algoritmo aleatório de Karger-Klein-Tarjan é o tempo linear (e a probabilidade de erro é exponencialmente pequena!), Enquanto o melhor algoritmo determinístico de Chazelle é executado no tempo ( α é a função inversa de Ackermann, portanto a aceleração da randomização é realmente pequena). Curiosamente, foi provado por Pettie e Ramachandran que, se existe um algoritmo de tempo linear determinístico não uniforme para uma árvore de abrangência mínima, também existe um algoritmo de tempo linear determinístico uniforme.
Quais são alguns outros exemplos? Quais exemplos você sabe onde a aceleração da randomização é grande, mas isso é possivelmente porque ainda não encontramos algoritmos determinísticos suficientemente eficientes?
fonte
Respostas:
Eu não sei se randomização “deve” ou “não deve” ajudar, no entanto, teste de primalidade inteiro pode ser feito em tempo usando randomizados Miller-Rabin, enquanto que, tanto quanto eu sei, o mais conhecido algoritmos são deterministas ~ S ( N 4 ) assumindo GRH (determinista Miller-Rabin) ou ~ S ( n 6 ) incondicionalmente (variantes de AKS).O~( n2) O~( n4) O~( n6)
fonte
Um exemplo antigo é a computação de volume. Dado um polítopo descrito por um oráculo de associação, existe um algoritmo aleatório em execução no tempo polinomial para estimar seu volume em um fator de , mas nenhum algoritmo determinístico pode se aproximar incondicionalmente .1 + ϵ
O primeiro exemplo dessa estratégia aleatória foi de Dyer, Frieze e Kannan, e o resultado da dureza para algoritmos determinísticos é de Bárány e Füredi. Alistair Sinclair tem boas notas de aula sobre isso .
Não sei se entendi completamente a parte "e não deveria" da pergunta, então não tenho certeza se isso se encaixa na conta.
fonte
Eu não sei se isso responde à sua pergunta (ou pelo menos parte dela). Mas para exemplos do mundo real, onde a randomização pode fornecer uma aceleração, está nos problemas de otimização e na relação com o teorema Sem almoço livre ( NFL ) .
Existe um artigo "Talvez não seja um almoço grátis, mas pelo menos um aperitivo grátis", onde é demonstrado que o emprego de algoritmos de randomização (otimização) pode ter melhor desempenho.
Referências:
Resumo sobre almoços sem graça (e almoços grátis) por David H. Wolpert, Quanto custa o jantar? ( observe que os teoremas do tipo NFL nunca especificam um " preço " real devido ao seu tipo de prova)
Especificamente para otimização generalizada (GO):
Finalmente, uma observação simples (e não tão simples) por que a randomização (de uma forma ou de outra) pode fornecer desempenho superior em relação a algoritmos estritamente determinísticos.
fonte
O melhor exemplo é a área atualmente considerada como melhor candidata a OWFs, onde parece que todo OWF popular que é preparado surpreendentemente possui um algoritmo subexponencial aleatório, enquanto não existe algoritmo subexponencial determinístico (por exemplo, fatoração inteira). De fato, em muitos casos, provavelmente existe um algoritmo eficiente, com algumas orientações (criptoanálise).
fonte
Se você tiver um algoritmo usando randomização, sempre poderá substituí-lo por um algoritmo determinístico usando números pseudo-aleatórios: Faça a descrição do problema, calcule um código de hash, use esse código de hash como a semente de um bom gerador de números pseudo-aleatórios . Na prática, é isso que provavelmente acontece quando alguém implementa um algoritmo usando a randomização.
Se deixarmos de fora o código hash, a diferença entre esse algoritmo e um algoritmo usando a aleatorização verdadeira é que eu posso prever a sequência de números aleatórios gerados e eu poderia produzir um problema de modo que o número aleatório previsto aplicado ao meu problema sempre tome a pior decisão possível. Por exemplo, para o Quicksort com um pivô pseudo-aleatório, eu poderia construir uma matriz de entrada na qual o pivô pseudo-aleatório sempre encontrará o maior valor possível na matriz. Com verdadeira aleatoriedade, isso não é possível.
Com o código hash, seria muito difícil para mim construir um problema em que os números pseudo-aleatórios produzem piores resultados. Ainda posso prever os números aleatórios, mas se eu mudar o problema, a sequência de números pseudo-aleatórios muda completamente. Ainda assim, seria quase impossível para você provar que não consigo construir esse problema.
fonte