Não existe um modelo computacional totalmente satisfatório para analisar tristemente os algoritmos, mesmo no que se poderia considerar um cenário tradicional. Isso pressupõe que todos os dados estejam prontamente acessíveis e que o espaço de trabalho seja efetivamente ilimitado.
A máquina de Turing multi-fita é certamente teoricamente bem especificada e muitos algoritmos foram projetados e analisados nesse modelo ao longo dos anos. No entanto, para alguns, isso não se relaciona suficientemente com o modo como os computadores reais funcionam para realmente ser um bom modelo a ser usado no século XXI. Por outro lado, o modelo de palavra RAM tornou-se popular e parece capturar com mais precisão o funcionamento de computadores modernos (operações em palavras e não bits, acesso constante a locais de memória). No entanto, existem aspectos que são menos que ideais. Por exemplo, não há um modelo de RAM de uma palavra. É preciso primeiro especificar quais operações nas palavras devem ser permitidas em tempo constante. Existem muitas opções para isso, sem uma única resposta aceita. Segundo, o tamanho da palavra w é normalmente definido para aumentar com o tamanho da entrada (que é pelo menos tão rápido quanto log (n)) para permitir que qualquer item na memória seja endereçado usando um número constante de palavras. Isso significa que é preciso imaginar uma classe infinita de máquinas nas quais o algoritmo é executado ou, pior ainda, que a máquina muda à medida que você fornece mais dados. Este é um pensamento desconcertante para os mais puros entre meus alunos, pelo menos. Finalmente, você obtém resultados surpreendentes de complexidade com o modelo de palavra-RAM, que pode não corresponder àqueles que aprendemos quando estudante. Por exemplo, a multiplicação de dois números de n bits é o tempo O (n) neste modelo e a simples leitura de uma sequência de n bits é uma operação de tempo sublinear de repente. Isso significa que é preciso imaginar uma classe infinita de máquinas nas quais o algoritmo é executado ou, pior ainda, que a máquina muda à medida que você fornece mais dados. Este é um pensamento desconcertante para os mais puros entre meus alunos, pelo menos. Finalmente, você obtém resultados surpreendentes de complexidade com o modelo de palavra-RAM, que pode não corresponder àqueles que aprendemos quando estudante. Por exemplo, a multiplicação de dois números de n bits é o tempo O (n) neste modelo e a simples leitura de uma sequência de n bits é uma operação de tempo sublinear de repente. Isso significa que é preciso imaginar uma classe infinita de máquinas nas quais o algoritmo é executado ou, pior ainda, que a máquina muda à medida que você fornece mais dados. Este é um pensamento desconcertante para os mais puros entre meus alunos, pelo menos. Finalmente, você obtém resultados surpreendentes de complexidade com o modelo de palavra-RAM, que pode não corresponder àqueles que aprendemos quando estudante. Por exemplo, a multiplicação de dois números de n bits é o tempo O (n) neste modelo e a simples leitura de uma sequência de n bits é uma operação de tempo sublinear de repente.
Dito tudo isso, se você quiser apenas saber se é provável que seu algoritmo seja executado rapidamente, será mais provável :-)