Vì vậy, tôi đọc this Hướng dẫn TopCoder về RMQ (Phạm vi truy vấn tối thiểu) và tôi có một câu hỏi lớn.Phạm vi truy vấn tối thiểu theo phương pháp <O(n), O(1)> (từ cây đến hạn chế RMQ)
Trên phần mà ông giới thiệu approach, những gì tôi có thể hiểu được cho đến bây giờ là thế này:
(Cách tiếp cận toàn bộ thực sự sử dụng phương pháp giới thiệu trong Sparse Table (ST) Algorithm, Reduction from LCA to RMQ và from RMQ to LCA)
Với một mảng A [N], chúng ta cần phải biến đổi nó thành một cây Cartesian, do đó làm cho một vấn đề RMQ một vấn đề LCA (tổ tiên chung thấp nhất). Sau đó, chúng tôi có thể nhận được một phiên bản đơn giản của mảng A, và làm cho nó một vấn đề hạn chế RMQ.
Vì vậy, về cơ bản nó là hai biến đổi. Vì vậy, RMQ đầu tiên để LCA một phần là đơn giản. Bằng cách sử dụng một ngăn xếp, chúng ta có thể thực hiện phép biến đổi trong thời gian O (n), dẫn đến một mảng T [N] trong đó T [i] là phần tử cha của phần tử i. Và cây đã hoàn thành.
Nhưng dưới đây là những gì tôi không thể hiểu được. Cách tiếp cận O (n) cần một mảng trong đó |A[i] - A[i-1]| = 1
và mảng đó được giới thiệu trong phần Reduction from LCA to RMQ của hướng dẫn. Điều đó liên quan đến một tour du lịch Euler của cây này. Nhưng làm thế nào điều này có thể đạt được với kết quả cuối cùng của tôi từ biến đổi? Cách tiếp cận của tôi với nó không phải là tuyến tính, vì vậy nó nên được coi là xấu trong cách tiếp cận này, những gì sẽ là cách tiếp cận tuyến tính cho điều này?
UPDATE: Điểm mà nhầm lẫn tôi
Here's the array A[]:
n : 0 1 2 3 4 5 6 7 8 9
A[n]: 2 4 3 1 6 7 8 9 1 7
Here's the array T[]:
n : 0 1 2 3 4 5 6 7 8 9
T[n]: 3 2 0 * 8 4 5 6 3 8 // * denotes -1, which is the root of the tree
//Above is from RMQ to LCA, it's from LCA to RMQ part that confuses me, more below.
Một bức tranh của cây:
Một Euler Tour cần biết con của mỗi nút, giống như một DFS (Depth- Tìm kiếm đầu tiên) trong khi T [n] chỉ có gốc của mỗi phần tử, không phải là con.
Tôi không chắc tôi hiểu ý của bạn là gì "làm sao điều này có thể đạt được với kết quả cuối cùng của tôi từ biến đổi". Bạn có thể giải thích cụ thể về điều gì khiến bạn bối rối không? – templatetypedef
@templatetypedef Được rồi, tôi sẽ thêm nó vào câu hỏi. –
@templatetypedef Đã thêm. –