Các ứng dụng của cây hoa hồng là gì?


10

Gần đây tôi đã tìm hiểu về cấu trúc dữ liệu của Cây hoa hồng, nhưng chỉ cần đưa ra datađịnh nghĩa Haskell và mô tả Wikipedia nhỏ về nó, tôi đã gặp một số khó khăn khi hiểu ứng dụng của cây Hoa hồng có thể có.

Để tham khảo, datađịnh nghĩa Haskell :

data RoseTree a = RoseTree a [RoseTree a]

Đối với những người không quen thuộc với Haskell - đó là định nghĩa kiểu dữ liệu đệ quy với kiểu tùy ý a, trong đó hàm tạo kiểu được cung cấp với một kiểu chữ atheo sau là một danh sách loại tùy chọn trống RoseTreecùng loại a.

Theo cách tôi nhìn nhận:

  • Cấu trúc dữ liệu này không được sắp xếp theo mặc định (mặc dù tôi cho rằng hầu hết các ứng dụng thực tế đều thực hiện một số hình thức đặt hàng để tìm kiếm)

  • Cấu trúc dữ liệu không thực thi một số nút cố định trên mỗi lớp tại bất kỳ điểm nào, ngoại trừ gốc toàn cầu, phải có một nút duy nhất

Với lượng thông tin tối thiểu đó, tôi gặp khó khăn khi tìm hiểu khi nào người ta có thể sử dụng loại cây này.

Ngoài câu hỏi trong tiêu đề, nếu tìm kiếm thực sự được thực hiện trong hầu hết các ứng dụng của cây Hoa hồng, thì điều này được thực hiện như thế nào?


1
Ngoài câu trả lời của Derek, hãy xem xét rằng các tài liệu XML về cơ bản được gắn nhãn Cây hoa hồng.
Bút danh

Câu trả lời:


16

Bạn dường như có một tư duy "cấu trúc dữ liệu và thuật toán" quá mức. Không phải mỗi cây là một loại cây tìm kiếm. Cấu trúc dữ liệu thường được thiết kế để tương ứng hoặc nắm bắt các khía cạnh của mô hình miền.

Biểu thức S gần như chính xác là cây hoa hồng. (Hay đúng hơn, tôi sẽ nói cách chúng thường được coi là cây hoa hồng. Wikipedia đúng khi nói chúng giống cây nhị phân hơn, nhưng những gì bạn có thể gọi là biểu thức S "đúng" chỉ khác một chút so với cây hoa hồng.) Ở bất kỳ giá nào, bạn có thể sử dụng chúng làm đại diện chung cho cây cú pháp trừu tượng. Lợi ích của việc này là bạn có thể dễ dàng viết các thao tác chung, ví dụ: "tìm tất cả các biến" hoặc "tham số hoán đổi" hoặc "đổi tên biểu tượng này". Nó cũng có thể mở rộng ở chỗ việc thêm một loại nút mới vào cú pháp trừu tượng của bạn thường không yêu cầu thực sự thay đổi bất cứ điều gì. Nhược điểm là thực sự không có bất kỳ ràng buộc nào, vì vậy nó không phải là một tiên nghiệm ngăn bạn viết vô nghĩa. Điều này có thể được giảm thiểu cho người dùng bằng các kỹ thuật loại dữ liệu trừu tượng tiêu chuẩn, nhưng người thực hiện các phép biến đổi và như vậy phải xử lý biểu diễn phi cấu trúc mặc dù họ "biết" rằng đầu vào được cấu trúc thông qua bất biến kiểu dữ liệu. Tất nhiên, khi sự chắc chắn đó bị đặt sai chỗ (có thể do mọi thứ đã thay đổi), các lỗi có xu hướng không thể đoán trước và khó gỡ lỗi.

Trong thực tế, trong khi Data.Treemô-đun trong các thư viện tiêu chuẩn cung cấp một cây hoa hồng, hầu như không ai sử dụng nó trong cộng đồng Haskell. Việc xác định các loại dữ liệu tùy chỉnh nắm bắt rõ ràng các ràng buộc rất dễ dàng đến mức có rất ít lý do để sử dụng một loại thư viện chung. Hơn nữa, đã có một lượng lớn nghiên cứu và thực hành xung quanh việc thực hiện các hoạt động chung đối với các loại tùy chỉnh giúp loại bỏ nhiều lợi ích của việc sử dụng một đại diện chung. Cuối cùng, Haskeller có xu hướng rất ủng hộ các ràng buộc rõ ràng, được thi hành và sẵn sàng trả tiền để có được nó.

Để trả lời câu hỏi cuối cùng của bạn, thông thường việc tìm kiếm AST là không quan trọng và / hoặc AST thường được coi là đủ nhỏ để chỉ cần đi bộ toàn bộ là có thể chấp nhận được. Phải thừa nhận rằng, không có gì lạ khi thu thập các định nghĩa trong một cấu trúc dữ liệu riêng biệt với các tham chiếu vào AST có thể được xem như một loại chỉ mục. Tương tự, một số vượt qua tối ưu hóa sẽ (thường là cục bộ và tạm thời) xây dựng các chỉ mục để đơn giản hóa và tăng tốc hoạt động của chúng. Cấu trúc của AST tương ứng với đầu vào và do đó, nó không thể được "cân bằng lại" hoặc bất cứ thứ gì tương tự. Do đó, không có gì lạ khi chính AST chứa thông tin lập chỉ mục hoặc thông tin để giúp "tìm kiếm".


Câu trả lời tuyệt vời, cảm ơn! Tôi đã không nghĩ về cây Rose trong bối cảnh AST, nhưng nó có ý nghĩa.
Jules
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.