Алгоритм Штрассена
Алгоритм Штрассена предназначен для быстрого умножения матриц. Он был разработан Фолькером Штрассеном в 1969 году и является обобщением метода умножения Карацубы на матрицы.
В отличие от традиционного алгоритма умножения матриц (по формуле ), работающего за время , алгоритм Штрассена умножает матрицы за время , что даёт выигрыш на больших плотных матрицах.
Несмотря на то, что алгоритм Штрассена является асимптотически не самым быстрым из существующих алгоритмов быстрого умножения матриц, он проще программируется и эффективнее при умножении матриц относительно малого размера, поэтому именно он чаще используется на практике.
Описание алгоритма

Если добавить к матрицам и
одинаковые нулевые строки и столбцы, их произведение станет равно матрице
с теми же добавленными строками и столбцами. Поэтому можно рассматривать только матрицы размера
, а другие случаи сводить к этому добавлением нулей, отчего
может увеличиться лишь вдвое.
Пусть – матрицы размера
. Их можно представить как блочные матрицы размера
из
–матриц:
По принципу блочного умножения, матрица выражается через их произведение
где в правой части происходит восемь умножений матриц размера . Поскольку матрицы образуют кольцо, то для вычисления правой части годится любой алгоритм умножения
-матриц, использующий лишь сложения, вычитания и умножения. Штрассен предложил такой алгоритм с семью умножениями:
Каждое умножение можно совершать рекурсивно по той же процедуре, а сложение – тривиально, складывая элементов. Тогда время работы алгоритма
оценивается через рекуррентное соотношение:
Пример реализации
Ниже приведён пример реализации алгоритма на языке Python с использованием библиотеки NumPy для быстрого взятия подматриц. Основная функция – strassen_mul. Предполагается, что все матрицы квадратны, представлены типом numpy.array и их размер является степенью 2.
При небольших размерах матрицы прямое умножение оказывается быстрее алгоритма Штрассена из-за большого числа сложений в последнем. Граница таких размеров зависит от соотношения времени сложения и умножения элементов и поэтому может варьироваться в зависимости от аппаратной среды. В коде за её назначение отвечает константа TRIVIAL_MULTIPLICATION_BOUND.
from itertools import product import numpy as np def split_to_2x2_blocks(matrix): return list(map( lambda row: np.hsplit(row, 2), np.vsplit(matrix, 2) )) def strassen_mul_2x2(lb, rb): d = strassen_mul(lb[0][0] + lb[1][1], rb[0][0] + rb[1][1]) d_1 = strassen_mul(lb[0][1] - lb[1][1], rb[1][0] + rb[1][1]) d_2 = strassen_mul(lb[1][0] - lb[0][0], rb[0][0] + rb[0][1]) left = strassen_mul(lb[1][1], rb[1][0] - rb[0][0]) right = strassen_mul(lb[0][0], rb[0][1] - rb[1][1]) top = strassen_mul(lb[0][0] + lb[0][1], rb[1][1]) bottom = strassen_mul(lb[1][0] + lb[1][1], rb[0][0]) return [[d + d_1 + left - top, right + top], [left + bottom, d + d_2 + right - bottom]] def trivial_mul(left, right): height, mid_size = left.shape mid_size, width = right.shape result = np.zeros((height, width)) for row, col, mid in product(*map(range, [height, width, mid_size])): result[row][col] += left[row][mid] * right[mid][col] return result TRIVIAL_MULTIPLICATION_BOUND = 8 def strassen_mul(left, right): assert(left.shape == right.shape) assert(left.shape[0] == left.shape[1]) if left.shape[0] <= TRIVIAL_MULTIPLICATION_BOUND: return trivial_mul(left, right) assert(left.shape[0] % 2 == 0) return np.block( strassen_mul_2x2(*map(split_to_2x2_blocks, [left, right])) ) Дальнейшее развитие
Штрассен был первым, кто показал возможность умножения матриц более эффективным способом, чем стандартный. После публикации его работы в 1969 начались активные поиски более быстрого алгоритма. Самым асимптотически быстрым алгоритмом на сегодняшний день является алгоритм Копперсмита — Винограда, позволяющий перемножать матрицы за операций, предложенный в 1987 году и усовершенствованный в 2011 году до уровня
. Этот алгоритм не представляет практического интереса в силу астрономически большой константы в оценке арифметической сложности. Вопрос о предельной в асимптотике скорости перемножения матриц не решен. Существует гипотеза Штрассена о том, что для достаточно больших
существует алгоритм перемножения двух матриц размера
за
операций, где
сколь угодно малое наперед заданное положительное число. Эта гипотеза имеет сугубо теоретический интерес, так как размер матриц, для которых
действительно мало, по всей видимости очень велик.
Вопрос о построении наиболее быстрого и устойчивого практического алгоритма умножения больших матриц также остается нерешённым.
Алгоритм Винограда — Штрассена
Существует модификация алгоритма Штрассена, для которой требуется 7 умножений и 15 сложений (вместо 18 для обычного алгоритма Штрассена).
Матрицы делятся на блочные подматрицы как показано выше.
Вычисляются промежуточные элементы
Элементы матрицы вычисляются следующим образом:
Современное состояние вопроса
Алгоритм Штрассена является билинейным алгоритмом, его коэффициенты являются корнями кубической системы уравнений Брента. Для класса точных алгоритмов <2x2x2> это минимальная задача, решение которой позволяет уменьшить число умножений в кольце элементов матриц. Проблема поиска новых алгоритмов заключается в том, что система Брента нелинейная, числа неизвестных и уравнений (эти числа не совпадают) быстро растет с увеличением размера матриц и требуются решения только с большим количеством нулей.
B 2013 году после частичного преодоления этих проблем удалось найти первый практически реализуемый билинейный алгоритм умножения матриц, который асимптотически быстрее алгоритма Штрассена. Алгоритм Смирнова <3x3x6; 40> умножает матрицу 3X3 на матрицу 3x6, используя 40 умножений вместо 54. Его асимптотическая сложность . (Тензорное умножение алгоритма на себя с циклическим сдвигом аргументов приводит к алгоритму для квадратных матриц <54x54x54; 64000> с той же сложностью). Для реального ускорения умножения требуется существенная оптимизация — удаление множества дублирующих вычислений в линейных формах.
По состоянию на 2022 год это асимптотически наиболее быстрый практически реализуемый билинейный алгоритм для произвольного поля элементов матриц.
В 2022 году компанией DeepMind при помощи нейросетевого алгоритма были найдены несколько новых алгоритмов перемножения матриц различных размерностей. Однако их скорость для произвольного поля далека от скорости известных лучших алгоритмов. Так для матриц 4x4 алгоритм Штрассена требует 49 умножений, а AlphaTensor нашёл алгоритм, требующий 47 умножений, но работает он только для поля [англ.].
В 2025 году компанией DeepMind при помощи нейросетевого алгоритма были найдены ещё несколько новых алгоритмов перемножения матриц различных размерностей, в том числе алгоритм для матриц размера 4x4, требующий 48 умножений, работающий без ограничений предшественника.
Примечания
- Математики преодолели барьер Копперсмита-Винограда. lenta.ru (12 декабря 2011). Дата обращения: 12 декабря 2011. Архивировано 5 февраля 2012 года.
- R.P.Brent. Algorithms for matrix multiplications// Computer Science Dept. Report CS 157, Stanford University, 1970.
- Сложность умножения матриц. Обзор//Кибернетич. сборник. 1988. Вып. 25. С. 139—236.
- Landsberg J. M. Geometry and the complexity of matrix multiplication// Bull. Amer. Math. Soc. 2008. V.45. P. 247—284.
- А. В. Смирнов, «О билинейной сложности и практических алгоритмах умножения матриц», Ж. вычисл. матем. и матем. физ., 53:12 (2013), 1970—1984; Comput. Math. Math. Phys., 53:12 (2013), 1781—1795. Дата обращения: 21 сентября 2022. Архивировано 21 сентября 2022 года.
- Discovering novel algorithms with AlphaTensor (англ.). www.deepmind.com. Дата обращения: 6 октября 2022. Архивировано 5 октября 2022 года.
- Alhussein Fawzi, Matej Balog, Aja Huang, Thomas Hubert, Bernardino Romera-Paredes. Discovering faster matrix multiplication algorithms with reinforcement learning (англ.) // Nature. — 2022-10. — Vol. 610, iss. 7930. — P. 47–53. — ISSN 1476-4687. — doi:10.1038/s41586-022-05172-4. Архивировано 6 октября 2022 года.
- Meet AlphaEvolve, the Google AI that writes its own code—and just saved millions in computing costs
- AlphaEvolve: A Gemini-powered coding agent for designing advanced algorithms
- Программисты, выдыхайте: ИИ теперь сам пишет код, оптимизирует обучение, правит Verilog и не просит премию
Литература
- Strassen V. Gaussian Elimination is not Optimal (англ.) // Numerische Mathematik / F. Brezzi — Springer Science+Business Media, 1969. — Vol. 13, Iss. 4. — P. 354—356. — ISSN 0029-599X; 0945-3245 — doi:10.1007/BF02165411
- Левитин А. В. Глава 4. Метод декомпозиции: Умножение больших целых чисел и алгоритм умножения матриц Штрассена // Алгоритмы. Введение в разработку и анализ — М.: Вильямс, 2006. — С. 189—195. — 576 с. — ISBN 978-5-8459-0987-9
- Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн, Клифорд. Глава 28. Работа с матрицами // Алгоритмы: построение и анализ = Introduction to Algorithms. — 2-e издание. — М.: , 2005. — С. 833 - 839. — ISBN 5-8459-0857-4.
Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры, мобильный, телефон, Android, iOS, apple, мобильный телефон, Samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Сеть, компьютер, Информация о Алгоритм Штрассена, Что такое Алгоритм Штрассена? Что означает Алгоритм Штрассена?
Algoritm Shtrassena prednaznachen dlya bystrogo umnozheniya matric On byl razrabotan Folkerom Shtrassenom v 1969 godu i yavlyaetsya obobsheniem metoda umnozheniya Karacuby na matricy V otlichie ot tradicionnogo algoritma umnozheniya matric po formule cij aikbkj displaystyle c ij sum a ik b kj rabotayushego za vremya 8 nlog2 8 8 n3 displaystyle Theta n log 2 8 Theta n 3 algoritm Shtrassena umnozhaet matricy za vremya 8 nlog2 7 O n2 81 displaystyle Theta n log 2 7 O n 2 81 chto dayot vyigrysh na bolshih plotnyh matricah Nesmotrya na to chto algoritm Shtrassena yavlyaetsya asimptoticheski ne samym bystrym iz sushestvuyushih algoritmov bystrogo umnozheniya matric on proshe programmiruetsya i effektivnee pri umnozhenii matric otnositelno malogo razmera poetomu imenno on chashe ispolzuetsya na praktike Opisanie algoritmaDlya umnozheniya 2x2 matric ispolzuyutsya proizvedeniya summ i raznostej elementov Na illyustracii kazhdoe takoe proizvedenie vzyato v otdelnuyu cvetnuyu ramku a sposob ih komponovki v finalnuyu matricu oboznachen ishodyashimi luchami Esli dobavit k matricam A displaystyle A i B displaystyle B odinakovye nulevye stroki i stolbcy ih proizvedenie stanet ravno matrice AB displaystyle AB s temi zhe dobavlennymi strokami i stolbcami Poetomu mozhno rassmatrivat tolko matricy razmera n 2k k N displaystyle n 2 k k in mathbb N a drugie sluchai svodit k etomu dobavleniem nulej otchego n displaystyle n mozhet uvelichitsya lish vdvoe Pust A B displaystyle A B matricy razmera 2k 2k displaystyle 2 k times 2 k Ih mozhno predstavit kak blochnye matricy razmera 2 2 displaystyle 2 times 2 iz 2k 1 2k 1 displaystyle 2 k 1 times 2 k 1 matric A A11A12A21A22 B B11B12B21B22 displaystyle A begin pmatrix A 11 amp A 12 A 21 amp A 22 end pmatrix quad B begin pmatrix B 11 amp B 12 B 21 amp B 22 end pmatrix Po principu blochnogo umnozheniya matrica AB displaystyle AB vyrazhaetsya cherez ih proizvedenie AB A11B11 A12B21A11B12 A12B22A21B11 A22B21A21B12 A22B22 displaystyle AB begin pmatrix A 11 B 11 A 12 B 21 amp A 11 B 12 A 12 B 22 A 21 B 11 A 22 B 21 amp A 21 B 12 A 22 B 22 end pmatrix gde v pravoj chasti proishodit vosem umnozhenij matric razmera 2k 1 2k 1 displaystyle 2 k 1 times 2 k 1 Poskolku matricy obrazuyut kolco to dlya vychisleniya pravoj chasti goditsya lyuboj algoritm umnozheniya 2 2 displaystyle 2 times 2 matric ispolzuyushij lish slozheniya vychitaniya i umnozheniya Shtrassen predlozhil takoj algoritm s semyu umnozheniyami D A11 A22 B11 B22 D1 A12 A22 B21 B22 D2 A21 A11 B11 B12 H1 A11 A12 B22 H2 A21 A22 B11 V1 A22 B21 B11 V2 A11 B12 B22 displaystyle begin aligned D amp A 11 A 22 B 11 B 22 D 1 amp A 12 A 22 B 21 B 22 D 2 amp A 21 A 11 B 11 B 12 H 1 amp A 11 A 12 B 22 H 2 amp A 21 A 22 B 11 V 1 amp A 22 B 21 B 11 V 2 amp A 11 B 12 B 22 end aligned AB D00D D100D2 H1H1H2 H2 V1V2V1V2 D D1 V1 H1V2 H1V1 H2D D2 V2 H2 displaystyle begin aligned AB amp begin pmatrix D amp 0 0 amp D end pmatrix begin pmatrix D 1 amp 0 0 amp D 2 end pmatrix begin pmatrix H 1 amp H 1 H 2 amp H 2 end pmatrix begin pmatrix V 1 amp V 2 V 1 amp V 2 end pmatrix amp begin pmatrix D D 1 V 1 H 1 amp V 2 H 1 V 1 H 2 amp D D 2 V 2 H 2 end pmatrix end aligned Kazhdoe umnozhenie mozhno sovershat rekursivno po toj zhe procedure a slozhenie trivialno skladyvaya 2k 1 2 displaystyle 2 k 1 2 elementov Togda vremya raboty algoritma T n displaystyle T n ocenivaetsya cherez rekurrentnoe sootnoshenie T n 7T n 2 O n2 O nlog2 7 displaystyle T n 7T n 2 O n 2 O n log 2 7 Primer realizaciiNizhe privedyon primer realizacii algoritma na yazyke Python s ispolzovaniem biblioteki NumPy dlya bystrogo vzyatiya podmatric Osnovnaya funkciya strassen mul Predpolagaetsya chto vse matricy kvadratny predstavleny tipom numpy array i ih razmer yavlyaetsya stepenyu 2 Pri nebolshih razmerah matricy pryamoe umnozhenie okazyvaetsya bystree algoritma Shtrassena iz za bolshogo chisla slozhenij v poslednem Granica takih razmerov zavisit ot sootnosheniya vremeni slozheniya i umnozheniya elementov i poetomu mozhet varirovatsya v zavisimosti ot apparatnoj sredy V kode za eyo naznachenie otvechaet konstanta TRIVIAL MULTIPLICATION BOUND from itertools import product import numpy as np def split to 2x2 blocks matrix return list map lambda row np hsplit row 2 np vsplit matrix 2 def strassen mul 2x2 lb rb d strassen mul lb 0 0 lb 1 1 rb 0 0 rb 1 1 d 1 strassen mul lb 0 1 lb 1 1 rb 1 0 rb 1 1 d 2 strassen mul lb 1 0 lb 0 0 rb 0 0 rb 0 1 left strassen mul lb 1 1 rb 1 0 rb 0 0 right strassen mul lb 0 0 rb 0 1 rb 1 1 top strassen mul lb 0 0 lb 0 1 rb 1 1 bottom strassen mul lb 1 0 lb 1 1 rb 0 0 return d d 1 left top right top left bottom d d 2 right bottom def trivial mul left right height mid size left shape mid size width right shape result np zeros height width for row col mid in product map range height width mid size result row col left row mid right mid col return result TRIVIAL MULTIPLICATION BOUND 8 def strassen mul left right assert left shape right shape assert left shape 0 left shape 1 if left shape 0 lt TRIVIAL MULTIPLICATION BOUND return trivial mul left right assert left shape 0 2 0 return np block strassen mul 2x2 map split to 2x2 blocks left right Dalnejshee razvitieShtrassen byl pervym kto pokazal vozmozhnost umnozheniya matric bolee effektivnym sposobom chem standartnyj Posle publikacii ego raboty v 1969 nachalis aktivnye poiski bolee bystrogo algoritma Samym asimptoticheski bystrym algoritmom na segodnyashnij den yavlyaetsya algoritm Koppersmita Vinograda pozvolyayushij peremnozhat matricy za O n2 376 displaystyle rm O n 2 376 operacij predlozhennyj v 1987 godu i usovershenstvovannyj v 2011 godu do urovnya O n2 3727 displaystyle rm O n 2 3727 Etot algoritm ne predstavlyaet prakticheskogo interesa v silu astronomicheski bolshoj konstanty v ocenke arifmeticheskoj slozhnosti Vopros o predelnoj v asimptotike skorosti peremnozheniya matric ne reshen Sushestvuet gipoteza Shtrassena o tom chto dlya dostatochno bolshih n displaystyle n sushestvuet algoritm peremnozheniya dvuh matric razmera n n displaystyle n times n za O n2 e displaystyle rm O n 2 varepsilon operacij gde e displaystyle varepsilon skol ugodno maloe napered zadannoe polozhitelnoe chislo Eta gipoteza imeet sugubo teoreticheskij interes tak kak razmer matric dlya kotoryh e displaystyle varepsilon dejstvitelno malo po vsej vidimosti ochen velik Vopros o postroenii naibolee bystrogo i ustojchivogo prakticheskogo algoritma umnozheniya bolshih matric takzhe ostaetsya nereshyonnym Algoritm Vinograda ShtrassenaSushestvuet modifikaciya algoritma Shtrassena dlya kotoroj trebuetsya 7 umnozhenij i 15 slozhenij vmesto 18 dlya obychnogo algoritma Shtrassena Matricy A B C displaystyle A B C delyatsya na blochnye podmatricy kak pokazano vyshe Vychislyayutsya promezhutochnye elementy S1 S8 P1 P7 T1 T2 displaystyle S 1 ldots S 8 P 1 ldots P 7 T 1 T 2 S1 A21 A22 S2 S1 A11 S3 A11 A21 S4 A12 S2 S5 B12 B11 S6 B22 S5 S7 B22 B12 S8 S6 B21 P1 S2S6 P2 A11B11 P3 A12B21 P4 S3S7 P5 S1S5 P6 S4B22 P7 A22S8 T1 P1 P2 T2 T1 P4 displaystyle begin aligned S 1 amp A 21 A 22 S 2 amp S 1 A 11 S 3 amp A 11 A 21 S 4 amp A 12 S 2 S 5 amp B 12 B 11 S 6 amp B 22 S 5 S 7 amp B 22 B 12 S 8 amp S 6 B 21 P 1 amp S 2 S 6 P 2 amp A 11 B 11 P 3 amp A 12 B 21 P 4 amp S 3 S 7 P 5 amp S 1 S 5 P 6 amp S 4 B 22 P 7 amp A 22 S 8 T 1 amp P 1 P 2 T 2 amp T 1 P 4 end aligned Elementy matricy C displaystyle C vychislyayutsya sleduyushim obrazom C11C12C21C22 P2 P3T1 P5 P6T2 P7T2 P5 displaystyle begin pmatrix C 11 amp C 12 C 21 amp C 22 end pmatrix begin pmatrix P 2 P 3 amp T 1 P 5 P 6 T 2 P 7 amp T 2 P 5 end pmatrix Sovremennoe sostoyanie voprosaAlgoritm Shtrassena yavlyaetsya bilinejnym algoritmom ego koefficienty yavlyayutsya kornyami kubicheskoj sistemy uravnenij Brenta Dlya klassa tochnyh algoritmov lt 2x2x2 gt eto minimalnaya zadacha reshenie kotoroj pozvolyaet umenshit chislo umnozhenij v kolce elementov matric Problema poiska novyh algoritmov zaklyuchaetsya v tom chto sistema Brenta nelinejnaya chisla neizvestnyh i uravnenij eti chisla ne sovpadayut bystro rastet s uvelicheniem razmera matric i trebuyutsya resheniya tolko s bolshim kolichestvom nulej B 2013 godu posle chastichnogo preodoleniya etih problem udalos najti pervyj prakticheski realizuemyj bilinejnyj algoritm umnozheniya matric kotoryj asimptoticheski bystree algoritma Shtrassena Algoritm Smirnova lt 3x3x6 40 gt umnozhaet matricu 3X3 na matricu 3x6 ispolzuya 40 umnozhenij vmesto 54 Ego asimptoticheskaya slozhnost O nlog54 64000 O n2 78 displaystyle O n log 54 64000 O n 2 78 Tenzornoe umnozhenie algoritma na sebya s ciklicheskim sdvigom argumentov privodit k algoritmu dlya kvadratnyh matric lt 54x54x54 64000 gt s toj zhe slozhnostyu Dlya realnogo uskoreniya umnozheniya trebuetsya sushestvennaya optimizaciya udalenie mnozhestva dubliruyushih vychislenij v linejnyh formah Po sostoyaniyu na 2022 god eto asimptoticheski naibolee bystryj prakticheski realizuemyj bilinejnyj algoritm dlya proizvolnogo polya elementov matric V 2022 godu kompaniej DeepMind pri pomoshi nejrosetevogo algoritma byli najdeny neskolko novyh algoritmov peremnozheniya matric razlichnyh razmernostej Odnako ih skorost dlya proizvolnogo polya daleka ot skorosti izvestnyh luchshih algoritmov Tak dlya matric 4x4 algoritm Shtrassena trebuet 49 umnozhenij a AlphaTensor nashyol algoritm trebuyushij 47 umnozhenij no rabotaet on tolko dlya polya angl V 2025 godu kompaniej DeepMind pri pomoshi nejrosetevogo algoritma byli najdeny eshyo neskolko novyh algoritmov peremnozheniya matric razlichnyh razmernostej v tom chisle algoritm dlya matric razmera 4x4 trebuyushij 48 umnozhenij rabotayushij bez ogranichenij predshestvennika PrimechaniyaMatematiki preodoleli barer Koppersmita Vinograda neopr lenta ru 12 dekabrya 2011 Data obrasheniya 12 dekabrya 2011 Arhivirovano 5 fevralya 2012 goda R P Brent Algorithms for matrix multiplications Computer Science Dept Report CS 157 Stanford University 1970 Slozhnost umnozheniya matric Obzor Kibernetich sbornik 1988 Vyp 25 S 139 236 Landsberg J M Geometry and the complexity of matrix multiplication Bull Amer Math Soc 2008 V 45 P 247 284 A V Smirnov O bilinejnoj slozhnosti i prakticheskih algoritmah umnozheniya matric Zh vychisl matem i matem fiz 53 12 2013 1970 1984 Comput Math Math Phys 53 12 2013 1781 1795 neopr Data obrasheniya 21 sentyabrya 2022 Arhivirovano 21 sentyabrya 2022 goda Discovering novel algorithms with AlphaTensor angl www deepmind com Data obrasheniya 6 oktyabrya 2022 Arhivirovano 5 oktyabrya 2022 goda Alhussein Fawzi Matej Balog Aja Huang Thomas Hubert Bernardino Romera Paredes Discovering faster matrix multiplication algorithms with reinforcement learning angl Nature 2022 10 Vol 610 iss 7930 P 47 53 ISSN 1476 4687 doi 10 1038 s41586 022 05172 4 Arhivirovano 6 oktyabrya 2022 goda Meet AlphaEvolve the Google AI that writes its own code and just saved millions in computing costs AlphaEvolve A Gemini powered coding agent for designing advanced algorithms Programmisty vydyhajte II teper sam pishet kod optimiziruet obuchenie pravit Verilog i ne prosit premiyuLiteraturaStrassen V Gaussian Elimination is not Optimal angl Numerische Mathematik F Brezzi Springer Science Business Media 1969 Vol 13 Iss 4 P 354 356 ISSN 0029 599X 0945 3245 doi 10 1007 BF02165411 Levitin A V Glava 4 Metod dekompozicii Umnozhenie bolshih celyh chisel i algoritm umnozheniya matric Shtrassena Algoritmy Vvedenie v razrabotku i analiz M Vilyams 2006 S 189 195 576 s ISBN 978 5 8459 0987 9 Kormen Tomas H Lejzerson Charlz I Rivest Ronald L Shtajn Kliford Glava 28 Rabota s matricami Algoritmy postroenie i analiz Introduction to Algorithms 2 e izdanie M 2005 S 833 839 ISBN 5 8459 0857 4
