Các thuật toán hiệu quả để tìm kiếm một bộ sưu tập cây


9

Tôi có một tập dữ liệu lớn về cây và tôi muốn tìm kiếm nó bằng cách chỉ định một treelet (sơ đồ con được kết nối). Truy vấn sẽ trả về tất cả các phần của treelet trong tập dữ liệu.

Có thuật toán hiệu quả để làm như vậy?

Tôi đã nghĩ về một cái gì đó giống như các mảng hậu tố, tuy nhiên, mã hóa các cây một cách ngây thơ dưới dạng các chuỗi (theo thứ tự truyền tải cố định của các nút của chúng) sẽ không hoạt động, vì bộ tìm kiếm có thể có bất kỳ hình dạng tùy ý nào.

CẬP NHẬT:

Một số chi tiết về các trường hợp điển hình tôi mong đợi:

Bộ dữ liệu sẽ bao gồm ít nhất hàng chục nghìn cây, mỗi cây bao gồm khoảng hai mươi đến ba mươi nút. Các cây sẽ không phải là nhị phân, nhưng số con điển hình trên mỗi nút sẽ nhỏ (thường không lớn hơn bốn hoặc năm, mặc dù trong một số trường hợp suy biến, nó có thể đạt tới khoảng ba mươi). Số lượng nhãn sẽ trong hàng chục ngàn.

Tôi cần điều đó cho các ứng dụng NLP: mỗi cây sẽ là phân tích phụ thuộc của một câu, mỗi nút đại diện cho một từ xuất hiện và mỗi nhãn một từ trong từ điển (với một số trang trí).


1
Tập này có một cuộc thảo luận về các thuật toán song song cho đẳng cấu con.
Anthony Labarre

1
Xin lỗi, tôi nghĩ rằng bạn đang tìm kiếm một sơ đồ con được kết nối, mà nhất thiết phải là một cái cây, xuất hiện trong một tập hợp các cây nhất định. Bạn có thể làm rõ những khía cạnh mà vấn đề của bạn khác với mô tả này?
Anthony Labarre

1
Bạn có biết gì về những cái cây trước không? Nhị phân? Có bao nhiêu nhãn nút khác nhau mà bạn mong đợi? Bất kỳ hạn chế về hiệu quả không gian? Tôi hỏi bởi vì nếu bạn đang chạy một tấn truy vấn trên cùng một tập dữ liệu, một giải pháp có thể liên quan đến một số loại lập chỉ mục tích cực.
Eli

1
Bạn có quen thuộc với kết hợp cành cây XML không? Vấn đề của bạn dường như là một trường hợp đặc biệt, vì vậy bạn chỉ cần sử dụng bất kỳ thuật toán và phần mềm hiện có nào.
Marek Chrobak

2
Tôi đoán có lẽ tốt nhất là bỏ qua cấu trúc đồ thị. Đưa ra một truy vấn điển hình, nếu bạn loại bỏ cấu trúc, bạn dự đoán có bao nhiêu cây có tất cả các từ này? Các truy vấn của bạn có bất kỳ ký tự đại diện hoặc chúng chính xác? Nếu các từ trong truy vấn giống như "Con mèo ăn chiếc mũ", thì có bao nhiêu biểu đồ thực sự sẽ có cả hai từ "con mèo" và "chiếc mũ" trong đó? Nếu bạn chỉ lập chỉ mục mỗi từ cho một tập hợp các cây, sau đó giao nhau tất cả các tập hợp, có khả năng bạn có thể ngây thơ tìm kiếm kết quả mà không phải chịu quá nhiều chi phí.
Eli

Câu trả lời:


3

Mặc dù không đặc biệt nhắm vào cây (gốc), tôi nghĩ cấu trúc dữ liệu G-trie có thể hoạt động khá tốt trong cài đặt của bạn. Nó là một sự thích ứng của bộ ba (để tìm kiếm các bộ chuỗi) cho các biểu đồ.


1

Một thời gian trước, tôi đã viết lên thuật toán chuẩn hóa cây của Ronald Read và đưa nó lên wikipedia .

Tôi sẽ tạo một hashtable cho mỗi chữ ký nút bên trong và gắn nhãn chúng với một danh sách các con trỏ trở lại các cây con mà chúng đến từ. Tuy nhiên, nó sẽ chỉ hoạt động cho các treelets với lá thật.

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.