Nie jestem nawet studentem CS, więc może to być głupie pytanie, ale proszę o wyrozumiałość ...
W erze komputerów wstępnych możemy zaimplementować strukturę danych tablicowych z czymś w rodzaju tablicy szuflad. Ponieważ jeden zlokalizować szuflady z odpowiadającym indeksu przed ekstrakcji wartość z niej złożoność czas odnośnika tablicy jest , przy założeniu, że przeszukiwanie binarne.
Jednak wynalazek komputerów zrobił wielką różnicę. Współczesne komputery potrafią czytać z pamięci RAM tak szybko, że teraz uważamy, że złożoność czasowa wyszukiwania tablicy jest równa (nawet technicznie tak nie jest, ponieważ przeniesienie rejestru na większą odległość zajmuje więcej czasu itp.)
Innym przykładem są słowniki Python. Chociaż można uzyskać złożoność dostępu do słownika za pomocą źle napisanej, przeciążonej metody magicznej (lub śmiesznie pecha, tj. Kluczy mających wiele kolizji skrótu), zwykle przyjmuje się, że jest to O ( 1 ) . W takim przypadku złożoność czasu zależy zarówno od implementacji tablicy hashowej słowników Pythona, jak i od implementacji funkcji skrótu przez klucze.__hash__
Czy to oznacza, że sprzęt / implementacja może wpływać na złożoność czasową algorytmów? (Chociaż oba przykłady dotyczą struktur danych zamiast algorytmów, te drugie są oparte na tych pierwszych i nigdy nie słyszałem o złożoności struktur danych w czasie, dlatego używam tutaj terminu „algorytmy”)
Dla mnie algorytmy są abstrakcyjne i koncepcyjne, na których właściwości, takie jak złożoność czas / przestrzeń, nie powinno mieć wpływu to, czy są one implementowane w określony sposób, ale czy tak?