Tôi đang tìm cấu trúc dữ liệu trong Haskell hỗ trợ cả lập chỉ mục nhanh và nối nhanh. Đây là một vấn đề ghi nhớ phát sinh từ đệ quy.Haskell: Datastruture với O (1) nối thêm và O (1) lập chỉ mục?
Từ cách vectơ hoạt động trong C++ (có thể thay đổi, nhưng điều đó không quan trọng trong trường hợp này) có vẻ như vectơ bất biến với cả (được phân bổ) O (1) nối thêm và O (1) lập chỉ mục có thể thực hiện được (ok, không, hãy xem bình luận cho câu hỏi này). Đây có phải là poossible trong Haskell hay tôi nên đi với Data.Sequence trong đó có (AFAICT anyway) O (1) nối thêm và O (log (min (i, n-i))) lập chỉ mục?
Trên ghi chú có liên quan, với tư cách là một newbie Haskell, tôi thấy mình khao khát một hướng dẫn thực tế, ngắn gọn về cấu trúc dữ liệu Haskell. Lý tưởng nhất điều này sẽ cung cấp một cái nhìn tổng quan khá toàn diện về các cấu trúc dữ liệu thực tế nhất cùng với các đặc tính hiệu năng và các con trỏ tới các thư viện Haskell nơi chúng được thực hiện. Có vẻ như có rất nhiều thông tin trên mạng, nhưng tôi thấy nó có một chút phân tán. Tôi có hỏi quá nhiều không?
Tôi chắc chắn không có cấu trúc dữ liệu nào tồn tại. Nếu tất cả các phần phụ của bạn diễn ra một cách tuyến tính, hãy sử dụng 'Data.Vector' vì sự hợp nhất sẽ cho bạn hiệu suất bạn muốn, nếu không hãy sử dụng' Data.Sequence' –
Cảm ơn. Tôi nghĩ rằng nó có thể được, nhưng có thể chuyên ngành ... Bạn có thể giải thích những gì bạn có nghĩa là bởi 'tất cả các phụ của bạn happend tuyến tính'? Bạn có ý nghĩa với chỉ số tăng tuyến tính? Dường như với vector, mỗi thao tác sẽ vẫn là O (n) ... – Paul
về cơ bản, nếu bạn có thể nghĩ rằng vectơ được "luồn" qua mã của bạn theo cách không tiết kiệm được các giá trị trung gian, các phụ thêm có thể là " hợp nhất "thành một hoạt động duy nhất. –