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.