Eu nem sou estudante de CS, então essa pode ser uma pergunta estúpida, mas por favor, tenha paciência comigo ...
Na era pré-computador, só podemos implementar uma estrutura de dados de matriz com algo como uma matriz de gavetas. Como é necessário localizar a gaveta com o índice correspondente antes de extrair o valor, a complexidade de tempo da pesquisa de matriz é , assumindo a pesquisa binária.
No entanto, a invenção dos computadores fez uma grande diferença. Computadores modernos podem ler a partir de sua RAM tão rapidamente que agora consideramos a complexidade de tempo da pesquisa em array como (mesmo que tecnicamente não seja o caso, porque leva mais tempo para mover o registro por uma distância maior, etc.)
Outro exemplo são os dicionários Python. Embora se possa obter uma complexidade de acesso ao dicionário de com um método mágico sobrecarregado mal escrito (ou ridiculamente azarado, isto é, chaves com muitas colisões de hash), geralmente é considerado . Nesse caso, a complexidade do tempo depende da implementação da tabela de hash dos dicionários Python e da implementação das chaves das funções de hash.__hash__
Isso implica que o hardware / implementação pode afetar a complexidade do tempo dos algoritmos? (Embora os dois exemplos sejam sobre estruturas de dados em vez de algoritmos, os últimos são criados sobre a primeira e nunca ouvi falar da complexidade temporal das estruturas de dados, por isso estou usando o termo "algoritmos" aqui)
Para mim, os algoritmos são abstratos e conceituais, cujas propriedades como a complexidade do tempo / espaço não devem ser afetadas se elas são implementadas de uma maneira específica, mas são?