Tôi cần phải tạo một hàng đợi trong khung nền giữ cấu trúc rất lớn. Tôi không biết hàng đợi này sẽ lớn như thế nào. Matlab không có danh sách liên kết, và tôi lo lắng rằng việc phân bổ lặp lại và sao chép thực sự sẽ làm chậm mã này mà phải được chạy hàng ngàn lần. Tôi cần một số cách để sử dụng cấu trúc dữ liệu có thể phát triển. Tôi đã tìm thấy một vài mục cho danh sách liên kết trong trợ giúp MATLAB nhưng tôi không thể hiểu những gì đang xảy ra. ai đó có thể giúp tôi vấn đề này không?Cấu trúc dữ liệu có thể phát triển trong MATLAB
Trả lời
Vâng, tôi tìm thấy câu trả lời đơn giản:
L = java.util.LinkedList;
Nếu bạn lo lắng việc phân bổ lặp lại và sao chép sẽ làm chậm mã xuống, hãy thử. Nó có thể trong thực tế là rất chậm, nhưng bạn có thể ngạc nhiên.
Chỉ cần tạo một mảng của cấu trúc và tăng gấp đôi kích thước của mảng khi nó chạm đến giới hạn. Điều này cân tốt.
Các cấu trúc được triển khai như thế nào? Di chuyển mảng chỉ có nghĩa là sao chép con trỏ? – rlbond
Theo như tôi biết mọi thứ trong Matlab là dữ liệu. Vì vậy, struct chỉ là dữ liệu. Và bạn không "di chuyển mảng". Chỉ cần tăng gấp đôi kích thước của mảng hiện có. 'x (2 * length (x)) = ... của bạn 'trống' struct' – Pyrolistical
@rlbond: Có, MATLAB cấu trúc và các tế bào không chứa dữ liệu riêng của mình nhưng con trỏ đến dữ liệu để tất cả các hoạt động có giá rẻ. – Mikhail
Tôi đã đăng a solution một lúc trở lại vấn đề tương tự. Cách tôi đã thử nó là bằng cách phân bổ mảng với kích thước ban đầu BLOCK_SIZE
, và sau đó tôi tiếp tục phát triển nó bằng cách BLOCK_SIZE
khi cần thiết (bất cứ khi nào có ít hơn 10%*BLOCK_SIZE
vùng trống miễn phí).
Lưu ý rằng với kích thước khối phù hợp, hiệu suất có thể so sánh với việc phân bổ trước toàn bộ mảng ngay từ đầu. Xin vui lòng xem các bài viết khác cho một chuẩn mực đơn giản tôi đã làm.
Tôi nghĩ rằng được xây dựng trong cell
cấu trúc sẽ phù hợp để lưu trữ cấu trúc growable. tôi đã thực hiện một so sánh giữa:
- tế bào kích thước động, kích thước của tế bào thay đổi mỗi vòng lặp
- Pre-phân bổ tế bào
- Java LinkedList
Code:
clear;
scale = 1000;
% dynamic size cell
tic;
dynamic_cell = cell(0);
for ii = 1:scale
dynamic_cell{end + 1} = magic(20);
end
toc
% preallocated cell
tic;
fixed_cell = cell(1, scale);
for ii = 1:scale
fixed_cell{ii} = magic(20);
end
toc
% java linked list
tic;
linked_list = java.util.LinkedList;
for ii = 1:scale
linked_list.add(magic(20));
end
toc;
Kết quả:
Elapsed time is 0.102684 seconds. % dynamic
Elapsed time is 0.091507 seconds. % pre-allocated
Elapsed time is 0.189757 seconds. % Java LinkedList
Tôi thay đổi scale
và magic(20)
và tìm phiên bản động và được phân bổ trước rất gần với tốc độ. Có lẽ tế bào chỉ lưu trữ cấu trúc giống như con trỏ và hiệu quả khi thay đổi kích thước. Cách Java chậm hơn. Và đôi khi tôi thấy nó không ổn định (nó làm hỏng MATLAB của tôi khi tỉ lệ rất lớn).
- 1. Phát triển iPhone: Loại cấu trúc dữ liệu nào có sẵn?
- 2. Thư mục phát triển Cấu trúc
- 3. Tạo cấu trúc dữ liệu như cấu trúc dữ liệu trong Java
- 4. Văn bản chưa được cấu trúc cho dữ liệu có cấu trúc
- 5. Cấu trúc dữ liệu C#
- 6. Loại dữ liệu cấu trúc trong Mathematica?
- 7. Cấu trúc dữ liệu trong Python
- 8. Cấu trúc và cấu trúc dữ liệu khác nhau
- 9. Sao chép dữ liệu có cấu trúc trong C++
- 10. Cấu trúc dữ liệu Trie - Java
- 11. Có cấu trúc dữ liệu "Đặt" trong .Net không?
- 12. R tương đương với cấu trúc MATLAB?
- 13. Có cấu trúc dữ liệu Multimap tương đương javascript không?
- 14. Tái cấu trúc và kiểm tra phát triển theo hướng
- 15. Python có cấu trúc dữ liệu dây không?
- 16. Có cấu trúc dữ liệu biểu đồ nào được triển khai cho C#
- 17. Định hình lại dữ liệu có cấu trúc dài. Có thể vào cấu trúc rộng bằng chức năng data.table?
- 18. Cấu trúc cây trong cơ sở dữ liệu nosql
- 19. Tóm tắt các chi tiết triển khai cấu trúc dữ liệu trong Clojure
- 20. Java câu hỏi cấu trúc dữ liệu
- 21. Cấu trúc dữ liệu Java Tham chiếu
- 22. Cọ vẽ cấu trúc dữ liệu (Java)
- 23. Hướng dẫn cấu trúc dữ liệu cây trong C
- 24. Mẫu cấu trúc dữ liệu RESTful
- 25. C: Cấu trúc dữ liệu căn chỉnh
- 26. Cấu trúc cơ sở dữ liệu SQL
- 27. Cấu trúc dữ liệu phức tạp Redis
- 28. Thuật toán và cấu trúc dữ liệu
- 29. LaTeX có cấu trúc dữ liệu mảng không?
- 30. Cấu trúc dữ liệu cây Postgresql
Đáng buồn thay, tôi không biết về một hồ sơ MATLAB. – rlbond
@rlbond: Thật là buồn. Nếu bạn muốn tìm hiểu nó, hãy vào menu 'Desktop' của Matlab, và mở profiler. – Jonas