Ich bin noch nicht einmal ein CS-Student, also ist das vielleicht eine blöde Frage, aber bitte trage sie mit mir ...
Im Zeitalter vor dem Computer können wir eine Array-Datenstruktur nur mit so etwas wie einem Array von Schubladen implementieren. Da man die Schublade mit dem entsprechenden Index lokalisieren muss, bevor man den Wert daraus extrahiert, ist die zeitliche Komplexität der Array-Suche , unter der Annahme einer binären Suche.
Die Erfindung der Computer machte jedoch einen großen Unterschied. Moderne Computer können so schnell aus ihrem RAM lesen, dass wir die zeitliche Komplexität der Array-Suche als (auch technisch nicht, da es länger dauert, das Register über eine größere Entfernung zu bewegen usw.).
Ein weiteres Beispiel sind Python-Wörterbücher. Während man eine Wörterbuchzugriffskomplexität von mit einer falsch geschriebenen überladenen Magiemethode (oder einem lächerlichen Pech, dh Schlüsseln mit vielen Hash-Kollisionen) erhält , wird normalerweise angenommen, dass es sich um O ( 1 ) handelt . In diesem Fall hängt die zeitliche Komplexität sowohl von der Implementierung der Hash-Tabellen in Python-Wörterbüchern als auch von der Implementierung der Hash-Funktionen durch die Schlüssel ab.__hash__
Bedeutet dies, dass Hardware / Implementierung die zeitliche Komplexität von Algorithmen beeinflussen kann? (Während es in beiden Beispielen um Datenstrukturen statt Algorithmen geht, bauen die letzteren auf den ersteren auf, und ich habe noch nie von der zeitlichen Komplexität von Datenstrukturen gehört, weshalb ich hier den Begriff "Algorithmen" verwende.)
Algorithmen sind für mich abstrakt und konzeptionell. Ihre Eigenschaften wie die Komplexität von Zeit und Raum sollten nicht davon abhängen, ob sie auf eine bestimmte Art und Weise implementiert werden, aber sind sie dies?