Là bài tập tôi đã viết an implementation của longest increasing subsequence algorithm, ban đầu bằng Python nhưng tôi muốn dịch thành Haskell. Tóm lại, thuật toán liên quan đến một danh sách các số nguyên, trong đó kết quả của mỗi lần lặp là một dãy số nguyên là kết quả của việc thay đổi một phần tử hoặc nối thêm một phần tử vào kết quả trước đó.Tìm kiếm cấu trúc giống như mảng hỗ trợ "thay thế một thành viên" và "nối thêm"
Tất nhiên trong Python bạn chỉ có thể thay đổi một phần tử của mảng. Trong Haskell, bạn có thể xây dựng lại mảng trong khi thay thế một phần tử tại mỗi lần lặp - nhưng điều đó có vẻ lãng phí (sao chép hầu hết các mảng tại mỗi lần lặp).
Nói tóm lại những gì tôi đang tìm kiếm là một hiệu quả Haskell cấu trúc dữ liệu đó là một bộ sưu tập lệnh của 'n' đối tượng và hỗ trợ các hoạt động: lookup i
, replace i foo
, và append foo
(nơi i
là trong [0..n- 1]). Gợi ý?
Bạn chỉ có thể sử dụng một mảng có thể thay đổi. Tôi đã có kinh nghiệm tốt với [MVector] (http://hackage.haskell.org/packages/archive/vector/0.9.1/doc/html/Data-Vector.html#t:MVector). – rampion
MVector có O (n) chắp thêm/khuyết điểm/snoc. –
Tại sao bạn cần 'append'? Kích thước cuối cùng được biết ngay từ đầu. –