Temukan sisa polinomial tetap besar ketika dibagi dengan polinomial kecil yang tidak diketahui


9

Asumsikan kita beroperasi di bidang yang terbatas. Kami diberi p polinomial tetap besar (x) (dari, katakanlah, derajat 1000) di atas bidang ini. Polinomial ini diketahui sebelumnya dan kami diizinkan untuk melakukan perhitungan menggunakan banyak sumber daya dalam "tahap awal." Hasil ini dapat disimpan dalam tabel pencarian yang cukup kecil.

Pada akhir "fase awal", kita akan diberi sedikit polinomial q (x) (dari, katakanlah, derajat 5 atau kurang).

Apakah ada cara cepat untuk menghitung p (x) mod q (x) mengingat kita diizinkan untuk melakukan beberapa perhitungan rumit dalam "fase awal"? Salah satu cara yang jelas adalah menghitung p (x) mod q (x) untuk semua nilai yang mungkin dari q (x). Apakah ada cara yang lebih baik untuk melakukan ini?

Jawaban:


3

Algoritma berikut bekerja dengan baik jika bidang yang mendasari memiliki urutan yang sangat kecil .s

Misalkan kita tahu tidak dapat direduksi, dengan tingkat yang tetap . Kemudian, mod , kita tahu tahan. Karena itu cukup untuk melakukan pre-compute .d q x s d = x p ( x )qdqxsd=xp(x)modxsdx

Secara umum, dapat terurai menjadi produk dari polinomial yang tidak dapat direduksi. . Dalam hal ini, argumen yang sama berlaku untuk komputasi Modulo setiap secara terpisah, dan kemudian piecing hasil bersama-sama. Jadi kita benar-benar perlu menghitung untuk setiap .q(x) p q 1 , ... , q r p ( x )q=q1qrpq1,,qrd dp(x)modxsdxdd


2

Saya pikir ada cara yang cukup cepat untuk melakukan ini. Biarkan koefisien dari polinomial belum diketahui menjadi , jadi mana adalah sejumlah kecil. Sekarang mari kita mulai menghitung mana , di mana besar dan diketahui. Ini kita lakukan dengan mengurangi derajat menggunakan persamaan sebagai . Akhirnya yang kita dapatkan adalah derajat polinomial, yang koefisiennya adalah polinomial dari (karenab i q = Σ d i = 0 b i x i d pqbiq=i=0dbixidp = D i = 0 a i x i D a i a D x D = - a Dp(modq)p=i=0DaixiDai<d-1biaiqaDxD=aDbdi=1d1bdixDi<d1biaidikenal). Polinomial ini dapat kita hitung dengan cepat begitu kita mendapatkan .q


-1

Lihat komentar luar biasa tentang pos ini di bawah. :)


Preprocessing; input: p(x)

  1. Faktor sebagai .p ( x ) = 1000 i = 0 ( x i - r i )p(x)p(x)=i=01000(xiri)

  2. Simpan ini sebagai tabel dari akar yang berbeda dan multiplisitas masing-masing .r j m jTrjmj

Fase online; input: q(x)

  1. Faktor sebagai .q ( x ) = 5 i = 0 ( x i - r i )q(x)q(x)=i=05(xiri)

  2. Simpan ini sebagai daftar dari akar yang berbeda dan multiplisitas masing-masing .r j m jLrjmj

  3. Sementara tidak kosong, menghapus berikutnya root / multiplisitas dari dan setiap seperti istilah dalam .L TLLT

  4. Baca dari tabel dan output yang dimodifikasi . Tp(x)modq(x)T


Komentar lain:

  • Jelas Anda ingin mengurutkan tabel dan mengaksesnya dengan pencarian biner (atau pohon).T
  • (Misalkan menjadi derajat .) Jika Anda ingin output berada dalam representasi koefisien, Anda bisa melakukan banyak FFT pada akhirnya untuk mendapatkan waktu.p ( x ) p ( x ) mod q ( x ) ˜ O ( d )dp(x)p(x)modq(x)O~(d)
  • Bergantung pada bagaimana Anda memformalkannya, Anda mungkin dapat melakukan pra-komputasi banyak berbagai cara Anda akan mengkombinasikan kembali istilah dalam sebelumnya (gaya pemrograman dinamis), sehingga sebagian besar (atau semua) dari perkalian hanyalah pencarian. Biaya yang mendominasi adalah jumlah pencarian, atau kira-kira . Jika , ini hanya sedikit operasi aritmatika yang konkret.O ( log d ) d = 1000TO(logd)d=1000

2
Di bidang apa Anda memfaktorkan p? Seberapa besar Anda mengharapkan representasi ini dalam hal bidang asli? Dan ketika Anda mengatakan untuk membaca dari tabel dan output yang dimodifikasi, apa maksud Anda?
David Eppstein

2
Ini hanya akan berfungsi jika Anda mengoperasikan bidang yang dan keduanya terpecah. Tetapi ini tampaknya tergantung pada ; khususnya, Anda tidak dapat mengkompilasi akar untuk saja. Lebih jauh lagi, menghitung akar pada bidang yang begitu besar akan memakan waktu (setidaknya); ini tidak lebih baik dari algoritma naif. q q p q | p |pqqpq|p|
David Harris
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.