Por aqui , Dave Clarke propôs que, para comparar o crescimento assintótico, você deve traçar as funções em questão. Como cientista da computação, teoricamente inclinado, chamo esse vodoo de que um enredo nunca é prova. Pensando bem, tenho que concordar que essa é uma abordagem muito útil que às vezes é subutilizada; um enredo é uma maneira eficiente de obter as primeiras idéias e, às vezes, é tudo o que você precisa.
Ao ensinar o TCS, sempre há o aluno que pergunta: "Para que preciso de uma prova formal, se posso fazer o X que sempre funciona?" Cabe ao (s) professor (s) apontar e ilustrar a falácia. Há um brilhante conjunto de exemplos de padrões aparentes que acabam falhando no math.SE, mas esses são cenários bastante matemáticos.
Então, como você engana a heurística da inspeção de plotagem? Existem alguns casos em que é difícil diferenciar as diferenças, por exemplo,
[ fonte ]
Faça um palpite e verifique a fonte quanto às funções reais. Mas essas não são tão espetaculares quanto eu esperaria, principalmente porque é fácil identificar as relações reais apenas com as funções, mesmo para iniciantes.
Existem exemplos de crescimento assintótico (relativo) em que a verdade não é óbvia a partir da função definição e inspeção de plotagem para razoavelmente grande dá uma idéia completamente errada? Funções matemáticas e conjuntos de dados reais (por exemplo, tempo de execução de um algoritmo específico) são bem-vindos; abstenha-se de funções definidas por partes.
fonte
Respostas:
[ fonte ]
fonte
Aqui está outro exemplo (reconhecidamente bastante construído), mas ainda acho notável. Pretende-se mostrar que as parcelas podem ser muito enganadoras para julgar o crescimento assintótico.
Você consegue adivinhar qual das funções cresce (assintoticamente) mais rapidamente?
Então é essencialmente , ou seja, o mesmo que , mas sua segunda derivada não é uniformemente , mas oscila entre e com o período de crescimento exponencial. Essa oscilação não é visível em gráficos comuns.x 2 f 2 0 4g x2 f 2 0 4
Para este exemplo, podemos demask as oscilações considerando um log-log-enredo:
Obviamente, isso não ajuda, em geral; por exemplo, podemos ter um período duplamente exponencial ...
fonte
Um bom exemplo é o algoritmo DFA mínimo profundamente mágico de Brzozowski. Dado um autômato finito , podemos calcular um autômato finito determinístico mínimo a partir dele:N=(Q,S⊆Q,F⊆Q,R⊆Q×Σ×Q)
Obviamente, esse é um algoritmo de tempo exponencial no pior dos casos, pois ele pode pegar um autômato não determinístico e fornecer um determinista (ou, mais obviamente, chama a construção do subconjunto duas vezes).
No entanto, se você der ao DFA o algoritmo de Brzozowski como entrada, em muitos tipos comuns de entrada, ele pode competir com e frequentemente superar os algoritmos especializados de minimização de DFA (que normalmente são ou se você é hard-core e implementa o algoritmo de Hopcraft).O ( n log ( n ) )O(n2) O(nlog(n))
Isso toca a parte "plot" da "heurística de inspeção de plotagem" - temos que escolher quais pontos serão amostrados ao desenhar a plotagem, e você pode enganar uma plotagem ingênua se não escolher seus pontos com cuidado. Isso também vale para outros exemplos, como o Quicksort e o algoritmo Simplex, mas para a pedagogia prefiro esse algoritmo aos dois.
A diferença do Quicksort é "apenas" quadrática versus log-linear, que é menos espetacular do que uma diferença polinomial / exponencial. O algoritmo simplex tem uma diferença igualmente espetacular, mas sua análise é consideravelmente mais complicada do que o algoritmo de Brzozowski.
(Além disso, acho que o algoritmo de minimização de DFA de Brzozowski é muito menos conhecido do que merece, mas é claro que é uma questão de gosto.)
fonte
A técnica matemática de ajuste de curvas pode ser usada para fornecer um número infinito de respostas para sua pergunta. Dada uma curva e um intervalo, é possível encontrar facilmente um polinômio que se ajusta à curva com qualquer grau de precisão. Este exemplo da wikipedia mostra como uma onda sin pode ser ajustada com bastante precisão com um polinômio de quarta ordem (a curva azul).
Eu poderia usar polinômios de ordem superior e enganar a heurística de inspeção de plotagem ainda melhor do que este gráfico.
fonte