Đây là câu hỏi cũ! Tôi tự hỏi nếu có ai đọc điều này. Nhưng nó vẫn hấp dẫn. Trong bình luận của bạn, bạn nói bạn tìm kiếm:
nhanh hơn asymptotics, hoặc liên tục yếu tố, hoặc sử dụng bộ nhớ ít
Vâng, dây thừng có O (1) chèn, và O (n) lặp lại. Bạn không thể làm tốt hơn thế. Substrings và lập chỉ mục rõ ràng sẽ tốn kém hơn. Nhưng hầu hết các trường hợp sử dụng cho các tài liệu lớn không yêu cầu chỉnh sửa hoặc truy cập ngẫu nhiên. Nếu bạn chỉ nối vào cuối, một vector/danh sách các chuỗi 1D có thể cải thiện hằng số thời gian chèn. Tôi đã từng sử dụng nó trong JavaScript bởi vì nó có chuỗi ký tự chậm như vậy.
Người ta nói rằng biểu diễn bộ nhớ kém hiệu quả hơn việc sử dụng chuỗi. Tôi nghi ngờ rằng: Nếu bạn làm việc trong một ngôn ngữ có bộ sưu tập rác, thì dây thừng cho phép bạn sử dụng cùng một thể hiện đoạn dây ở nhiều nơi. Trong một sợi dây đại diện cho một tài liệu HTML, sẽ có nhiều yếu tố của DIV
, SPAN
và LINK
. Điều này thậm chí có thể xảy ra tự động giả định các thẻ này được biên dịch hằng số thời gian, và bạn thêm chúng vào dây trực tiếp. Ngay cả đối với các cụm từ ngắn như vậy, tài liệu dây sẽ giảm kích thước đáng kể, với cùng một thứ tự độ lớn như chuỗi gốc. Các chuỗi dài hơn sẽ tạo ra lợi ích ròng.
Nếu bạn cũng làm cho cây đứng đầu chỉ đọc, bạn có thể tạo các nhánh con (cụm từ dài hơn được biểu thị bằng dây thừng), xảy ra nhiều lần hoặc được chia sẻ qua dây dựa trên dây. Nhược điểm của việc chia sẻ này là các phần dây shard như vậy không thể thay đổi: để chỉnh sửa chúng, hoặc để cân bằng cây bạn cần phải sao chép đồ thị đối tượng. Nhưng điều đó không quan trọng nếu bạn chủ yếu là nối và lặp lại. Trong một máy chủ web, bạn có thể giữ một subrope mà repesents tuyên bố CSS stylesheet được chia sẻ trên tất cả các tài liệu HTML phục vụ bởi máy chủ đó.
Nguồn
2011-02-03 20:00:44
Tôi đã đề cập đến chủ đề này trong vài giây từ http://wiki.sharpdevelop.net/AvalonEdit.ashx và muốn biết chính xác điều tương tự :-) Hãy xem ... – jdehaan
Loại cải tiến nào là bạn hy vọng tìm thấy? –
Nhanh hơn tiệm cận, hoặc các yếu tố không đổi, hoặc sử dụng bộ nhớ ít hơn. –