Untuk memperluas gagasan Steven Stadnicki, kita dapat dengan cepat membangun algoritma naif yang lebih baik daripada perkalian matriks menggunakan Discrete Fourier Transform.
Kami menghitung jumlah orang-orang di . Jika kurang dari setengah bit adalah bit, kami membuat daftar posisi yang ditautkan. Untuk mengalikan, kita cukup menggeser kiri oleh setiap posisi dalam daftar (mengalikan dengan bit yang diwakili) dan menambahkan hasilnya.AB
Jika lebih dari setengah bitnya adalah bit, kami melakukan hal yang sama seperti di atas, tetapi kami menggunakan angka nol untuk mengisi daftar posisi. Idenya adalah bahwa kita akan mengurangi jumlah ini dari jumlah yang akan diperoleh dengan mengalikannya dengan semua yang ada. Untuk mendapatkan jumlah semua yang ada, kita menggeser dengan jumlah bit dalam dan mengurangi dari ini. Kemudian kita dapat mengurangi jumlah kita yang diperoleh dari daftar tertaut.BAB
Kita dapat menyebutnya algoritma daftar-tertaut yang naif. Waktu berjalannya adalah dalam kasus terburuk, tetapi dalam kasus rata-rata, yang lebih cepat daripada DFT untuk kecil.O(n2)O(|B||A|2π−−−√)|A|
Untuk menggunakan gagasan daftar secara optimal, kami menggunakan divide-and-conquer. Kami membagi dua, dan menemukan ukuran daftar terkait menggunakan algoritma naif. Jika mereka lebih besar dari 5, kami memanggil algoritma naif lagi pada setengah lebih besar dari 5 sampai kami berhasil memotong semua bagian menjadi kurang dari lima. (Ini karena kita bisa mengurangi ini menjadi 4 pengurangan)A
Bahkan lebih baik lagi, kami meningkatkan algoritma divide-and-conquer kami. Kami beralih melalui semua kemungkinan kombinasi percabangan, dengan rakus memilih yang terbaik. Preprocessing ini membutuhkan waktu yang hampir sama dengan multiplikasi yang sebenarnya.
Jika kami diizinkan kebebasan tanpa batas dengan pra-pemrosesan, kami menyelesaikan algoritma divide-and-menaklukkan yang dioptimalkan untuk semua cabang secara optimal. Ini membutuhkan waktu dalam kasus terburuk, tetapi harus ~ optimal dengan metode rantai tambahan.O(2|A|)
Saya sedang mengerjakan penghitungan nilai yang lebih tepat untuk algoritme di atas.