Bir polinomun tamsayı kökleri


10

Tamsayı katsayıları olan bir polinom in tüm tam sayı köklerini bulmak için hangi algoritmayı kullanabiliriz ?f(x)

Sage'nin katsayıları çok büyük olsa bile birkaç saniye içinde kökleri bulabileceğini gözlemliyorum . Bunu nasıl yapabilir?f(x)


1
Belirli bir polinomun tamsayı kökünü döndürmek için bir algoritma mı arıyorsunuz? Evet ise, bu karar verilemez ve soru burada konu dışıdır. Daha geniş bir kapsamı olan Bilgisayar Bilimi'nden isteyebilirsiniz .
Kaveh

7
Tut. Neden kararsız olmak soruyu konu dışı bırakıyor? Bu meşru, araştırma düzeyinde bir sorudur.
Jeffε

2
Öyleyse, Sage bunu nasıl yapıyor? Kararsız olmak - hatta kararsız olduğu iyi bilinmek bile - sorunu teorik olarak ilgisiz kılmaz. Teorik bilgisayar bilimcileri kararsız sorunları her zaman çözer - örneğin, tüm bilgisayar destekli doğrulamaya bakın.
Jeffε

11
Kaveh, söylediğin doğru değil. Kararsız olan, çok değişkenli Diophantine denklemlerinin çözülebilirliğidir (böylece kolayca sonsuz sayıda gerçek çözüm vardır ve biri tamsayı / rasyonel olanı arar). Fakat bu sorun bir tek-değişkenli bir polinom ile ilgili olup (Kurs Karar verilebilen ait, derecesi olan , orada kadar olan kökleri ve tek tek bir tam sayı olduğu kontrol edilebilir). f(x)f(x)dd
Mehdi Cheraghchi

1
@Pratik Tek değişkenli durumda Gröbner üslerine ihtiyacınız yoktur.
Yuval Filmus

Yanıtlar:


10

katsayılarının tamsayı veya rasyonel olduğunu ve tamsayı kökleri istediğinizi varsayarsak , en basit yaklaşım tamsayı veya rasyonel kök teoremini kullanmaktır. Bkz. Http://en.wikipedia.org/wiki/Rational_root_theorem DW tarafından belirtildiği gibi, sabit katsayıyı çarpanlarına ayırmak zorsa bu sorun yaratabilir (ayrıca bkz. Https://math.stackexchange.com/questions/123018/polynomial- ve tamsayı kökleri )f

Her durumda, Sage dokümantasyonu kök aramayı nasıl yaptıklarını açık bir şekilde açıklıyor: "K, integral bir alansa kullanılan bir sonraki yöntem, polinomu hesaba katmaya çalışmaktır. Bu başarılı olursa, o zaman her derece için faktör a * x + b ise, kök olarak -b / a ekleriz (bu bölüm aslında istenen halkada olduğu sürece). " Bkz. Http://www.sagemath.org/doc/reference/polynomial_rings/sage/rings/polynomial/polynomial_element.html .

Böylece sorunuz tamsayı katsayıları olan polinomları nasıl etkili bir şekilde etkiliyor? Görünüşe göre Sage bunu yapmak için NTL'yi çağırıyor ( NTL ayrıntıları için http://www.shoup.net/ntl/doc/ZZXFactoring.txt adresine bakın).

Asimptotik olarak etkili bir yöntem istiyorsanız, Lenstra, Lenstra ve Lovasz yöntemine başvurabilirsiniz ( https://openaccess.leidenuniv.nl/handle/1887/3810 ).


1
Yardımcı ipucu için teşekkürler! Büyüleyici. Bunu bir algoritmaya nasıl dönüştüreceğinizi ve çalışma süresinin ne olduğunu açıklamak için cevabınızı düzenlemeye istekli olabilir misiniz? En kötü çalışma süresi üstel midir? Eğer öyleyse, daha iyi algoritmalar var mı, yoksa bu yapabileceğiniz en iyi şey mi? Ayrıca, bu yaklaşım sadece rasyonel kökleri değil, irrasyonel kökleri bulamıyor mu?
DW

Soruyu yeniden okuduktan ve farklı yorumladığınızı görünce artık tamamen emin değilim, ama bana ve bazı yorumculara sorunun tamsayı kökleri hakkında sorduğu açık görünüyordu. Bu şekilde okumuyor musun?
minar

@minar, haklısın. Şimdi soruyu tekrar okuduğuma göre, öyle görünüyor. Soruyu çok hızlı okumalıydım. (Başlangıçta soruyu, tamsayı katsayıları olan bir polinomun tüm köklerini istediğimizi ima ederek yanlış yorumladım, ancak soruyu yeniden okurken, bu yanlış bir yorum gibi görünüyor.)
DW

2
Asimptotik ve pratik olarak verimli bir yöntem için, en iyi bilinen algoritma van Hoeij'dir ( buraya bakınız ). Aslında, NTL kullanıyor gibi görünüyor.
Bruno
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.