Knuth'un doğrusal zaman çarpma algoritması neden “sayılmaz”?


13

Çarpma algoritmalarındaki wikipedia sayfası Donald Knuth tarafından ilginç bir sayfadan bahsediyor . Temel olarak, fourier dönüşümü çarpımının önceden hesaplanmış bir logaritmik boyutlu çarpım tablosu ile birleştirilmesini içerir. Doğrusal zamanda çalışır.

Makale bu algoritma gibi davranıyor bir şekilde "gerçek" çarpma algoritması sayılmaz. Daha da önemlisi, çarpmanın eşit O(n lg n)zamanda yapıp yapamayacağı açık bir soru olarak kabul edilir !

Bu algoritmanın hangi ayrıntıları "gerçek" çarpma algoritması olarak sayılmasını diskalifiye eder?

Tahminlerim:

  • Tabloyu önceden hesaplamak doğrusal süreden daha fazla zaman alır. Öte yandan, yine de n lg nzaman içinde yapılabilir, böylece etkileyici görünebilir.
  • Rastgele erişime bir şekilde izin verilmiyor. Peki neden diğer algoritmalar hash tabloları ve işaretçiler gibi şeyleri kullanabilir?
  • Bir makinenin kelime boyutunu artırdıkça bir şekilde yanlış ölçeklenir, örneğin tek bir komutta 256 bit çarpma yapan 256 bitlik bir makineniz varsa, bu algoritmanın 2 ^ 256'dan fazla öğeye sahip olana kadar anlamı yoktur. Diğer yandan sendika bulmada ters-ackermann faktörü ile uğraşıyoruz.
  • "Doğrusal bir zaman çarpma algoritması var mı?" soru gizlice bazı zayıf makine açısından, ama bu sadece ima edilir.

Yanıtlar:


16

Bahsettiğiniz algoritma Knuth'un TAOCP'sinde görünmesine rağmen, kesinlikle Knuth'a bağlı değildir ve daha yaygın olarak Schönhage – Strassen algoritması olarak bilinir ; Knuth bile bu algoritmayı metinde ilişkilendirir. Bu algoritma gerçekten de değişkenlerin boyutunda tamsayıları tutmasına izin verilen RAM makinesinde doğrusal zamanda çalışır , burada girişin boyutudur. Ancak bit karmaşıklığı 'dir ve bu model için Fürer algoritması daha hızlıdır.O(logn)nO(nlognloglogn)

Literatürde hızlı tamsayı çarpma algoritmaları arayışı, karmaşıklık ölçüsü olarak bit karmaşıklığına yoğunlaşmıştır; bu, kayıtlarınızın yalnızca bir bit (veya rasgele sabit için yalnızca bitleri) tutmasına izin vermek gibidir . Tamsayı çarpımının alması beklenir , ancak bunun sıkı olup olmayacağı açık değildir ve önemsiz alt sınırlar bilinmemektedir (bu nedenle bu sadece bir varsayımdır ).CCΩ(nlogn)Ω(nlogn)

Büyük tam sayıların pratik çarpımı için "doğru" modelin tartışması için Fürer'in son makalesine bakın . Vardığı sonuç "pratik" Schönhage – Strassen algoritması lehinedir (ikisi vardır ve diğeri daha iyi bit karmaşıklığına sahiptir, ancak uygulamada daha kötü performans gösterir; Fürer makalede bu konuyu ele almaktadır).


2
Açıklama için teşekkürler. TAOCP'nin bir kopyasına sahip değilim, bu yüzden gitmek zorunda olduğum tek şey wiki makalesinde olan şeydi (sorunu düzeltmek için zaten düzenlediğinizi görüyorum).
Craig Gidney
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.