Penggunaan ruang paling banyak untuk semua algoritma Strassen-like (yaitu yang didasarkan pada batas atas peringkat perkalian matriks secara aljabar). Lihat Kompleksitas ruang dari algoritma Coppersmith – WinogradO ( n2)
Namun, saya menyadari dalam jawaban saya sebelumnya bahwa saya tidak menjelaskan mengapa penggunaan ruang adalah ... jadi begini sesuatu yang bergelombang. Pertimbangkan apa yang dilakukan algoritma seperti Strassen. Dimulai dari algoritma tetap untuk K × K perkalian matriks yang menggunakan K c perkalian untuk beberapa konstanta c < 3 . Secara khusus, algoritma ini (apa pun itu) dapat ditulis WLOG sehingga:O ( n2)K× KKcc < 3
Ini menghitung matriks yang berbeda L 1 , ... , L K c yang entri multiply dari matriks pertama A oleh berbagai skalar dan K c matriks R 1 , ... , R K c dari matriks kedua B dari bentuk serupa,KcL1, ... , LKcSEBUAHKcR1,…,RKcB
Ini melipatgandakan kombinasi linear , laluLi⋅Ri
Ini mengalikan entri dari oleh berbagai skalar, kemudian menambahkan semua matriks ini sampai entrywise untuk mendapatkan A ⋅ B .Li⋅RiA⋅B
(Ini adalah yang disebut "bilinear" algoritma, tapi ternyata bahwa setiap "aljabar" algoritma perkalian matriks dapat ditulis dengan cara ini.) Untuk setiap , algoritma ini hanya memiliki untuk menyimpan produk saat ini L i ⋅ R i dan nilai saat ini dari A ⋅ B (awalnya diatur ke semua-nol) dalam memori pada titik tertentu, sehingga penggunaan ruang adalah O ( K 2 ) .i=1,…,KcLi⋅RiA⋅BO(K2)
Mengingat algoritma yang terbatas ini, kemudian diperluas ke sewenang-wenang matriks, dengan melanggar matriks besar menjadi K × K blok dari dimensi K ℓ - 1 × K ℓ - 1 , menerapkan terbatas K × K algoritma untuk blok matriks, dan memanggil algoritma secara rekursif setiap kali perlu mengalikan dua blok. Pada setiap tingkat rekursi, kita hanya perlu menyimpan elemen bidang O ( K 2 ℓ ) dalam memori (menyimpan O ( 1 )Kℓ×KℓK×KKℓ−1×Kℓ−1K×KO(K2ℓ)O(1)berbeda matriks). Dengan asumsi penggunaan ruang untuk K ℓ - 1 × K ℓ - 1 perkalian matriks adalah S ( ℓ - 1 ) , penggunaan ruang dari algoritma rekursif ini adalah S ( ℓ ) ≤ S ( ℓ - 1 ) + O ( K 2 ℓ ) , yang untuk S ( 1 ) = 2 K 2Kℓ×KℓKℓ−1×Kℓ−1S(ℓ−1)S(ℓ)≤S(ℓ−1)+O(K2ℓ)S(1)=2K2memecahkan ke .S(ℓ)≤O(K2ℓ)
sumber