Duas maneiras de analisar a eficiência de um algoritmo são:
- colocar um limite superior assintótico em seu tempo de execução e
- executá-lo e coletar dados experimentais.
Gostaria de saber se existem casos conhecidos em que existe uma lacuna significativa entre (1) e (2). Com isso, quero dizer que (a) os dados experimentais sugerem um assintótico mais rígido ou (b) existem algoritmos X e Y, de modo que a análise teórica sugere que X é muito melhor que Y e os dados experimentais sugerem que Y é muito melhor que X.
Como as experiências geralmente revelam um comportamento de caso médio, espero que as respostas mais interessantes se refiram aos limites superiores de caso médio. No entanto, não quero descartar respostas possivelmente interessantes que falem sobre limites diferentes, como a resposta de Noam sobre o Simplex.
Inclua estruturas de dados. Por favor, coloque um algo / ds por resposta.
fonte
Respostas:
O exemplo mais flagrante é, obviamente, o método Simplex, que é executado rapidamente na prática, sugerindo polimetemporalidade, mas leva tempo exponencial na teoria. Dan Spielman acabou de receber o prêmio Nevanlinna em grande parte por explicar esse mistério.
De maneira mais geral, muitas instâncias da programação inteira podem ser resolvidas muito bem usando solucionadores de IP padrão; por exemplo, leilões combinatórios para a maioria das distribuições tentadas em entradas de tamanho significativo podem ser resolvidos - http://www.cis.upenn.edu/~mkearns /teaching/cgt/combinatorial-auctions-survey.pdf
fonte
Bases de Groebner . O pior caso de tempo de execução é duplamente exponencial (no número de variáveis). Na prática, no entanto, especialmente para problemas bem estruturados, os algoritmos F4 e F5 são eficazes (ou seja, terminam rapidamente). Ainda é uma área ativa de pesquisa para descobrir qual deve ser a conjectura adequada em relação ao tempo médio ou esperado de execução. Supõe-se que esteja relacionado, de alguma forma, ao volume do pólipo de Newton do ideal subjacente.
fonte
Um exemplo excelente e pouco reconhecido desse fenômeno é o isomorfismo gráfico . O algoritmo mais conhecido leva algo como tempo , mas o isomorfismo do gráfico tende a ser resolvido rapidamente na prática.O(2((nlogn)√))
Não sei se há um resultado formal na complexidade média / suavizada do problema, mas lembro-me de ler que ele existia - talvez alguém consiga apontar um resultado formal. Certamente, existem muitas evidências experimentais e muitos solucionadores rápidos. Também estou curioso para saber se essa propriedade se estende a outros membros da família GI-complete.
fonte
De David Johnson, uma discrepância nas proporções de aproximação teórica versus experimental: O problema do vendedor ambulante: um estudo de caso em otimização local, DS Johnson e LA McGeoch . Neste artigo, eles fornecem evidências experimentais de assintóticos (uma vez que os experimentos atingem o tamanho N = 10.000.000!) Que desafiam os assintóticos teóricos: o algoritmo "Greedy" ou "Multi-Fragment" de Jon Bentley (pior dos casos, razão de aproximação pelo menos logN / loglogN) supera a inserção mais próxima e o MST duplo, ambos com taxas de aproximação de pior caso de 2.
fonte
Outro exemplo que não foi bem entendido até recentemente é o tempo de execução do algoritmo k-means de Lloyd , que (do ponto de vista prático) é o algoritmo de cluster escolhido por mais de 50 anos. Somente recentemente, em 2009, foi provado (por Vattani ) que, na pior das hipóteses, o algoritmo de Lloyd exige uma série de iterações exponenciais no número de pontos de entrada. Por outro lado, ao mesmo tempo, uma análise suavizada (de Arthur, Manthey e Röglin ) provou que o número suavizado de iterações é meramente polinomial, o que explica o desempenho empírico.
fonte
Os corolários transversais, deque e divididos da conjectura de otimalidade dinâmica para árvores de espalhamento são exemplos dessas lacunas. As experiências apoiam a reivindicação de tempo linear, mas não há prova conhecida.
fonte
Há um pequeno problema com a pergunta. De fato, existem mais de duas maneiras de analisar um algoritmo, e uma das maneiras teóricas que foram negligenciadas é o tempo de execução esperado, em vez do pior dos casos. É realmente esse comportamento médio de caso que é relevante para fazer experimentos. Aqui está um exemplo muito simples: imagine que você tenha um algoritmo para uma entrada de tamanho n, que leva tempo n para cada entrada possível de tamanho n, exceto por uma entrada específica de cada comprimento que leva tempo 2 ^ n. Ouça que o pior caso de tempo de execução é exponencial, mas o caso médio é [(2 ^ n -1) n + (2 ^ n) 1] / (2 ^ n) = n - (n-1) / 2 ^ n que limites para n. Claramente, os dois tipos de análise fornecem respostas muito diferentes, mas isso é de se esperar, pois estamos calculando quantidades diferentes.
Ao executar o experimento várias vezes, mesmo se levarmos o tempo de execução mais longo para a amostra, ainda estamos amostrando apenas uma pequena parte do espaço de entradas possíveis e, portanto, se casos difíceis forem raros, provavelmente sentiremos falta deles .
É relativamente fácil construir esse problema: se os primeiros n / 2 bits forem zero, resolva a instância 3SAT codificada com os últimos n / 2 bits. Caso contrário, rejeite. À medida que n cresce, o problema tem aproximadamente o mesmo tempo de execução no pior dos casos, como o algoritmo mais eficiente para o 3SAT, onde o tempo médio de execução é garantido muito baixo.
fonte
A inferência do tipo Damas-Milner é comprovadamente completa por tempo exponencial e existem casos de construção fácil com explosão exponencial do tamanho de um resultado. No entanto, na maioria dos insumos do mundo real, ele se comporta de maneira efetivamente linear.
fonte
A árvore PTAS para Steiner em gráficos planares tem uma dependência ridícula do epsilon. No entanto, há uma implementação que mostra um desempenho surpreendentemente bom na prática.
fonte
Heaps de emparelhamento, de [1] - eles implementam heaps, onde inserir e mesclar têm O (log n) complexidade amortizada, mas são conjecturados como O (1). Na prática, eles são extremamente eficientes, especialmente para usuários de mesclagem.
Acabei de descobri-los hoje mesmo ao ler o Sec. 5.5 do livro de C. Okasaki "Estruturas de dados puramente funcionais", então pensei em compartilhar informações sobre elas.
[1] Fredman, ML, Sedgewick, R., Sleator, DD e Tarjan, RE 1986. A pilha de emparelhamento: uma nova forma de pilha de autoajuste. Algorithmica 1, 1 (Jan. 1986), 111-129. DOI = http://dx.doi.org/10.1007/BF01840439
fonte
Relacionado à observação de ilyaraz sobre ramo e limite, Pataki et al. mostre que a redução de base de ramificação e de ligação e de rede pode resolver quase todos os IPs aleatórios no polytime.
fonte
A heurística de Lin-Kernighan para o TSP ("Uma heurística eficaz para o problema do vendedor ambulante", Operations Research 21: 489-516, 1973) é muito bem-sucedida na prática, mas ainda carece de uma análise de caso médio ou suavizada para explicar seu desempenho . Em contraste, há uma análise suavizada da heurística 2-opt para o TSP por Matthias Englert, Heiko Röglin e Berthold Vöcking (Algorithmica, para aparecer).
fonte
Na prática, existem muitos algoritmos de ramificação e limite muito rápidos e eficientes para diferentes problemas difíceis de NP que não podemos analisar rigorosamente: TSP, árvore Steiner, empacotamento de caixas e assim por diante.
fonte