Tôi thậm chí không phải là một sinh viên CS, vì vậy đây có thể là một câu hỏi ngu ngốc, nhưng xin vui lòng chịu đựng với tôi ...
Trong kỷ nguyên tiền máy tính, chúng ta chỉ có thể thực hiện một cấu trúc dữ liệu mảng với một cái gì đó giống như một mảng các ngăn kéo. Vì người ta phải định vị ngăn kéo với chỉ mục tương ứng trước khi trích xuất giá trị từ nó, độ phức tạp thời gian của tra cứu mảng là , giả sử tìm kiếm nhị phân.
Tuy nhiên, việc phát minh ra máy tính đã tạo ra một sự khác biệt lớn. Các máy tính hiện đại có thể đọc từ RAM của chúng nhanh đến mức bây giờ chúng ta coi độ phức tạp của thời gian tìm kiếm mảng là (thậm chí về mặt kỹ thuật không phải là trường hợp này, vì phải mất nhiều thời gian hơn để di chuyển thanh ghi qua một khoảng cách lớn hơn, v.v.)
Một ví dụ khác là từ điển Python. Mặc dù người ta có thể có được độ phức tạp truy cập từ điển của bằng phương pháp ma thuật quá tải bằng văn bản (hoặc xui xẻo, tức là các khóa có nhiều va chạm băm), nó thường được coi là . Trong trường hợp này, độ phức tạp thời gian phụ thuộc vào cả việc thực hiện bảng băm của từ điển Python và việc thực hiện các hàm băm của các khóa.O ( 1 )__hash__
Có phải điều này ngụ ý rằng phần cứng / thực hiện có thể ảnh hưởng đến độ phức tạp thời gian của các thuật toán? (Mặc dù cả hai ví dụ là về cấu trúc dữ liệu thay vì thuật toán, cái sau được xây dựng dựa trên cấu trúc trước và tôi chưa bao giờ nghe về sự phức tạp về thời gian của cấu trúc dữ liệu, vì vậy tôi đang sử dụng thuật ngữ "thuật toán" ở đây)
Đối với tôi, các thuật toán là trừu tượng và mang tính khái niệm, những thuộc tính như độ phức tạp thời gian / không gian không bị ảnh hưởng bởi liệu chúng có được thực hiện theo một cách cụ thể không, nhưng chúng có phải không?