Em termos gerais, a complexidade do tempo é uma maneira de resumir como o número de operações ou o tempo de execução de um algoritmo aumenta à medida que o tamanho da entrada aumenta.
Como a maioria das coisas na vida, um coquetel pode nos ajudar a entender.
EM)
Quando você chega na festa, precisa apertar a mão de todos (faça uma operação em cada item). À medida que o número de participantes N
aumenta, o tempo / trabalho necessário para apertar a mão de todos aumenta O(N)
.
Por que O(N)
e não cN
?
Há variação na quantidade de tempo que leva para apertar a mão das pessoas. Você pode calcular a média e capturá-lo em uma constante c
. Mas a operação fundamental aqui - apertar a mão de todos - sempre seria proporcional O(N)
, independentemente do que c
fosse. Ao debater se devemos ir a um coquetel, geralmente estamos mais interessados no fato de termos de conhecer todos do que nos mínimos detalhes de como são essas reuniões.
O (N ^ 2)
O anfitrião da festa quer que você jogue um jogo bobo, onde todo mundo conhece todo mundo. Portanto, você deve conhecer N-1
outras pessoas e, porque a próxima pessoa já o conheceu, elas devem conhecer N-2
pessoas e assim por diante. A soma desta série é x^2/2+x/2
. À medida que o número de participantes aumenta, o x^2
termo aumenta rapidamente , então deixamos de lado todo o resto.
O (N ^ 3)
Você precisa conhecer todos os outros e, durante cada reunião, deve falar sobre todos os outros na sala.
O (1)
O anfitrião quer anunciar algo. Eles bebem um copo de vinho e falam alto. Todo mundo os ouve. Acontece que não importa quantos participantes existem, essa operação sempre leva a mesma quantidade de tempo.
O (log N)
O anfitrião colocou todos na mesa em ordem alfabética. Onde está o Dan? Você raciocina que ele deve estar em algum lugar entre Adam e Mandy (certamente não entre Mandy e Zach!). Dado isso, ele está entre George e Mandy? Não. Ele deve estar entre Adam e Fred, e entre Cindy e Fred. E assim por diante ... podemos localizar Dan com eficiência, olhando metade do set e depois metade do set. Por fim, olhamos para O (log_2 N) indivíduos.
O (N log N)
Você pode encontrar onde se sentar à mesa usando o algoritmo acima. Se um grande número de pessoas chegasse à mesa, uma de cada vez, e todas fizessem isso, isso levaria tempo O (N log N) . Esse é o tempo necessário para classificar qualquer coleção de itens quando eles devem ser comparados.
Melhor / pior caso
Você chega na festa e precisa encontrar o Inigo - quanto tempo vai demorar? Depende de quando você chegar. Se todo mundo está andando por aí, você atinge o pior dos casos: levará O(N)
tempo. No entanto, se todos estiverem sentados à mesa, levará apenas um O(log N)
tempo. Ou talvez você possa aproveitar o poder de gritar do anfitrião e levar apenas um O(1)
tempo.
Supondo que o host não esteja disponível, podemos dizer que o algoritmo de busca do Inigo possui um limite inferior O(log N)
e um limite superior O(N)
, dependendo do estado da parte em que você chega.
Espaço e Comunicação
As mesmas idéias podem ser aplicadas para entender como os algoritmos usam espaço ou comunicação.
Knuth escreveu um belo artigo sobre o primeiro, intitulado "The Complexity of Songs" .
Teorema 2: Existem músicas arbitrariamente longas de complexidade O (1).
PROVA: (devido a Casey e Sunshine Band). Considere as músicas Sk definidas por (15), mas com
V_k = 'That's the way,' U 'I like it, ' U
U = 'uh huh,' 'uh huh'
para todos k.