Preprocessing optimal untuk jenis pertanyaan tertentu

11

Misalkan kita memiliki semigroup dengan elemen S = { s 1 , s 2 , ... , s n } . Tujuan kami adalah menghitung produk s is i + 1s j .(S,)S={s1,s2,...,sn}ssayassaya+1sj

Dalam makalah mereka "Pemrosesan yang Optimal untuk menjawab pertanyaan produk on-line" Alon dan Schieber membuktikan bahwa kita dapat menjawab setiap permintaan seperti itu di paling banyak langkah (di mana α adalah fungsi Ackermann terbalik) dengan hanya menggunakan jumlah linier preprocessing.HAI(α(n))α

Jika diinginkan bahwa setiap kueri dapat dijawab dalam langkah O ( log ( j - i ) ) , dapatkah seseorang masih melakukan ini dengan hanya preprocessing linier?ssayassaya+1sjHAI(catatan(j-saya))

(Pertanyaan ini terinspirasi oleh ini pertanyaan terbaru oleh Brendan McKay di Mathoverflow.)

Gjergji Zaimi
sumber
1
dapatkah Anda menambahkan tautan ke pertanyaan MO?
Suresh Venkat
1
Adakah alasan untuk itu menjadi semi-grup dan bukan grup?
Huck Bennett
1
@Huck: Jika itu grup maka konstruksi Noam di tautan di atas memberikan algoritma seperti itu.
Gjergji Zaimi

Jawaban:

2

Bangun pohon biner seimbang teratur dengan di daun (dalam urutan). Di setiap simpul internal v simpan produk daun subtree yang berakar pada v . Preprocessing ini jelas berjalan dalam O ( n ) waktu dan ruang.s1,...,snvv(n)

Sekarang, untuk menghitung suatu produk (di mana i < j ) berjalan di atas pohon dari i ke leluhur yang paling tidak umum (LCA) dari i dan j . Kumpulkan produk yang disimpan di setiap anak kanan yang menggantung di jalan, tidak termasuk anak kanan LCA. Dengan kata lain, saat Anda naik dari Anda ke induknya v , jika Anda adalah anak kiri dari v , kemudian mengambil produk yang disimpan di anak kanan v . Demikian pula, berjalan dari jssaya...sjsaya<jsayasayajkamuvkamuvvjke LCA dan mengumpulkan produk yang disimpan pada anak-anak kiri yang tergantung di jalur itu. Lipat gandakan semua produk ini, bersama dengan dan s j secara berurutan.ssayasj

Ari
sumber