İki n basamaklı sayının çarpımı için en hızlı algoritma nedir?


21

İki n basamaklı sayının çarpımı için hangi algoritmanın en hızlı olduğunu bilmek istiyorum? Alan karmaşıklığı burada rahatlatılabilir!


1
Teorik soru veya pratik soru ile ilgileniyor musunuz?
Yuval Filmus

Her ikisi de, ama pratik olana daha meyilli!
Andy

1
Pratik soru için GMP kullanmanızı tavsiye ederim. Ne kullandıklarını merak ediyorsanız, belgelere veya kaynak koduna bakın.
Yuval Filmus

Kimse bilmiyor. Henüz bulamadık.
JeffE

Yanıtlar:


22

Şu andan itibaren Fürer'in Martin Fürer'in algoritması, karmaşık sayılar üzerinden Fourier dönüşümleri kullanan nlog(n)2Θ(log(n)) karmaşıklığına sahiptir. Algoritması aslında Schönhage ve Strassen'in complex (n \ log (n) \ log (\ log (n))) zaman karmaşıklığına sahip algoritmasına dayanmaktadır.Θ(nlog(n)log(log(n)))

Sınıf Okulu Çarpma algoritmasından daha hızlı olan diğer algoritmalar, O(nlog23)O(n1.585) ve zaman karmaşıklığına sahip Toom 3 algoritması olan Karatsuba çarpımıdır. arasında Θ(n1.465)

Bunların hızlı algoritmalar olduğunu unutmayın. Çarpma için en hızlı algoritmayı bulmak Bilgisayar Biliminde açık bir sorundur.

Referanslar :

  1. Fürer algoritması
  2. Büyük sayıların FFT tabanlı çarpımı
  3. Hızlı Fourier dönüşümü
  4. Toom – Cook çarpımı
  5. Schönhage – Strassen algoritması
  6. Karatsuba algoritması

D. Harvey ve J. van der Hoeven (Mart 2019) tarafından karmaşıklığına sahip bir algoritmayı açıklayan son makaleye dikkat edin . O(nlnn)
hardmath

9

Avi tarafından listelenen FFT algoritmalarının büyük bir sabit eklediğini ve binlerce + bit'ten daha küçük sayılar için pratik olmadığını unutmayın.

Bu listeye ek olarak, başka ilginç algoritmalar ve açık sorular var:

  • Bir RAM modelinde doğrusal zaman çarpımı (ön hesaplama ile)
  • Bir Sabit ile çarpma Alt Doğrusal ( PDF ) - bu, toplambit karmaşıklığıiçin alınan alt doğrusal ekleme sayısı anlamına gelir. Bu esasen uzun çarpma ile eşdeğerdir (alt sayıdakisayısına göre kaydırma / ekleme yaptığınız),, ancakhızlandırması.1O(n2)O(logn)O(n2logn)1O(n2)O(logn)
  • Artık sayı sistemi ve diğer sayı gösterimleri; çarpma neredeyse doğrusal bir zamandır. Dezavantajı, çarpma modülerdir ve {taşma tespiti, parite, büyüklük karşılaştırması}, sayıyı ikili veya benzer temsile dönüştürmek ve geleneksel karşılaştırmayı yapmak kadar sert veya neredeyse serttir; bu dönüşüm en azından geleneksel çarpma kadar kötü (şu anda AFAIK).
    • Diğer Temsilcilikler:
      • [ Logaritmik sunum ]: çarpma, logaritmik sunumun eklenmesidir. Örnek:
        16×32=2log216+log232=24+5=29
        • Dezavantajı, logaritmik temsile dönüştürme ve çarpma kadar çarpma veya daha sert olabilir, temsil de kesirli / irrasyonel / yaklaşık vb. Olabilir. Diğer işlemler (ekleme?) Muhtemelen daha zordur.
      • Kanonik temsil : sayıları asal çarpanın çarpanı olarak temsil eder. Çarpma, üslerin eklenmesidir. Örnek:
        36×48=3251×223141=22324151
      • Dezavantajı, faktörler veya çarpanlara ayırma gerektirir, çarpma işleminden çok daha zor bir sorundur. Toplama gibi diğer işlemler muhtemelen çok zordur.

1
Bir kalıntı doğru modüllerine sahip / Çin Kalan Teoremi dayalı yaklaşım inanıyoruz olabilir hatta dönüşüm arka geleneksel çarpma üzerinde hızlandırıcılar yol; bir noktada bu TAOCP'ın 4. bölümünde, en azından dipnot olarak. (Hala FFT tabanlı yöntemlere
yaklaşmıyor

@StevenStadnicki oh güzel, o zaman ona bakmalıyım; karmaşıklığı biliyor musun?
Realz Lahana Salatası
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.