Załóżmy, że mamy półgrupę z elementami . Naszym celem jest obliczanie produktów .
W swoim artykule „Optymalne przetwarzanie wstępne dla odpowiedzi na zapytania produktów on-line” Alon i Schieber udowadniają, że możemy odpowiedzieć na każde takie zapytanie w co najwyżej krokach (gdzie jest odwrotną funkcją Ackermanna), używając tylko liniowa ilość przetwarzania wstępnego.
Jeśli pożądane jest, aby na każde zapytanie można było odpowiedzieć w krokach , czy można to zrobić tylko przy użyciu liniowego przetwarzania wstępnego?
(To pytanie jest inspirowana przez tego ostatniego pytania przez Brendan McKay na Mathoverflow).
cc.complexity-theory
graph-theory
ds.data-structures
Gjergji Zaimi
źródło
źródło
Odpowiedzi:
Skonstruuj uporządkowane zrównoważone drzewo binarne za pomocą w liściach (w kolejności). W każdym wewnętrznym węźle przechowuj iloczyn liści poddrzewa zrootowanych na . Ten przerób oczywiście prowadzi w O czasie i przestrzeni.s1,…,sn v v (n)
Teraz, aby obliczyć produkt (gdzie ) przejdź do drzewa od do najmniejszego wspólnego przodka (LCA) i . Zbierz produkty przechowywane w każdym prawym dziecku zwisającym ze ścieżki, z wyłączeniem odpowiedniego dziecka LCA. Innymi słowy, gdy przechodzisz od do jego rodzica , jeśli jest lewym dzieckiem , to podnieś produkt przechowywany w prawym dziecku . Podobnie, przejdź od do LCA i zbierz produkty przechowywane u pozostawionych dzieci zwisających z tej ścieżki. Pomnóż wszystkie te produkty wraz z isi∘…∘sj i<j i i j u v u v v j si sj w kolejności.
źródło