Para pessoas como eu que estudam algoritmos para sobreviver, o modelo padrão de computação do século XXI é a RAM inteira . O modelo pretende refletir o comportamento de computadores reais com mais precisão do que o modelo da máquina de Turing. Computadores do mundo real processam números inteiros de vários bits em tempo constante usando hardware paralelo; não números inteiros arbitrários , mas (como os tamanhos das palavras crescem constantemente ao longo do tempo) também não números inteiros de tamanho fixo .
wwnO(1)
Formalmente, o tamanho da palavra NÃO é uma constantew para fins de análise de algoritmos nesse modelo. Para tornar o modelo consistente com a intuição, exigimos , pois, caso contrário, não podemos nem armazenar o número inteiro n em uma única palavra. No entanto, para a maioria dos algoritmos não numéricos, o tempo de execução é realmente independente de w , porque esses algoritmos não se importam com a representação binária subjacente de sua entrada. O mergesort e o heapsort são executados no tempo O ( n log n ) ; média de 3 corridas rápidas em O ( n 2w≥log2nnwO(nlogn) no pior dos casos. Uma excepção notável é tipo Radix binário, o qual corre em S ( n w ) tempo.O(n2)O(nw)
Definir nos fornece o modelo de RAM de custo logarítmico tradicional. Porém, alguns algoritmos de RAM inteira são projetados para tamanhos de palavras maiores, como o algoritmo de ordenação inteira em tempo linear de Andersson et al. , Que requer w = Ω ( log 2 + ε n ) .w=Θ(logn)w=Ω(log2+εn)
Para muitos algoritmos que surgem na prática, o tamanho da palavra simplesmente não é um problema, e podemos (e fazemos) recorrer ao modelo de RAM de custo uniforme muito mais simples. A única dificuldade séria vem de multiplicação aninhada, que pode ser usado para construir muito grandes inteiros muito rapidamente. Se pudéssemos executar aritmética em números inteiros arbitrários em tempo constante, poderíamos resolver qualquer problema no PSPACE em tempo polinomial .w
Atualização: devo mencionar também que há exceções ao "modelo padrão", como o algoritmo de multiplicação inteira de Fürer , que usa máquinas de Turing multitape (ou equivalente, a "bit RAM") e a maioria dos algoritmos geométricos, que são analisados teoricamente. modelo "real RAM" limpo, mas idealizado .
Sim, esta é uma lata de vermes.