Quindi, ho letto il tutorial TopCoder this su RMQ (Intervallo query minima) e ho ricevuto una grande domanda.Intervallo Query minima <O(n), O(1)> approccio (da albero a RMQ limitato)
Sulla sezione dove ha introdotto il approach, cosa posso capire fino ad ora è questo:
(L'intero approccio effettivamente utilizza metodologia introdotta nel Sparse Table (ST) Algorithm, Reduction from LCA to RMQ e from RMQ to LCA)
Dato un array A [N], abbiamo bisogno di trasformarlo in un albero cartesiano, rendendo così un problema di RMQ un problema di LCA (Lowest Common Ancestor). Più tardi, possiamo ottenere una versione semplificata dell'array A e renderlo un problema RMQ limitato.
Quindi sono fondamentalmente due trasformazioni. Quindi la prima parte da RMQ a LCA è semplice. Usando una pila, possiamo trasformare la trasformazione in tempo O (n), ottenendo un array T [N] dove T [i] è l'elemento che è il genitore. E l'albero è completato.
Ma ecco quello che non riesco a capire. L'approccio O (n) richiede un array dove |A[i] - A[i-1]| = 1
e tale array viene introdotto nella sezione Reduction from LCA to RMQ del tutorial. Ciò comporta un Euler Tour di questo albero. Ma come può essere raggiunto con il risultato finale della trasformazione? Il mio approccio ad esso non è lineare, quindi dovrebbe essere considerato negativo in questo approccio, quale sarebbe l'approccio lineare per questo?
UPDATE: Il punto che mi
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.
confondere un quadro della struttura:
A Eulero Tour ha bisogno di conoscere il figlio di ogni nodo, proprio come un DFS (depth Prima ricerca) mentre T [n] ha solo la radice di ciascun elemento, non il figlio.
Non sono sicuro di capire cosa intendi con "come può essere raggiunto con il risultato finale della trasformazione". Puoi approfondire ciò che ti sta confondendo in particolare? – templatetypedef
@templatetypedef Va bene, lo aggiungerò alla domanda. –
@templatetypedef Aggiunto. –