Я даже не студент CS, так что это может быть глупым вопросом, но, пожалуйста, потерпите меня ...
В до-компьютерную эпоху мы можем реализовать структуру данных массива только с чем-то вроде массива ящиков. Так как перед извлечением значения из него нужно найти ящик с соответствующим индексом, временная сложность поиска в массиве составляет , предполагая бинарный поиск.
Однако изобретение компьютеров имело большое значение. Современные компьютеры могут читать из своей оперативной памяти так быстро, что теперь мы считаем, что временная сложность поиска в массиве равна (даже технически это не так, поскольку для перемещения регистра на большее расстояние и т. Д. Требуется больше времени)
Другой пример - словари Python. В то время как можно получить сложность доступа к словарю с плохо написанным перегруженным магическим методом (или смехотворной неудачей, то есть ключами, имеющими много коллизий хешей), обычно предполагается, что . В этом случае сложность времени зависит как от реализации хеш-таблиц словарей Python, так и от реализации ключей хеш-функций.__hash__
Означает ли это, что аппаратное обеспечение / реализация может влиять на временную сложность алгоритмов? (Хотя оба примера касаются структур данных, а не алгоритмов, последние основаны на первом, и я никогда не слышал о временной сложности структур данных, поэтому здесь я использую термин «алгоритмы»)
На мой взгляд, алгоритмы являются абстрактными и концептуальными, чьи свойства, такие как сложность времени / пространства, не должны зависеть от того, реализованы ли они особым образом, но так ли это?