Bir tamsayı düzeltildiğinde tamsayı çarpımı


35

boyutu bit sabit bir pozitif tamsayı olsun .An

Birinin bu tamsayıyı uygun şekilde önceden işlemesine izin verilir.

Başka bir pozitif tam sayı göz önüne alındığında boyutu bit, çarpma karmaşıklığı nedir ?BmAB

Unutmayın ki zaten algoritmalarımız var. Buradaki sorgu, akıllıca herhangi bir şeyle \ epsilon = 0 alabilir miyiz ?(max(n,m))1+ϵϵ=0


6
Verilen A , yalnızca 2n girişli bir arama tablosu oluşturun . (Açıkçası istediğin bu değil, ama bence gereksinimlerini daha spesifik hale getirmelisin ...)
Jukka Suomela

9
Standart Boolean devre modelinde sorunun mükemmel bir anlam ifade ettiğini düşünüyorum.
Noam

4
Belirgin üst ve alt sınırları ve bildiğiniz en iyi sonuçları özetler misiniz? Soruna önem verdiğinizi ve bunun hakkında düşündüğünüzü gösterir ve başkalarına da sorununuzu düşünmeleri için daha fazla teşvik verir.
Robin Kothari

4
Sanırım asker dolaylı olarak önceden işlenmiş kısmın sadece nO(1) alanını kullanması gerektiği anlamına gelir . (Matris-vektör multisi bu özelliğe sahiptir.)
Ryan Williams

Ne istediğini bilmek isterdim; Bu konuda sonsuz dava yaşayabileceğimi hissediyorum. Bu benim ilk cevabım, bu yüzden size elimden geldiğince bilgi vermeye çalışıyorum. İsterseniz, bana mgroff100@hotmail.com adresinden e-posta gönderebilirsiniz ve sizinle daha fazla çalışmaktan mutlu olurum.
Matt Groff

Yanıtlar:


20

Her zaman en verimli algoritma olmasa da, bu sorunun ekleme zincirleriyle çok yakın bir ilişkisi var; hesaplama zincirinin hızlı şekilde eklenmesiyle hesaplaması için herhangi bir algoritma , tekrarlanan ekleme ile hesaplaması için bir algoritmaya dönüştürülür (her ekleme, elbette bir işlemidir). Aksine, herhangi bir için hesaplanması için hızlı bir algoritma, hesaplanması için hızlı bir algoritmaya yol açar , fakat elbette bu algoritmanın mutlaka bir ek zincir formuna sahip olması gerekmez; Yine de, başlamak için mükemmel bir yer gibi görünüyor. Http://en.wikipedia.org/wiki/Addition_chain adresine bir göz atın ya da vol. 2/2Af(B)=ABO(n)ABBADaha fazla bilgi için Bilgisayar Programlama Sanatı .


17

Steven Stadnicki'nin fikrini genişletmek için, Ayrık Fourier Dönüşümü kullanarak matris çarpımından daha iyi bir saf algoritma oluşturabiliriz.

Biz de olanların sayısını . Eğer bitlerin yarısından daha azı ise, konumlarının bağlantılı bir listesini oluştururuz. Çarpmak için listedeki her bir konumdan sola kaydırırız (temsil edilen bit ile çarparak) ve sonuçları ekleriz.AB

Bitlerin yarısından fazlası, yukarıdakilerle aynıdır, ancak konum listesini doldurmak için sıfırları kullanırız. Buradaki fikir, bu toplamı, herkes tarafından çarparak elde edilecek toplamdan çıkaracağımızdır. Herkesin toplamını almak için, bit sayısına göre kaydırır ve çıkarırız . Ardından bağlantılı listeden elde ettiğimiz toplamı çıkarabiliriz.BAB

Buna saf bağlantılı liste algoritması diyebiliriz. Çalışma süresi en kötü durumda iken, ortalama durumda ortalama durumda, küçük için DFT’den daha hızlıdır.O(n2)O(|B||A|2π)|A|

Listeler fikrini en iyi şekilde kullanmak için, böl ve yönet'i kullanırız. ikiye böldük ve naif algoritmayı kullanarak ilişkili listelerin boyutlarını buluyoruz. 5'ten büyüklerse, 5'ten büyük olan yarıları 5'den küçük olanları kesene kadar naif algoritmayı tekrar 5'ten büyük yarıya çağırırız. (Bunun sebebi, bunu 4 çıkarmaya indirgeyebiliriz)A

Daha da iyisi, ayrılma ve fethetme algoritmamızı geliştiriyoruz. Olası tüm dallanma kombinasyonlarını yineleyerek, en iyisini seçerek ısrarla. Bu ön işleme, gerçek çarpma işlemiyle yaklaşık olarak aynı zaman alır.

Ön işleme ile sonsuz özgürlüğe izin verilirse, tüm dallar için optimize edilmiş bölme ve fethetme algoritmasını en iyi şekilde çözeriz. Bu, en kötü durumda zaman alır , ancak ilave zincir metotları ile optimal olmalıdır.O(2|A|)

Yukarıdaki algoritmalar için daha kesin değerler hesaplamaya çalışıyorum.


Merhaba Matt: Nedirve? |A||B|
T ....

|A| büyüklüğü , temel olarak elementlerin sayısıdır . Bu eşdeğerdir , yani . için aynı . Bununla birlikte, bu formül, , ve için farklı olduğunda hala geçerlidir . AAn|A|n|B|nAB
Matt Groff

17

Bir çarpımla Çarpma adlı kağıt alt çizgidir ( PDF ), vardiya / toplama işlemleri için bir algoritma verir , burada sabitin boyutu .O(nlogn)n

Esasen, bu seyir için çalışır olanlar için sadece çarpılacak, sabit içinde -bits kayması ve sayı ekleyerek bir ikili için uzun çarpma gibi (sabit bit alt sayısının biraz çarpılan araç gibi üst kaydırılmaz ve eklenir, bit ise üst kaydırılır ve eklenir). Ancak bu hala , çünkü sabitte bit olabilir.1101O(n)O(n) 1

Kağıt daha sonra dönüşümün doğru yapılması durumunda sabit olmayanın sayı gösterimini çift-temel sayı sistemine dönüştürmekten bahsediyor, görünüşe göre bit olmayanlar daha serpicidir, eğer dönüşüm doğru bir şekilde yapılıyorsa (bu çok fazladan bir sayı sistemidir). Ne kadar seyrek olduğunu hesaplarlar; sıfır olmayan bitlerin sayısı değerinden daha düşük bir değere sınırlandırılmıştır , bu nedenle gerekli bir alt çizgi eklemesi vardır. Ancak yine de bir nedeniyle, gerçek işlemleri her bir yanında (burada maliyet boyutudur sabit, ve diğer sayının boyutudur).0O(n)O(nmlogn)O(m)nm

Dolayısıyla sorunuzu cevaplamak için, evet, eğer sabitse bir hızlandırması elde ettiğinizde matris-vektör çarpımına benzer bir sonuç var ; Tabii bu hızlanma sadece üzerinde naif uzun çoğalmasıdır ve içinde ama çok daha iyi olan çarpma algoritmalar mevcuttur sizinle olsun bu algoritma.lognO(n2logn)


@JAS bu benim uzmanlık alanım: D.
Realz Slaw

3
Bu, ARITH 2007'de dx.doi.org/10.1109/ARITH.2007.24 olarak belirdi (tamamlanma için).
András Salamon

10

Matt Groff tarafından önerildiği gibi, ilham almak için uygulama topluluğuna bakmak isteyebilirsiniz (ya da durumunuzdaki mevcut bir işlemcinin bit genişliği dahilindeyse). Aslında, bir sabit tarafından tamsayı çarpma problemi birçok derleyici yazar ve devre tasarımcısı tarafından göz önünde bulundurulmasına rağmen, genellikle "çarpansız çarpan" (ilgilenen, topla ve topla kullanarak çarp) ile ilgileniyorlar. Bildiğim ilk referanslardan biri (Bunu Hacker'in Lokumu bölüm 8.4'den öğrendim):n

Bernstein, R. (1986), Tamsayı sabitleri ile çarpma. Yazılım: Uygulama ve Deneyim, 16: 641-652. doi: 10.1002 / spe.4380160704

Vincent Lefèvre'nin daha modern eserleri burada bulunabilir (takip çalışmalarını gördüğünüzden emin olun) ve ayrıca verimli devre sentezi üzerine bir CMU projesi de yazdı (referanslara bakın). İkinci proje, bir sabitler kümesiyle eşzamanlı çarpımı dikkate alır.

Not: Kullanıcı adınızı tanınabilir bir şeyle değiştirmeyi düşünmenizi tavsiye ederim.


8

Bunun doğrudan soru ile alakalı olup olmadığından emin değilim, ancak aşağıdaki temel sonuç ilgi çekici olabilir. Sabit bir doğal sayı verildiğinde , işlemi , ters çevrilmiş ikili gösterimde (yani En Önce En Önemli Bit Önce) yazılması koşuluyla, sıralı bir otomat tarafından gerçekleştirilebilir . Otomatın durum sayısı burada , bölü en büyük gücüdür . Örneğin, işlemi aşağıdaki otomat tarafından gerçekleştirilir. knknnk/2r2r2kn6ngörüntü tanımını buraya girin

Örneğin, ve . Bu nedenle, ters ikili olarak , ve (kötü seçim, biliyorum ...) olarak yazılmıştır . Bu girişinin işlenmesi yolu verir 185=1+8+16+32+1286×185=1110=2+4+16+64+10241851001110111100110101000110011101

0011101000011110211200110201
ki doğru çıktı veren . Burada kullanıyorum sıralı otomat tipi denilen , sonradan gelen Schützenberger'in tarafından: Bir orada gördüğünüz gibi ilk önek (yeşil) ve bir uç çıkış fonksiyonu01101010001(ayrıca yeşil). Bu sıralı makinenin sistematik bir şekilde nasıl hesaplanabileceği hakkında daha fazla ayrıntı için, bu bağlantıya bakın .

Yorumunuz hakkında ayrıntılı bilgi verir misiniz?
J.

k asal . >2
T ....

işlemini gerçekleştiren bir ardışık otomatın yapımı, herhangi bir için yapılabilir . Ancak, bu Otomaton hesaplamak için daha kolay olabilir asal. nknkk
J.

k2r üstel.
T ....

k , ile ilgili olmayan sabit bir sabittir . n
J.
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.