Câu chuyện chỉ là làm sao cho danh sách liên kết đôi chạy nhanh hơn.
Mình có 1 danh sách gốc gọi là (A) chứa data là mảng kiểu char, key, previous, next.
Thay vì để tất cả thông tin vào trong 1 nốt, mình tạo ra 1 danh sách mới (B) mà trong đó mỗi nốt chỉ chứa key, previous và next và 1 con trỏ (ptr) trỏ tới data nốt đó sẽ chứa.
Data của từng nốt thì mình copy lại từ (A) và cấp phát đâu đó trong vùng nhớ không quan trọng. Các nốt sẽ được nối với nốt tương ứng trong (B) bằng 1 con trỏ. Điều quan trọng là khi mình cần dữ liệu của nốt nào trong cái danh sách gốc (A), mình chỉ cần dùng key truyền vào so sánh với key trong (B). Nếu giống nhau thì mình lấy ra giá trị sử dụng con trỏ (ptr).
(B) là tập hợp những nốt nằm kế sát nhau giống như 1 mảng vậy đó.
Lý thuyết là như vậy. Khi so sánh tìm trên danh sách gốc (A) với cái danh sách mình mới tạo ra thì tốc độ tăng lên khoảng 10 lần (đạt yêu cầu). Nhưng có đứa ra tới 16 lần. Thời gian chuyển từ (A) ra (B) và © của mình là ~140ms, của bạn cùng lớp là dưới 100ms. Cái status thì update tự động thôi và ai cũng là anonymous.
Khi mình hỏi thì nó nói là thay đổi cách copy mảng kiểu char từ (A) qua các nốt dữ liệu. Mình thì làm memcpy. Không biết nó có làm gì đặc biệt khác không.