Tôi muốn lưu một Btree (không chắc chắn tệp nhị phân) trong tệp đĩa. và sau đó đọc nó vào bộ nhớ. một số lần truyền tải cấp bậc có thể là một cách tốt cho Btree nhị phân. nhưng nếu nó không phải là nhị phân. Tôi xây dựng Btree từ leafnode đến rootnode trong bộ nhớ. Tôi tin rằng tôi phải xác định một số cấu trúc trong tệp đĩa và xuất ra các nút cây. sử dụng một số thẻ phụ để xác định một nút trong tệp? cách truyền tải có thể là vấn đề chính ở đây. Tôi không tìm ra cách tốt để lưu các nút và các con trỏ. và sau đó đọc. xây dựng cây trong bộ nhớ. bất kỳ ý tưởng hay nào ?. cảm ơn rất nhiều.lưu Btrees vào một tệp đĩa và đọc nó
Trả lời
Nếu bạn thực sự muốn làm điều gì đó tương tự, bạn chỉ có thể gán tại mỗi nút một id và lưu các nút ở định dạng đó:
[giá trị node-id trái nút-id phải nút-id]và sau đó truy cập vào cây với tìm kiếm rộng đầu tiên.
Khi bạn muốn xây dựng lại cây, tạo ra một bản đồ id-> nút và sau đó đọc ngược file: như vậy, khi bạn đọc một kỷ lục, tạo ra các nút, đăng ký nó vào bản đồ và gán bên trái và nút phải tìm nạp các nút từ bản đồ.
Một tùy chọn cũng sẽ tiết kiệm được mức của nút và sử dụng BFS để tái tạo lại cây. Giá trị của nút sẽ quyết định nếu là con trái hoặc phải. –
Đối với mỗi nút xác định một số cấu trúc dữ liệu sẽ giữ cho bạn cùng một thông tin mà nút có và thêm vào trường cấu trúc bổ sung sẽ đánh dấu cho bạn bù đắp trong tệp cho con trai tiếp theo. Và làm cho trường trên cùng của cấu trúc đó là kích thước thực, vì bạn không biết bạn đang tìm loại cây nào. Bây giờ bằng cách nhảy qua tập tin bạn sẽ có thể tái tạo lại cây của bạn. Tôi chắc chắn giải pháp của tôi không phải là cuối cùng, nhưng tôi hy vọng nó có thể là điểm tốt cho bạn.
Bạn có thể muốn xem Protocol Buffers. Chúng nhỏ gọn, nhị phân, có thể mở rộng, dễ đọc và viết và có sẵn trong C++, Java và Python (cũng như triển khai của bên thứ ba bằng các ngôn ngữ khác).
Bạn có thể xác định thông báo bộ đệm giao thức cho nút BTree, với bù đắp tệp cho nút con và chỉ cần tuần tự hóa nó thành đĩa theo cách hiển nhiên.
Kỹ thuật thông thường cho B-Trees là đảm bảo rằng kích thước của một nút bằng kích thước khối của đĩa và mmap tệp đĩa. Bạn không chỉ định ngôn ngữ lập trình nào bạn đang làm việc, vì vậy nó có thể đơn giản như một diễn viên trong C, hoặc một cái gì đó phức tạp hơn chẳng hạn như tạo các đối tượng flyweight để bọc lên một java.nio.IntBuffer. Dù bằng cách nào, phần lớn lợi thế của cây B là bạn không phải tải tất cả cùng một lúc, nhưng có thể nhảy xung quanh nó khá hiệu quả.
- 1. Zend Framework: Cách đọc tệp đính kèm email (và lưu vào đĩa)?
- 2. Lưu NSMutableArray vào đĩa
- 3. PHP lưu zip vào đĩa
- 4. Cách đọc tệp .fit từ đĩa
- 5. Đọc và ghi vào đĩa DVD/CD - Java
- 6. Tải về một tập tin pdf và lưu nó vào sdcard và sau đó đọc nó từ đó
- 7. Có thể lưu một cụm động vào đĩa không?
- 8. đọc tệp PPM và lưu trữ nó trong một mảng; được mã hóa với C
- 9. Lưu TObject vào một Tệp
- 10. Làm cách nào để lưu tệp vào đĩa cứng trong một chuỗi riêng biệt?
- 11. Mongoengine FileField được lưu vào đĩa?
- 12. Có cách nào để lập trình đọc một tệp từ đĩa TrueCrypt vào bộ nhớ không?
- 13. Đọc và ghi vào một tệp trong khi giữ khóa
- 14. Lưu Nội dung NSCache vào Đĩa
- 15. Lưu trữ tệp trên đĩa hoặc MongoDB
- 16. Java: Đọc một tệp vào một mảng
- 17. Làm thế nào để lưu tệp vào đĩa một cách an toàn trong Android?
- 18. Làm cách nào để đọc dòng thứ N của một tệp và in nó vào một tệp mới?
- 19. Đọc động trong tệp python và thực hiện nó một cách an toàn
- 20. Lưu CGImageRef vào tệp png?
- 21. Lưu vào đĩa cơ sở dữ liệu trong bộ nhớ
- 22. đọc/ghi một đối tượng vào tệp
- 23. Cách đọc tệp và ghi vào tệp văn bản?
- 24. Làm cách nào để trích xuất tệp từ tài nguyên được nhúng và lưu tệp đó vào đĩa?
- 25. Tạo Sổ làm việc với tên tùy chỉnh mà không lưu nó vào đĩa
- 26. Do btrees và b + trees chỉ lưu trữ dữ liệu ở các lá?
- 27. Làm thế nào để đọc một tài nguyên nhúng dưới dạng mảng byte mà không cần ghi nó vào đĩa?
- 28. Tệp zip truy cập ngẫu nhiên mà không cần ghi nó vào đĩa
- 29. Đọc từ tập tin, xóa nó, ghi vào nó
- 30. Làm cách nào để tạo tệp zip mà không lưu vào đĩa bằng Java?
Bạn không thể lưu danh sách giá trị và tạo lại giá trị trong thời gian chạy? – akappa
Bạn có vẻ khó hiểu "cây nhị phân" và "Btree". Có lẽ bạn nên làm rõ điều đó trước. http://en.wikipedia.org/wiki/B-tree http://en.wikipedia.org/wiki/Binary_search_tree – bendin