Biarkan menjadi polinomial di atas bidang hingga yang tetap. Misalkan kita diberi nilai pada beberapa vektor dan vektor .P y ∈ { 0 , 1 } n y
Kami sekarang ingin menghitung nilai pada vektor sehingga dan berbeda pada satu posisi yang tepat (dengan kata lain, kami membalik tepat satu bit dalam ). Apa ruang dan waktu trade-off untuk masalah ini?y ′ ∈ { 0 , 1 } n y y ′ y
Sebagai contoh, jika adalah jumlah monomials di , kita dapat menyimpan koefisien dan nilai-nilai semua monomials di . Jika dibalik, kami memperbaiki nilai setiap monomial yang mengandung dan kemudian nilai menggunakan informasi yang disimpan. Secara keseluruhan, kita membutuhkan waktu dan ruang.P P y i y i P ( y ) O ( r )
(Saya tidak mengatakan apa-apa tentang bagaimana kami mengidentifikasi monomial yang mengandung untuk tujuan. Anda dapat memilih representasi masuk akal , dalam contoh saya berasumsi bahwa kami menyimpan daftar monomial yang berisi untuk setiap .) P y i i
Apa ada yang lebih bagus?
sumber
Sangat mudah untuk memodifikasi pendekatan penyimpanan monomial Anda sehingga setiap pembaruan hanya memakan waktu yang sebanding dengan jumlah monomial yang diubah: perbarui saja nilai polinom total dengan menambahkan nilai baru dan kurangi nilai lama untuk setiap monomial yang diubah.
Jika Anda memiliki rumus baca-sekali untuk (yaitu setiap variabel muncul pada satu daun dari pohon rumus, dan setiap simpul internal adalah operasi aritmatika dua-input seperti plus atau kali) maka Anda dapat mempertahankan nilai P dalam logaritmik waktu per pembaruan menggunakan pohon kompres menyapu di atas rumus. Menerapkan pendekatan ini ke rumus sewenang-wenang, waktu untuk memperbarui variabel yang muncul k kali adalah O ( k log N ) di mana N adalah ukuran rumus. Jadi kecuali untuk faktor log, ini menggeneralisasi batas untuk jumlah monomial yang berubah, dan berlaku untuk jenis ekspansi polinomial yang lebih umum ke dalam formula.P P k O(klogN) N
sumber