Tôi đang tìm một vùng chứa cung cấp lặp lại nhanh nhất không theo thứ tự thông qua các phần tử được đóng gói. Nói cách khác, "thêm một lần, lặp lại nhiều lần".Cấu trúc dữ liệu OCaml chuẩn với lặp lại nhanh nhất là gì?
Có một trong số các mô-đun chuẩn của OCaml đủ nhanh (để tối ưu hóa thêm nó sẽ vô dụng)? Hoặc một số loại GPL sẵn sàng của bên thứ ba?
AFAIK không chỉ là một trình biên dịch OCaml, vì vậy các khái niệm về việc nhanh chóng là nhiều hơn hoặc ít rõ ràng ...
... Nhưng sau khi tôi thấy một vài câu trả lời, nó xuất hiện, nó không phải. Tất nhiên, có rất nhiều cấu trúc dữ liệu cho phép lặp lại O (n) thông qua vùng chứa có kích thước n. Nhưng nhiệm vụ tôi giải quyết là một trong số đó, nơi mà sự khác biệt giữa O (n) và O (2n) vấn đề ;-).
Tôi cũng thấy rằng Mảng và Danh sách cung cấp thông tin không cần thiết về thứ tự của các phần tử được thêm mà tôi không cần. Có lẽ trong "thế giới chức năng" có tồn tại các cấu trúc dữ liệu để có thể giao dịch thông tin này cho một chút tốc độ lặp lại.
Trong C, tôi sẽ hoàn toàn chọn một mảng đơn giản. Câu hỏi đặt ra là, tôi nên chọn gì trong OCaml?
1) Để trở thành thực thể, không có sự khác biệt giữa O (n) và O (2n). Bạn đang nói về các yếu tố không đổi. 2) Chọn một thứ tự tùy ý cho các phần tử và sửa nó, như trong một mảng hoặc danh sách, chính xác là cách bạn tối ưu hóa để lặp lại. Làm thế nào để bạn mong đợi để cải thiện về "tăng một chỉ số/theo một con trỏ, lấy từ bộ nhớ" cho tốc độ lặp lại? –
1) Có, tôi đang nói về các yếu tố không đổi, vì tôi đang tối ưu hóa nút cổ chai; 2) Tôi không biết làm thế nào để cải thiện điều đó, nhưng là * nó * cách mô-đun Array và Danh sách hoạt động? Mảng không * nói * (trong khi nó * có thể * được * biết *) để chiếm bộ nhớ liên tiếp. Danh sách cần dereference con trỏ (chậm?). Tôi vẫn còn nghi ngờ. –
@Pavel: Điều Chris đang nói là bạn đang lạm dụng ký hiệu Big O. Anh ta không nói rằng bạn không nên quan tâm đến các yếu tố liên tục, chỉ rằng bạn nên rõ ràng hơn trong ký hiệu toán học của bạn khi đề cập đến chúng. – bcat