Giả sử chúng tôi có một mảng chưa được sắp xếp và danh sách được liên kết. Trường hợp xấu nhất khi tìm kiếm phần tử cho cả hai cấu trúc dữ liệu sẽ là O (n), nhưng câu hỏi của tôi là:Mảng và Danh sách được Liên kết theo địa phương
Liệu mảng có còn nhanh hơn do sử dụng không gian trong bộ nhớ cache hay không cache làm cho việc sử dụng địa phương chi nhánh cho phép các danh sách liên kết được nhanh như bất kỳ mảng nào?
Sự hiểu biết của tôi về mảng là nếu một phần tử được truy cập, khối bộ nhớ đó và nhiều khối xung quanh được đưa vào bộ nhớ cache cho phép truy cập bộ nhớ nhanh hơn nhiều.
Sự hiểu biết của tôi về danh sách được liên kết là vì đường dẫn sẽ được thực hiện để đi qua danh sách có thể dự đoán được, bộ nhớ cache sẽ khai thác và vẫn lưu trữ các khối bộ nhớ phù hợp ngay cả khi các nút trong danh sách có thể ở xa ngoài heap.
"Địa phương chi nhánh" này bạn nói đến là gì? Làm thế nào có thể bộ nhớ cache có được xung quanh độ trễ của bộ nhớ chính? Vui lòng mô tả những gì bạn nghĩ rằng bộ nhớ cache thực hiện với các nút danh sách được liên kết. – delnan
@delnan Bạn có thể đọc về địa phương chi nhánh tại đây: http://en.wikipedia.org/wiki/Locality_of_reference Tôi không biết câu trả lời cho câu hỏi thứ 2 của bạn. Tôi giải thích những gì tôi nghĩ rằng bộ nhớ cache có thể làm với các nút ở phần cuối của câu hỏi của tôi. – Kacy
Mô tả về địa phương chi nhánh có vẻ là về một tập hợp nhỏ các lựa chọn thay thế, như mục tiêu của lệnh chi nhánh (do đó tên). Ngược lại, nút tiếp theo của danh sách được liên kết có thể là * ở bất kỳ đâu *. Đối với câu hỏi thứ hai của tôi: Vấn đề lưu trữ sửa chữa không phải là chủ yếu giới hạn băng thông nhưng hạn chế độ trễ. Việc tải một khối liên tục lớn vào bộ nhớ cache cùng một lúc (vì nó xảy ra đối với mảng/mảng không gian) là một sự cải tiến vì bộ nhớ cache chỉ phải trả chi phí thời gian chờ một lần. Vì vậy, câu hỏi của tôi là, làm thế nào có thể bộ nhớ cache tải n nút của một danh sách liên kết mà không phải trả chi phí độ trễ n lần? – delnan