A Wikipedia lista a complexidade temporal da adição como , onde é o número de bits.n
Esse é um limite inferior teórico rígido? Ou isso é apenas a complexidade do algoritmo conhecido mais rápido atual. Eu quero saber, porque a complexidade da adição sublinha todas as outras operações aritméticas e todos os algoritmos que as utilizam.
É teoricamente impossível obter um algoritmo de adição que seja executado em ? Ou estamos vinculados à complexidade linear para adição.
fonte
Para que a análise de complexidade faça algum sentido formal, é necessário especificar um modelo computacional formal no qual o algoritmo no objeto está sendo executado ou, no mínimo, um modelo de custo , que especifica quais são as operações básicas e seus custos.
Na maioria dos contextos, supõe-se que operações aritméticas levem tempo . Isso geralmente é razoável, pois estamos interessados na complexidade algorítmica, independentemente dos números envolvidos. Isso é chamado de modelo de custo uniforme .Θ ( 1 )
Se os números puderem crescer sem limites, ou se estivermos interessados em analisar as próprias operações, considera-se que as operações aritméticas têm custo , proporcional ao tamanho da entrada.Θ ( | x | )
Agora, as operações podem ter um custo menor que isso? Possivelmente, no entanto, você precisará definir formalmente um modelo computacional no qual isso pode acontecer.
fonte
A entrada para adição é dois números arbitrários . Como eles são arbitrários, você deve ler cada bit e, portanto, o algoritmo é .Ω ( n )
Imagine que seu algoritmo adiciona com êxito 1010100110 e 0010010110 sem ler cada bit. Para que seu algoritmo seja capaz de adicionar entradas arbitrárias , eu devo poder virar aleatoriamente qualquer um desses bits, e o algoritmo ainda gera uma adição correta (mas diferente). Mas se o seu algoritmo não lê todos os bits, como ele poderia dizer que a entrada invertida era diferente da entrada original?
fonte