Para muitos problemas, o algoritmo com a melhor complexidade assintótica tem um fator constante muito grande, oculto pela grande notação O. Isso ocorre na multiplicação de matrizes, multiplicação de números inteiros (especificamente, o recente algoritmo de multiplicação de números inteiros O (n log n) de Harvey e van der Hoeven), redes de classificação em baixa profundidade e localização de gráficos menores, para fazer alguns. Tais algoritmos são chamados de algoritmos galácticos.
Observe que, para outros algoritmos, como classificação geral e adição de números inteiros, os algoritmos são conhecidos com ótima complexidade assintótica e pequenos fatores constantes.
Que pesquisa foi feita para separar os algoritmos anteriores dos últimos, de uma perspectiva teórica?
Estou ciente de que as constantes ocultas geralmente são omitidas para ocultar a distinção entre diferentes modelos de computação. No entanto, estou confiante de que, sob uma ampla variedade de modelos diferentes, esses algoritmos galácticos serão mais lentos do que algoritmos assintoticamente piores para entradas do tamanho de um bilhão, por exemplo. A distinção não é sutil, em alguns casos. Foi feito rigoroso?
Por exemplo, alguém poderia inventar um modelo muito simples de computação, como uma máquina de von Neumann com um ISA muito simples, e depois implementar os algoritmos e limitar seus tempos de execução com constantes explícitas. Isso foi feito para uma variedade de algoritmos?
Respostas:
A metodologia não requer a fixação de nenhum modelo específico de computação, embora isso possa ser útil, é claro. Observe também que você pode tentar calcular o pior comportamento ou o esperado, ou ainda outra coisa.
O ingrediente mais importante nessa metodologia é a análise das funções geradoras desses valores. Às vezes, você pode obter aproximações assintóticas muito precisas usando métodos de análises complexas.
De fato, no quicksort, você classifica uma lista classificando recursivamente sublistas, para obter uma melhoria para todos os tamanhos se usar o mergesort em listas menores que o tamanho 10. Uma nota interessante no livro menciona que, em alguma biblioteca da Microsoft de código aberto, o algoritmo de classificação genérica é implementado como quicksort até chegar a um tamanho de 10, após o qual o mergesort é usado. Nos comentários do código, é mencionado que os testes de desempenho mostraram que esse valor é ótimo.
fonte