Angenommen, wir haben eine Halbgruppe mit Elementen S = { s 1 , s 2 , … , s n } . Unser Ziel ist es , rechen Produkte s i ∘ s i + 1 ∘ ⋯ ∘ s j .
In ihrer Arbeit "Optimale Vorverarbeitung für die Beantwortung von Online-Produktanfragen" beweisen Alon und Schieber, dass wir jede solche Anfrage in höchstens Schritten (wobei α die inverse Ackermann-Funktion ist) nur unter Verwendung eines linearen Betrags beantworten können der Vorverarbeitung.
Wenn es gewünscht wird, dass jede Abfrage kann beantwortet werden , O ( log ( j - i ) ) Schritte, kann man immer noch diese lineare Vorverarbeitung mit nur tun?
(Diese Frage wird von inspiriert dieser letzten Frage von Brendan McKay bei Mathoverflow.)
cc.complexity-theory
graph-theory
ds.data-structures
Gjergji Zaimi
quelle
quelle
Antworten:
Konstruieren Sie einen geordneten ausgeglichenen Binärbaum mit in den Blättern (in der Reihenfolge). In jedem internen Knoten v wird das Produkt der Blätter des Teilbaums gespeichert, der bei v verwurzelt ist . Diese Vorverarbeitung läuft offensichtlich in O ( n ) Zeit und Raum ab.s1,…,sn v v (n)
Um nun ein Produkt zu berechnen (wobei i < j ), gehen Sie den Baum von i zum am wenigsten verbreiteten Vorfahren (LCA) vonsi∘…∘sj i<j i i j u v u v v j si sj
quelle