Alanı kullanım en olduğu tüm Strassen benzeri algoritmaları (yani, bu üst cebirsel matris çarpımı rank sınırlama göre). Bakın Coppersmith-Winograd algoritmasının uzay karmaşıklığıO(n2)
Ancak, önceki cevabımda alan kullanımının neden olduğunu açıklamadığımı fark ettim ... işte el-dalgalı bir şey oluyor. Strassen benzeri bir algoritmanın ne yaptığını düşünün. Bunun için sabit bir algoritma başlar K x K matris çarpım kullanan K c bir sabit için çarpma c < 3 . Özellikle, bu algoritma (ne olursa olsun) WLOG yazılabilir, böylece:O(n2)K×KKcc<3
Bu hesaplar farklı matrisler L 1 , ... , L K c ilk matris çoklu girişler A , çeşitli skalerler tarafından K C matrisleri R 1 , ... , R, K c ikinci matris gelen B benzer bir biçimde olan,KcL1,…,LKcAKcR1,…,RKcB
Bu doğrusal kombinasyonları çarpar ,Li⋅Ri
Ve bu çarpma girişleri , çeşitli skalarlar, daha sonra elde etmek için entrywise kadar bu matrisler ekler bir ⋅ B .Lben⋅ RbenA ⋅ B
(Bu sözde "bilinear" algoritmasıdır, ancak her "cebirsel" matris çarpım algoritmasının bu şekilde yazılabileceği ortaya çıkar.) Her , bu algoritmanın yalnızca mevcut ürün L ı ⋅ R ' ı ve mevcut değer bir ⋅ B alanı kullanımı, bu yüzden herhangi bir noktada bellekte (başlangıçta her sıfıra ayarlanır) O ( K 2 ) .i=1,…,KcLi⋅RiA⋅BO(K2)
Bu sonlu algoritma göz önüne alındığında, daha sonra rasgele bir şekilde genişletilmiştir içine büyük matrisler kırarak, matrisler K x K boyutları blok K ℓ - 1 x K ℓ - 1 , uygulama sonlu K x K algoritma bloğuna ve iki bloğu çarpması gerektiğinde algoritmayı tekrar tekrar çağırır. Her özyineleme düzeyinde, yalnızca O ( K 2 ℓ ) alan öğelerini bellekte tutmamız gerekir ( O ( 1 ) depolamakKℓ×KℓK×KKℓ−1×Kℓ−1K×KO(K2ℓ)O(1)farklı matrisleri). K ℓ - 1 × K ℓ - 1 matris çarpımı için alan kullanımının S ( ℓ - 1 ) olduğu varsayılarak, bu özyinelemeli algoritmanın alan kullanımı S ( ℓ ) ≤ S ( ℓ - 1 ) + O ( K 2 ℓ ) için olan S ( 1 ) = 2 K 2Kℓ×KℓKℓ−1×Kℓ−1S(ℓ−1)S(ℓ)≤S(ℓ−1)+O(K2ℓ)S(1)=2K2için çözer .S(ℓ)≤O(K2ℓ)