Exemplos de problemas em que algoritmos exponenciais são executados mais rapidamente que algoritmos polinomiais para tamanhos práticos?

13

Você conhece algum problema (de preferência pelo menos um pouco conhecido), onde, para um tamanho de problema prático , um algoritmo exponencial é executado muito mais rápido do que um equivalente de tempo polinomial mais conhecido.

Por exemplo, suponha que um problema tenha um tamanho prático * de e haja dois algoritmos conhecidos: um é 2 n e o outro é n c para alguma constante c . Claramente, para qualquer c > 15 , o algoritmo exponencial é o preferido.n=1002nnccc>15

* Acho que tamanho prático significaria algo comumente encontrado no mundo real. Como o número de trens em uma rede.

Ozzah
fonte
1
Eu acho que você pode encontrar o que procura na literatura de complexidade parametrizada.
Kaveh
para algoritmos lineares geralmente existe um multiplicador constante que geralmente não é significativo e geralmente é omitido da complexidade, mas um que me lembro de parecer muito alto era uma fusão no local que era linear, mas, na pior das hipóteses, algo como 5000 N ... naqueles cenários, há uma grande área útil em que N ^ 2 seria menor que 5000 N, onde o tamanho é menor que sqrt (5000) e um domínio menor em que 2 ^ n ainda seria mais rápido, onde n é menor que log 5000
Grady Player

Respostas:

13

Que tal o algoritmo simplex para programação linear? Em muitas ocasiões , é usado na prática.

Editado para adicionar: Eu acho que é mais um "algoritmo exponencial de pior caso", que é executado eficientemente em instâncias / distribuições práticas, em vez de ser executado mais rapidamente em instâncias adversárias de tamanho prático .

RB
fonte
4
@diesalbla - depende da previsão exata. Citando a Wikipedia ", em 1972, Klee e Minty [32] deram um exemplo mostrando que a pior complexidade do método simplex, conforme formulada por Dantzig, é o tempo exponencial".
RB
12

O(n3)

Peter Shor
fonte
5
2222|H|O(n3)H
1
O(n2)|H|
1
HG|H|
-3

Existem alguns exemplos com detecção / teste de primalidade (não probabilístico / exato) . O algoritmo AKS foi o primeiro algoritmo para teste de primalidade mostrado em P. Ele não compete favoravelmente contra alguns algoritmos de tempo exponencial para entradas "pequenas". Os detalhes são um pouco complicados, porque mostrar isso geralmente requer a implementação de algoritmos, o que é um exercício desafiador e pode depender de aspectos específicos da implementação.

Mais informações / detalhes / referências sobre esta questão cs.se:

vzn
fonte
6
Até onde eu sei, os algoritmos com os quais a AKS compete na prática são polinômios aleatórios (Miller-Rabin, ECPP) ou quase-polinomiais determinísticos (Adleman-Pomerance-Rumeley). Em nenhum momento perto do tempo exponencial.
Emil Jeřábek apoia Monica no dia
6
A versão aleatória de Miller – Rabin, que é a utilizada na prática, não depende da UR.
Emil Jeřábek apoia Monica
5
Tudo isso é verdade, mas não tem nada a ver com a pergunta original.
Emil Jeřábek apoia Monica
2
Sim, eu sei tudo isso. E pela terceira vez, isso é irrelevante. A pergunta pede algoritmos de tempo exponencial que são, na prática, competitivos com um algoritmo de tempo polinomial conhecido (aqui, AKS). O único algoritmo de teste de primalidade em tempo exponencial usado na prática é a divisão de teste, que não é competitiva para números de qualquer tamanho não trivial. Os algoritmos competitivos usados ​​na prática são muito mais eficientes do que exponenciais, mesmo que não sejam polinomiais (ou determinísticos ou incondicionais).
Emil Jeřábek apoia Monica
3
O que são maçãs e laranjas é comparar o AKS (um algoritmo de teste de primalidade) com o GNFS (um algoritmo de fatoração).
Emil Jeřábek apoia Monica