Ni siquiera soy un estudiante de CS, así que esta podría ser una pregunta estúpida, pero por favor tengan paciencia conmigo ...
En la era anterior a la computadora, solo podemos implementar una estructura de datos de matriz con algo así como una matriz de cajones. Dado que uno tiene que ubicar el cajón con el índice correspondiente antes de extraerle el valor, la complejidad temporal de la búsqueda de matriz es , suponiendo una búsqueda binaria.
Sin embargo, la invención de las computadoras hizo una gran diferencia. Las computadoras modernas pueden leer desde su RAM tan rápido que ahora consideramos que la complejidad temporal de la búsqueda de matriz es (aunque técnicamente no es el caso, porque lleva más tiempo mover el registro a una distancia mayor, etc.)
Otro ejemplo son los diccionarios Python. Si bien uno puede obtener una complejidad de acceso al diccionario de con un método mágico sobrecargado mal escrito (o ridículamente mala suerte, es decir, claves que tienen muchas colisiones hash), generalmente se presume que es O ( 1 ) . En este caso, la complejidad del tiempo depende tanto de la implementación de la tabla hash de los diccionarios Python como de la implementación de las funciones hash de las teclas.__hash__
¿Esto implica que el hardware / implementación puede afectar la complejidad temporal de los algoritmos? (Si bien ambos ejemplos tratan sobre estructuras de datos en lugar de algoritmos, los últimos se basan en el primero, y nunca he oído hablar de la complejidad temporal de las estructuras de datos, por lo que estoy usando el término "algoritmos" aquí)
Para mí, los algoritmos son abstractos y conceptuales, cuyas propiedades como la complejidad del tiempo / espacio no deberían verse afectadas por si se implementan de una manera específica, pero ¿lo son?