Truy vấn khả năng truy cập trên cây trong thời gian với tiền xử lý thời gian


7

Tôi được cho một cây vô hướng T theo nghĩa lý thuyết đồ thị thông thường. Đưa ra một đỉnh v và một sự cố cạnh (v,u) cho v , tôi cần trả lời các truy vấn của biểu mẫu trả về bất kỳ lá T nào có thể truy cập từ v với một đường dẫn bao gồm (u,v) và không có sự cố cạnh nào khác v ? Thông tin chính xác hơn, hạn chế là khi cạnh được đưa ra, chúng ta chỉ có thể tiến hành theo hướng đó.

Tôi chỉ có thể thực hiện một DFS và trả lại một chiếc lá được tìm thấy. Tôi nghĩ rằng điều này sẽ mất O(d) thời gian, nơi d là đường kính của T . Tuy nhiên, tôi muốn trả lời một truy vấn trong thời gian O(1) . Hơn nữa, tôi chỉ muốn cho phép thời gian tiền xử lý tuyến tính. Ý tưởng của tôi để đạt được điều này là sử dụng DFS, nhãn lá và sau đó dán nhãn cạnh khi tìm kiếm quay lại. Ý tưởng này có thể hoạt động với một số nỗ lực bổ sung, nhưng tôi thực sự không chắc chắn về các chi tiết.

"Khả năng tiếp cận đồ thị" đã đưa ra một số kết quả, nhưng có lẽ họ đang xử lý các vấn đề phức tạp hơn. Tôi hài lòng với bất kỳ phương pháp nào sử dụng thời gian tiền xử lý O(n+m) và trả lời các truy vấn trong thời gian O(1) .


Đây có phải là một câu hỏi bài tập về nhà, hoặc bạn có một số ứng dụng mà bạn cần những giới hạn đó không? Chú ruột của tôi nói rằng điều đó là không thể, nhưng nếu bạn được hỏi nó như bài tập về nhà, có lẽ là một giải pháp tồn tại.
jmite

Nếu không có gì khác, tôi nghĩ rằng bạn đang xử lý trước có thể sẽ mất thời gian , vì để có được truy vấn , bạn sẽ cần một bảng có một mục nhập cho mỗi cặp cạnh nút. (Điều này có thể đến từ việc khởi tạo bảng của bạn thành tất cả Đúng hoặc Tất cả Sai, ngay cả khi bạn có thể nhanh chóng điền vào các giá trị sau). Bạn có thể cho biết thêm chi tiết về ý tưởng DFS của bạn? Bạn đang sử dụng gì để dán nhãn lá và cạnh của bạn? O(mn)O(1)
jmite

1
@jmite Có cặp cạnh-nút, vì cạnh là sự cố với nút. 2m
Yuval Filmus

@ user9214 Ý tưởng của bạn nghe có vẻ như nó sẽ hoạt động. Bạn có thể nên nhớ "lá cuối cùng được tìm thấy" và sử dụng nó để dán nhãn các nút khi bạn quay lại, xử lý các cạnh phía trước và cạnh sau khác nhau. Hãy thử nó và cho chúng tôi biết làm thế nào nó đi.
Yuval Filmus 17/07/13

Câu trả lời:


5

Vâng, tôi nghĩ rằng bạn có thể làm điều này trong thời gian . Tôi phác thảo một phương pháp dưới đây. Có lẽ có một cách đơn giản hơn để làm điều đó, nhưng những điều sau đây là đủ.O(1)

Sơ chế. Tôi sẽ cho rằng chúng ta có thể xem cây của bạn như một cây có rễ, với một số gốc. Trong quá trình tiền xử lý, chú thích mỗi nút nội bộ với một ví dụ về một chiếc lá là hậu duệ của . Điều này có thể được thực hiện trong thời gian tiền xử lý , bằng cách sử dụng giao dịch từ trên xuống rất đơn giản (DFS).wwO(n+m)

Ngoài ra, xác định đệ quy như sau: nếu có bất kỳ anh chị em nào, thì ; mặt khác, trong đó là cha mẹ của ; và , nơi là gốc rễ của . Trong tiếng Anh, được định nghĩa là nút có được bằng cách bắt đầu từ và tiếp tục đi lên cho đến khi chúng ta đạt đến một nút có hai hoặc nhiều con (hoặc gốc). Trong quá trình tiền xử lý, chúng tôi sẽ tính giá trị của cho mỗi nút và lưu trữ nó được liên kết với . Điều này cũng có thể được tính trongp()wp(w)=wp(w)=p(v)vwp(r)=rrTp(w)wp(w)wwO(n+m) thời gian.

Trả lời một truy vấn. Bây giờ, đây là cách trả lời truy vấn trả về bất kỳ lá nào có thể truy cập từ với một đường dẫn bao gồm và không có sự cố cạnh nào khác chov(u,v)v :

  • Trường hợp 1: Giả sử là con của . Sau đó, trả lời số tiền truy vấn của bạn để trả về bất kỳ lá nào là hậu duệ của . Điều này có thể được thực hiện trong thời gian bằng cách sử dụng chú thích trên .uvuO(1)u

  • Trường hợp 2: Giả sử là cha mẹ của và có ít nhất một đứa con khác. Sau đó, nhìn vào bất kỳ đứa trẻ khác của , gọi nó là . Sau đó, trả lời số tiền truy vấn của bạn để trả về bất kỳ lá nào là hậu duệ của . Điều này có thể được thực hiện trong thời gian bằng cách sử dụng chú thích trên .uvuuwwO(1)w

  • Trường hợp 3: Giả sử là cha mẹ của và không có con khác. Sau đó, hãy để và để là bất kỳ đứa con nào khác của (không phải là tổ tiên của ). Sau đó, trả lời số tiền truy vấn của bạn để trả về bất kỳ lá nào là hậu duệ của . Điều này có thể được thực hiện trong thời gian bằng cách sử dụng chú thích trên .uvuu=p(u)wuvwO(1)w

Trong cả ba trường hợp, câu trả lời cho truy vấn có thể được tính trong thời gian .O(1)

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.