Preelaborazione ottimale per determinati tipi di query


11

Supponiamo di avere un semigruppo con elementi . Il nostro obiettivo è calcolare i prodotti .(S,)S={s1,s2,,sn}sisi+1sj

Nel loro articolo "Pre-elaborazione ottimale per la risposta a domande di prodotti online" Alon e Schieber dimostrano che possiamo rispondere a ciascuna di queste domande in quasi tutti i passaggi (dove è la funzione inversa di Ackermann) usando solo quantità lineare di preelaborazione.O(α(n))α

Se si desidera che a ciascuna query possibile rispondere in fasi , si può ancora fare ciò con una sola elaborazione preliminare lineare?sisi+1sjO(log(ji))

(Questa domanda è ispirata a questa recente domanda di Brendan McKay a Mathoverflow.)


1
puoi aggiungere un link alla domanda MO?
Suresh Venkat,

1
Qualche motivo per essere un semigruppo piuttosto che un gruppo?
Huck Bennett,

1
@Huck: Se si tratta di un gruppo, la costruzione di Noam nel link sopra fornisce un tale algoritmo.
Gjergji Zaimi,

Risposte:


2

Costruisci un albero binario bilanciato ordinato con nelle foglie (in ordine). In ogni nodo interno immagazzinare il prodotto delle foglie della sottostruttura radicata in . Questa pre-elaborazione ovviamente funziona in O tempo e spazio.s1,,snvv(n)

Ora, per calcolare un prodotto (dove ) a piedi l'albero dal al antenato meno comune (LCA) di e . Raccogli i prodotti memorizzati in ogni bambino giusto che pende dal percorso, escluso il bambino giusto dell'LCA. In altre parole, come si va su da al suo genitore , se è un figlio sinistro di , quindi prendere il prodotto conservato in 's figlio destro. Allo stesso modo, cammina da all'LCA e raccogli i prodotti immagazzinati nei bambini di sinistra appesi fuori da quel percorso. Moltiplica tutti questi prodotti, insieme a esisji<jiijuvuvvjsisj in ordine.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.