No sentido mais formal, o tamanho da entrada é medido em referência a uma implementação do algoritmo da Turing Machine e é o número de símbolos do alfabeto necessários para codificar a entrada.
Naturalmente, isso é bastante abstrato e é muito difícil trabalhar na prática, ou pelo menos muito irritante - precisaríamos considerar como especificar os delímetros, etc. etc. O que acontece normalmente na prática é que procuramos uma medição proxy do tamanho da entrada - algo mais conveniente e acessível, mas que não causa problemas matemáticos em nossa análise.
Usando o exemplo "abcde", normalmente o alfabeto que usamos para a entrada é pequeno; portanto, mesmo usando a medição de proxy de caracteres, sabíamos que, mesmo em uma máquina de Turing, podemos, se nos incomodarmos, especifique uma codificação de entrada que converteria "abcde" para alguma forma codificada que tivesse comprimento no máximo 5 × c para alguma constante c . Essa expansão por uma constante normalmente não faria diferença em nossa análise assintótica, pois descartamos rotineiramente fatores constantes.55×c c
Em um caso diferente, geralmente medimos o tamanho de um gráfico de entrada pelo número de vértices . Claramente, se queremos especificar gráficos arbitrariamente grandes, o tamanho da entrada codificada não é simplesmente n - o que aconteceu com as bordas, por exemplo? O que sabemos é que podemos usar um esquema de codificação razoável que representa o gráfico em N = c ⋅ n 2 log n bits. Isso é um pouco mais de expansão do que constante, mas em muitos casos interessantes, estamos lidando apenas com granularidade de polinômios, e os polinômios se compõem muito bem de várias maneiras - em particular, por exemplo, se determinamos que nosso tempo de execução é O ( p (nnN=c⋅n2logn onde p é um polinômio, sabemos que existe algum polinômio p ′ tal que O ( p ( n ) ) = O ( p ′ ( N ) ) , portanto, quando voltamos à medida formal da entrada , ainda estamos no tempo polinomial.O(p(n))pp′O(p(n))=O(p′(N))
Um lugar onde isso pode cair é quando você está trabalhando com números. Como um número com magnitude pode ser codificado em n = O ( log m ) bits, se nosso tempo de execução fosse O ( m ) , seria O ( 2 n ) - exponencial no tamanho real da entrada - o que tornaria a magnitude m uma má escolha para um proxy para o tamanho da entrada, se quisermos falar sobre a participação em P, por exemplo (quando você chega a Fortemente- N- P completo e Fraco- N- Pmn=O(logm)O(m)O(2n)mPNPNP-complete, lembre-se disso). Por outro lado, se tudo o que nos interessava fosse a decidibilidade, seria uma medida de proxy suficientemente boa.
Portanto, embora não exista uma regra declarada para escolher uma medida de proxy para o tamanho da entrada, o requisito é que a expansão ou contração do tamanho do proxy em comparação com o tamanho da entrada seja compatível com o que você está tentando provar. Como regra geral, mudanças constantes de fator quase nunca importam, fatores polinomiais pequenos normalmente são bons e funcionam na maior parte da teoria básica que você vê, grandes fatores polinomiais ainda podem funcionar na teoria, mas podem ser uma surpresa desagradável na prática, e quantidades exponenciais de mudança são normalmente muito extremas.
Depende do seu modelo de computação e também, infelizmente, às vezes do próprio algoritmo.
No entanto, muitos algoritmos não são medidos em relação ao tamanho de entrada "real". Então você deve examinar atentamente o que a declaração da análise se refere.
fonte