çarpma


10

Ben bakıyordu burada , ben ikisinin çoğalması için en iyi çalışma zamanını fark numaralar -bits olan ama kolayca fark edebilirsiniz çalışan algoritma .O ( n log n 2 O ( log n ) O ( n log n )nÖ(ngünlükn2Ö(günlük*n)Ö(ngünlükn)

Sonuçta, bildiğimiz ne kadar çarpın iki derecesi polinomları için de çalışma zamanını. Ancak polinomları çoğaltmak iki bit sayısını çarpmakla aynıdır . O halde iki bit sayısını ile çarpmak için bir algoritmamız var . Şimdi ortaya çıkabilecek tek sorun taşımadır, ancak her aşamada bunu zamanda düzeltebiliriz, en sağa ve sol komşusuna kadar sonuna kadar gidebiliriz . Yani, çalışma zamanımız kalacaktır .O ( n log n ) n n O ( n log n ) O ( n ) O ( n log n )nÖ(ngünlükn)nnÖ(ngünlükn)Ö(n)Ö(ngünlükn)

Peki yeni (ve oldukça açık) bir keşifte bulundum mu? Yoksa wikipedia sayfası güncel değil mi? Ya da belki bir hatam var?


Derecesi elde çarpın iki polinomları "Bildiğimiz" bu şekilde "nedir içinde Çalışma zamanını"? O ( n log n )nÖ(ngünlükn)

Yanıtlar:


8

@DavidRicherby'nin zaten belirttiği gibi, karışıklık farklı karmaşıklık ölçütleri karıştığı için ortaya çıkıyor. Ama biraz ayrıntıya gireyim.

Genellikle, rasgele halkalar üzerinde polinom çoğalması için algoritmalar çalışırken, bir algoritmanın kullandığı halkadaki aritmetik işlemlerin sayısı ile ilgilenilir. Özellikle, bazı (değişmeli, birimsel) halkaları ve düşük bir dereceye iki polinomu verildiğinde, Schönhage-Strassen algoritması de hesaplamak için çarpmalar ve eklemeler , kabaca, daha büyük bir halka elde etmek için birleşik ilkel kök kökleri tarafından ve ardından kullanarak üzerinde Fourier Dönüşümüf , g R [ X ] n, O ( n, log n, log günlük n ) R f g R [ X ] n, R, D Ar D DRf,gR[X]nO(nlognloglogn)RfgR[X]nRDRD, Ürünün işlem .D

Yüzüğün bir içeriyorsa birlik-inci kökünü, o zaman bu kadar hızlandırılabilir operasyonları Hızlı Fourier üzerinde doğrudan Transform kullanarak . Daha spesifik olarak, , bunu halka işlemlerini kullanarak yapabilirsiniz bunun karmaşık sayılar üzerinde tam aritmetik gerektireceği gerçeğini göz ardı ederek).O ( n log n ) R R ZC O ( n log n )nO(nlogn)RRZCO(nlogn)

Dikkate alınabilecek diğer bir önlem, bir operasyonun biraz karmaşıklığıdır. Ve bu, bit uzunluğu iki tamsayısını çarparken ilgilendiğimiz şeydir . Burada, ilkel işlemler çarpılır ve iki hane eklenir (taşıma ile). Bu nedenle, üzerinde iki polinomu , hesaplama sırasında ortaya çıkan sayıların sabit sayıda ilkel işlem kullanılarak çarpılamayacağı gerçeğini dikkate almanız gerekir. Bu ve aslında bir bulunmamaktadır birlik ilkel kök inci dozajda da önlenmiş Eğer algoritması. düşünerek bunun üstesindennZ , n , n > 2 O ( n, log n ) f , g , Z /2 , n + 1 n 2 n- O ( n, log n, log günlük n )ZZnn>2Ö(ngünlükn)f,ghalka, katsayılı ürün polinom katsayıları geçmeyecektir, çünkü bu bağlandı. Orada (zaman , sahip (denkliği sınıfı) ikisinin bir güçtür) bir şekilde birlik-inci kökü ve yinelemeli katsayı çarpımı için algoritma arayarak, sen toplam elde edebilirsiniz ilkel (yani bit) işlemler. Bu daha sonra tamsayı çarpımına geçer.Z/2n+1n2nÖ(ngünlükngünlükgünlükn)

Halka operasyonları ve ilkel operasyonlar arasındaki farkın önemini vurgulayan bir örnek için, polinomları değerlendirmek için iki yöntemi düşünün: Horner'ın yöntemi ve Estrin'in yöntemi. Horner yöntem değerlendirir polinom bazı kimlik yararlanılarak , yöntemi iki parçaya ayırır ve , yani derece terimleri içerir ve derece koşullar x Z f ( x ) = ( ( f n x + f n - 1 ) x + + ) + f 0 f H = n / 2 i = 1 f n / 2 + i X i L = nf=Σben=0nfbenXbenxZ

f(x)=(...(fnx+fn-1)x+...+...)+f0
f
'H=Σben=1n/2fn/2+benXben
H>n/2Ln/2n
L=Σben=0n/2fbenXben
'H>n/2Ln/2( sadelik için ikinin gücü olduğunu varsayalım ).n

Daha sonra, hesaplayabilir ile ve yinelemeli algoritmasının uygulanması.f ( x ) = H ( x ) x n / 2 + L ( x )f(x)

f(x)='H(x)xn/2+L(x)

İlki, ekleme ve çarpma kullanarak, ekleme ve çarpma sayısı (yani halka işlemleri) için optimal olduğu kanıtlanmıştır, ikincisi daha fazlasına ihtiyaç duyar (en azından ).n + giriş nnn+günlükn

Ancak, bit işlemleri düzeyinde, en kötü durumda, Horner'ın yönteminin en az boyutunda çarpımı gerçekleştirdiğini ve çok bitine yol açtığını gösterebilir. işlemleri (bu, zamanında iki bit sayısının çarpılabileceğini varsaysak bile geçerlidir ), oysa Estrin'in şeması bazı için işlemlerini kullanıyor , asimptotik olarak daha hızlı.n/2n/2Ω(n2)nÖ(n)Ö(ngünlükcn)=Ö~(n)c>0


9

zamanında derece iki polinomu çarpabileceğinizi söylemek, özellikle sıfır dereceli polinomları, yani sabitleri sabit zamanda çarpabileceğiniz anlamına gelir. Bu nedenle, açıkça " bit sayılarının çarpılması zaman alır " ve "derece- polinomlarının çarpımı " farklı hesaplama modellerine göre doğrudan karşılaştırılamaz.nÖ(ngünlükn)nÖ(2günlük*nngünlükn)nÖ(ngünlükn)


5
Sorunun bu olduğunu düşünmüyorum . Sayıları "x" baz, örneğin 2 olan polinomlar olarak düşünürsek , tipik olarak sıfır dereceli polinomları (tabandan daha küçük sayılar) sabit sürede çoğaltabiliriz. Ben sorun O (n * log n) algoritması FFT kullanır ve asemptotik olarak daha büyük sayılar FFT algoritması içinde ortaya çıkabilir sanırım.
jkff
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.