Exemplo de um algoritmo em que um termo de ordem inferior domina o tempo de execução de qualquer entrada prática?

10

A notação Big-O esconde fatores constantes; portanto, existem alguns algoritmos inviáveis ​​para qualquer tamanho de entrada razoável, porque o coeficiente no termo é muito grande.O(n)n

Existem algoritmos conhecidos cujo tempo de execução é mas com algum termo de baixa ordem que é tão grande que, para tamanhos de entrada razoáveis, domina completamente o tempo de execução? Eu gostaria de usar um algoritmo como este e um exemplo em um curso de algoritmos, pois fornece uma boa razão para a notação big-O não ser tudo.O(f(n))o(f(n))

Obrigado!

templatetypedef
fonte
Algoritmos que primeiro configuram uma tabela grande e, em seguida, fazem pesquisas rápidas na tabela para cada item de entrada? Se a tabela for grande o suficiente, o número de itens deverá ser enorme para compensar o custo de criação da tabela. Os mecanismos de pesquisa são um exemplo, se for o número de consultas. n
András Salamon 5/10
Ouvi dizer que a programação linear é assim. O simplex é exponencial, mas mais rápido que os algoritmos polinomiais na prática.
Jmite 5/10
11
Não conheço nenhum algoritmo que atenda às suas necessidades, mas procuraria algo que tenha no máximo tempo de execução linear, pois além disso, duvido muito que os termos menores possam dominar o termo principal para entradas mais razoáveis. Mas talvez o k-way mergesort atenda às suas necessidades, quando usado para classificar big data? O problema é minimizar os acessos à memória secundária, já que eles custam muito tempo - embora eu não tenha muita certeza de que esse seja um exemplo apropriado para o que você deseja demonstrar, e realmente não acho que seja simples o suficiente para seja ilustrativo.
G. Bach
um pouco semelhante a poderosos algoritmos muito complexo de implementar , também consulte o blog rjlipton em algoritmos galácticos
vzn

Respostas:

2

A criptografia é um exemplo, se degenerado. Por exemplo, a quebra da criptografia AES é - tudo o que você precisa fazer é encontrar a chave correta entre um número finito, 2 128 ou 2 192 ou 2 256, dependendo do tamanho da chave (suponha que o texto simples seja conhecido por determinar a chave sem ambiguidade). No entanto, até 2 128 operações levariam todos os computadores hoje (um bilhão ou mais, cada um fazendo cerca de um bilhão de operações por segundo) mais do que a vida útil do universo (cerca de um bilhão de segundos).O(1)2128219222562128


Uma maneira ligeiramente diferente de ilustrar por que o big-O não é tudo é observar que às vezes usamos um algoritmo diferente para tamanhos de entrada pequenos. Por exemplo, tome quicksort. Com a escolha certa de pivô (que é um negócio complicado!), É . O Quicksort opera por meio de divisão e conquista: toda instância envolve fazer muita classificação de pequenas matrizes. Para matrizes pequenas, métodos quadráticos, como a classificação por inserção, têm melhor desempenho. Portanto, para obter o melhor desempenho, uma classificação rápida de uma grande variedade envolve várias execuções de classificação por inserção para tamanhos pequenos.O(nlgn)

Gilles 'SO- parar de ser mau'
fonte
Não acho que quebrar a criptografia seja um exemplo razoável aqui; uma coisa é que, para analisar o problema de encontrar a chave correta assintoticamente, teríamos que considerar as versões teoricamente disponíveis de Rijndael com tamanho de chave não constante, ou seja, quebrar a chave para chaves de tamanho . Caso contrário, poderíamos dizer também que qualquer algoritmo que termina é executado em O ( 1 ) para entrada de tamanho fixo. nO(1)
G. Bach
@ G.Bach O objetivo deste exemplo é que ele é inviável (que a teoria da complexidade associa com alta complexidade), embora seja de tempo constante (em termos do tamanho do texto cifrado).
Gilles 'SO- stop be evil'
2
Eu não acho que seu primeiro exemplo funcione. Como existem apenas muitas opções para verificação, o tempo de execução do algoritmo é , portanto, não há um termo de ordem inferior o ( 1 ) que represente o tempo de execução completo. O(1)o(1)
Templatetypedef
11
@templatetypedef A quebra da criptografia de uma mensagem criptografada em AES é em termos de comprimento da mensagem . O(1)
Gilles 'SO- stop be evil'
1

Dois exemplos vêm à mente do campo da complexidade parametrizada e dos algoritmos FPT. Pode não ser exatamente o que você está procurando, mas aqui vai.

Considere um problema gráfico, como 3-COLORING ou HAM-CYCLE. Ambos os problemas podem ser expressos na lógica monádica de segunda ordem e, portanto, podem ser decididos em tempo linear de gráficos com largura de árvore limitada. Isso é resultado de Bruno Courcelle , mas o algoritmo resultante está longe de ser prático.

O(p9p/2)LO(p2pL)pL

Juho
fonte
2
O(n)o(n)
0

Um pouco relacionados à sua pergunta, são algoritmos conhecidos por terem bom desempenho teoricamente, mas não são usados ​​em problemas reais devido à impraticabilidade em instâncias menores. em outras palavras, como você solicita, o "desempenho anunciado" só é possível para grandes entradas na teoria, não vistas em aplicações práticas. isso às vezes se reflete nas estimativas Big-Oh, outras vezes não exatamente. alguns algoritmos têm um bom "desempenho" teórico, mas são logicamente complexos e nunca foram implementados por ninguém; portanto, o "desempenho" em tamanhos de instância práticos nem sequer é conhecido, por exemplo, como no problema de Fluxo Máximo .

vzn
fonte
Mas são impraticáveis ​​porque os termos de ordem inferior dominam ou porque as constantes nos termos de ordem superior são ruins?
David Richerby
ou uma combinação, seria difícil isolar em cada caso. efetivamente / praticamente é o mesmo efeito.
vzn
-1

Isso é uma piada, mas tem um lado sério ...

O(nregistron)O(n2)

David Richerby
fonte
11
Não, isso é diferente. O Quicksort é útil na prática porque não há termo quadrático para entrada típica, não importa o tamanho do tamanho. Se a escolha do pivô for ruim para um layout de dados, o quicksort exibirá um comportamento quadrático, mesmo para pequenas entradas.
Gilles 'SO- stop be evil'