Bilinmeyen küçük bir polinom ile bölündüğünde, büyük bir sabit polinomun geri kalanını bulun


9

Sonlu bir alanda faaliyet gösterdiğimizi varsayalım. Bu alanda bize büyük bir sabit polinom p (x) (örneğin, derece 1000) verilir. Bu polinom önceden bilinir ve "başlangıç ​​aşamasında" çok fazla kaynak kullanarak hesaplama yapmamıza izin verilir. Bu sonuçlar makul derecede küçük arama tablolarında saklanabilir.

"Başlangıç ​​aşaması" nın sonunda, küçük bir bilinmeyen polinom q (x) (örneğin derece 5 veya daha az) verilecektir.

"Başlangıç ​​aşaması" nda bazı karmaşık hesaplamalar yapmamıza izin verildiği için p (x) mod q (x) 'i hesaplamanın hızlı bir yolu var mı? Açık bir yol, q (x) 'un tüm olası değerleri için p (x) mod q (x)' yi hesaplamaktır. Bunu yapmanın daha iyi bir yolu var mı?

Yanıtlar:


3

Aşağıdaki algoritmalar yatan alan çok küçük bir düzeni vardır işe yarar .s

Bildiğimiz varsayalım sabit bir derecesi, indirgenemez . Daha sonra mod , beklettiğini biliyoruz . Bu nedenle için ön hesaplama yapmak yeterlidir .qdqxsd=xp(x)şıkxsd-x

Genel olarak, indirgenemez polinomlar . Bu durumda, her bir ayrı ayrı modulo hesaplamak ve ardından sonuçları bir araya getirmek için benzer bir argüman uygulanır . Bu yüzden gerçekten her bir için hesaplamalıyız .q(x)q=q1...qrpq1,...,qrp(x)şıkxsd'-xd'd


2

Bence bunu yapmanın oldukça hızlı bir yolu var. Henüz bilinmeyen polinom katsayıları olsun olmak , yani , bazı küçük bir sayıdır. Şimdi de işlem başlatmak izin burada , burada büyük ve bilinmektedir. Bunu, eşitlikleri olarak kullanarak dereceyi azaltarak yapıyoruz . Sonunda ne olsun bir derecesi olan katsayılarıdır polinomları polinom, beri (qbbenq=Σben=0dbbenxbendp(şıkq)p=Σben=0DbirbenxbenDbirbenbirDxD=-birDbdΣben=1d-1bd-benxD-ben<d-1bbenbirbenbilinir). Bu polinomlar, elde ettikten sonra hızlı hesaplayabiliriz .q


-1

Aşağıda bu yazı ile ilgili mükemmel yorumlara bakın. :)


Ön işleme; giriş: p(x)

  1. faktörü olarak .p(x)p(x)=Πben=01000(xben-rben)

  2. Bunu farklı kökler ve bunların tablosu olarak .Trjmj

Çevrimiçi aşama; girdi: q(x)

  1. Faktör olarak .q(x)q(x)=Πben=05(xben-rben')

  2. Bunu farklı köklerinin listesi ve ilgili .Lrj'mj'

  3. İken boş değil, bir sonraki kök / gelen çok sayıda kaldırma terimler gibi herhangi bir .LLT

  4. Okuyunuz modifiye edilmiş tablodan ve çıkış.p(x)şıkq(x)T


Diğer yorumlar:

  • Açıkçası tablosunu sıralamak ve ikili arama (veya bir ağaç) ile erişmek istiyorsunuz.T
  • (Let derecesini olmak .) Çıkış isterseniz katsayı temsilinde olmak, sadece almak için sonunda FFTs bir demet yapabilirsiniz zaman.dp(x)p(x)şıkq(x)Ö~(d)
  • Nasıl resmileştirdiğinize bağlı olarak, muhtemelen terimleri (dinamik programlama stili) yeniden birleştirmenin çeşitli yollarını önceden hesaplayabilirsiniz , böylece çarpmaların çoğu (veya tümü) sadece aramalardır. Hükmedilen maliyet, aramaların sayısı veya kabaca . Eğer Bu betonun sadece bir avuç, aritmetik işlemler olduğunu.TÖ(günlükd)d=1000

2
Hangi alanda faktoring yapıyorsunuz? Bu temsilin orijinal alan açısından ne kadar büyük olmasını bekliyorsunuz? Ve değiştirilmiş tablodan ve çıktıdan okumayı söylediğinde ne demek istiyorsun?
David Eppstein

2
Eğer bir alan hem de üzerinde faaliyet gösteriyor Bu sadece çalışacak ve bölünmüş. Ama bu bağlı gibi görünüyor ; özellikle, için kökleri önceden hesaplayamazsınız . Ayrıca, bu kadar geniş bir alan üzerinde köklerinin hesaplanması zaman alacaktır (en azından); bu naif algoritmadan daha iyi değildir. pqqpq|p|
David Harris
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.