Алгоритм Штрассена

Вступ та постановка задачі

Розмноження матриць за визначенням, вбудована функція

matmul та оптимізація

1 Вступ та постановка задачі

Одне з основних завдань цієї роботи - реалізувати алгоритм Штрассена. Це рекурсивний алгоритм множення матриць, що дозволяє значно прискорити процес множення. Слід зазначити, що цей алгоритм ефективний лише матриць досить великого розміру. Визначити розмір матриць, з якого є сенс починати множити за алгоритмом Штрассена, можна експериментальним шляхом. Крім того, я вже згадувала, що алгоритм є рекурсивним. У нерекурсивної галузі алгоритму використовується "просте" множення матриць, тобто. множення за визначенням. Зробити нерекурсивну гілку найефективнішою та організувати вихід із рекурсії у потрібний момент – ще одне завдання моєї роботи.

Отже, намітимо цілі роботи:

реалізувати алгоритм Штрассена;

Експериментально визначити розмір матриці, котрій слід переходити на множення по алгоритму;

Організувати вихід із рекурсії у потрібний момент;

Зробити не рекурсивну гілку найефективнішою.

2 Алгоритм Штрассена

Найвитратніша за часом операція - множення. Тобто. щоб прискорити процес, потрібно скоротити їхнє число. Штрассен вигадав алгоритм [1, 2, 3], який дозволяє уникнути одного множення. Чудово, що формули вимагають комутативності складання, тобто. вони застосовні і для матриць, що дозволяє застосовувати алгоритм рекурсивно.

Алгоритм працює з квадратними матрицями розміру 2 n. Зауважимо, що для множення матриць такого розміру потрібно 2 3n множень. Якщо ж матриці не квадратні, то можна розширити їх до потрібного розміру, заповнивши рядки, що відсутні, і стовпці нулями. Припустимо, є двіматриці A і B розміру 2 n які потрібно перемножити: C = AB. Розіб'ємо кожну матрицю на чотири підматриці: