Алгоритъм на Strassen

Въведение и постановка на проблема

Матрично умножение по дефиниция, вградена функция

матмул и оптимизация

1 Въведение и формулиране на проблема

Една от основните задачи на тази работа е прилагането на алгоритъма на Strassen. Това е рекурсивен алгоритъм за умножение на матрици, който ви позволява значително да ускорите процеса на умножение. Трябва да се отбележи, че този алгоритъм е ефективен само за достатъчно големи матрици. Възможно е експериментално да се определи размерът на матриците, от които има смисъл да се започне умножаване с помощта на алгоритъма на Strassen. Освен това вече споменах, че алгоритъмът е рекурсивен. Нерекурсивният клон на алгоритъма използва "просто" матрично умножение, т.е. умножение по дефиниция. Да направя нерекурсивния клон най-ефективен и да организирам изхода от рекурсията в точното време е друга задача от моята работа.

И така, нека очертаем целите на работата:

Приложете алгоритъма на Strassen;

Експериментално намерете размера на матрицата, за която е необходимо да преминете към умножение по алгоритъма;

Организирайте изхода от рекурсията в точното време;

Направете нерекурсивния клон най-ефективен.

2 алгоритъм на Strassen

Най-отнемащата време операция е умножението. Тези. за да ускорите процеса, трябва да намалите броя им. Strassen излезе с алгоритъм [1, 2, 3], който избягва едно умножение. Забележително е, че формулите не изискват комутативност на събирането, т.е. те са приложими и за матрици, което прави възможно прилагането на алгоритъма рекурсивно.

Алгоритъмът работи с квадратни матрици с размер 2 n . Имайте предвид, че умножаването на матрици с този размер изисква 2 3n умножения. Ако матриците не са квадратни, тогава можете да ги разширите до желания размер, като попълните липсващите редове и колони с нули. Да кажем, че са две2 n матрици A и B за умножение: C = AB. Нека разделим всяка матрица на четири подматрици: