Štrasenov algoritam
Шаблон:Neprovereni seminarski Štrasenov algoritam, koji je dobio ime po nemačkom matematičaru Volkeru Štrasenu, služi za množenje matrica. Brži je od standardnog algoritma za množenje matrica i koristi se za matrice velikog stepena, međutim postoje algoritmi koji su još brži za veoma velike matrice.
Istorija
Volker Štrasen je ovaj algoritam objavio 1969. godine i dokazao da za Шаблон:Math standardni algoritam nije optimalan. Štrasenov algoritam nije puno bolji, ali je prouzrokovao intezivnije istraživanje na temu množenja matrica što je dovelo do bržih algoritama kao što je -{Coppersmith–Winograd}- algoritam.
Algoritam

Neka su -{A}- i -{B}- kvadratne matrice nad R. Mi želimo da izračunamo njihov proizvod što će biti matrica -{C}-:
Ako -{A}- i/ili -{B}- nisu tipa popunimo redove i kolone koji nedostaju nulama.
Podelimo -{A}-, -{B}- i -{C}- u blokove jednakih dimenzija:
tako da važi:
onda je:
Ovim nismo smanjili broj množenja. Još uvek nam treba 8 množenja da bismo odredili -{Ci,j}- matrice.
Sledi najvažniji deo. Definišemo nove matrice:
Sada možemo izraziti -{Ci,j}- preko -{Mk}-:
Prolazimo kroz algoritam -{n}- puta (dok podmatrice ne postanu brojevi). Na kraju treba obrisati preostale nule.
Obično se pri implementiranju Štrasenovog algoritma za dovoljno male podmatrice koriste standardne metode, koje su u tom slučaju efikasnije. Prelazna tačka na kojoj Štrasenov algoritam postaje efikasniji zavisi od implementacije i hardvera. Ranije se predviđalo da je Štrasenov algoritam brži kod matrica dimenzija između 32 i 128 za optimizovane implementacije.[1] Međutim u skorije vreme se ispostavilo da se prelazna tačka povećava, istraživanje sprovedeno 2010. godine pokazalo je da na trenutnim arhitekturama čak ni samo jedan korak Štrasenovog algoritma ne donosi prednosti u odnosu na optimizovana tradicionalna množenja, dok rang matrica ne pređe 1000, pa čak i tad, kada je rang do nekoliko hiljada, prednost je marginalna (u najboljem slučaju 10%).[2]
Asimptotska složenost
Standardno množenje matrica ima približno Шаблон:Math (za Шаблон:Math) aritmetičkih operacija; asimptotska složenost je Шаблон:Math.
Broj aritmetičkih operacija u Štrasenovom algoritmu može da se izračuna na sledeći način: neka je Шаблон:Math broj operacija za matricu dimenzije Шаблон:Math. Zatim rekurzivnom primenom algoritma, vidimo da je Шаблон:Math, za neko konstantno '-{'l}- koje zavisi od broja sabiranja u konkretnoj implementaciji algoritma. Dakle Шаблон:Math, t.j. asimptotska složenost za množenje matrica dimenzije Шаблон:Math pomoću Štrasenovog algoritma je:
- .
Umanjenjem broja aritmetičkih operacija se ipak smanjuje numerička stabilnost,[3] takođe algoritam zahteva znatno više memorije u odnosu na naivni algoritam. Dimenzije obe početne matrice treba proširiti do prvog sledećeg stepena dvojke, što može povećati broj elemenata do četiri puta i rezultovati sa sedam pomoćnih matrica takvih da svaka ima četvrtinu elemenata iz proširenog dela.
Rang ili bilinearna složenost
Bilinearna složenost ili rang bilinearne mape je bitan koncept u asimptotskoj složenosti množenja matrica. Rang bilinearne mape nad poljem -{F}- se definiše kao (ne baš formalna notacija):
Drugim rečima, rang bilinearne mape je dužina njenog najkraćeg bilinearnog računa.[4] Postojanje Štrasenovog algoritma pokazuje da rang množenja 2×2 matrica nije veći od sedam. Da bismo se uverili, koristimo brzi algoritam (uz standardni algoritam) kao takav bilinearni račun. U slučaju matrica, dualni prostori -{A}-* i -{B*}- se sastoje od mapa u polju -{F}- indukovanih skalarnim vektorskim proizvodom, (t.j. u ovom slučaju zbirom svih elemenata Hadamardovog proizvoda.)
| Standardni algoritam | Štrasenov algoritam | ||||||
| i | fi(a) | gi(b) | wi | fi(a) | gi(b) | wi | |
| 1 | |||||||
| 2 | |||||||
| 3 | |||||||
| 4 | |||||||
| 5 | |||||||
| 6 | |||||||
| 7 | |||||||
| 8 | |||||||
Može se pokazati da je ukupan broj osnovnih množenja -{L}- potrebnih za množenje matrica asimptotski strogo vezan za rang -{R}-, t.j. , ili preciznije, pošto su konstante poznate, . Jedno od korisnih svojstava ranga je submultiplikativnost za tenzorske proizvode, što nam omogućava da pokažemo da množenje -{2n×2n×2n}- matrica može biti postignuto sa ne više od 7n osnovnih množenja za svako -{n}-.
Saveti za implementaciju
Do sad smo pretpostavljali da su matrice kvadratne, i da su dimenzije stepena dvojke, i da se matrice proširuju, ukoliko je potrebno. Ovi uslovi omogućavaju matricama da se polove sve dok se u množenju ne dođe do limita ili skalara. Takođe, te restrikcije nam olakšavaju objašnjenje i analizu složenosti, ali nisu neophodne. Popunjavanje matrice na način koji je ranije opisan, ustvari, povećava vreme izračunavanja, i može smanjiti ili u potpunosti ukinuti vreme koje sačuvano korišćenjem ove metode
Radi dobre implementacije treba primetiti:
- Nije potrebno, a ni poželjno koristiti Štrasenov algoritam sve do skalarnih vrednosti. U odnosu na konvencionalno množenje matrica, ovaj algoritam dodaje još sabiranja i oduzimanja. Dakle, ispod određene veličine, bolje je koristiti konvencionalno množenje. Na primer, ako su početne matrice dimenzija 1600x1600, nema potrebe dopunjavati ih do 2048x2048, nego je bolje podeliti ih na podmatrice 25x25 i koristiti standardno množenje.
- Štrasenov algoritam takođe može da se primeni na matrice bilo kojih dimenzija. Ako je dimenzija parna onda se matrica deli na način koji je predhodno opisan, a ako je neparna onda se matrica dopunjuje nula redom i kolonom. Ovakvo dopunjavanje se može izvršiti usput i lenjo, a dodatni redovi i kolone se brišu kad se formira rezultat. Na primer, recimo da su matrice dimenzija 199x199. One se mogu podeliti na dva dela: gore-levo, dimenzija 100x100 i dole-desno, 99x99. Kada je potrebno 99 se može dopuniti do 100. Primetimo da se, na primer, proizvod koristi samo u donjem delu izlaza. S obzirom da levi činilac ima samo 99 redova, nema potrebe dodavati 100. red u sumu. Jedino što je potrebno dodaviti je kolona u da bi moglo da se množi sa .
- Osim toga, nema potrebe da matrice budu kvadratne. Nekvadratne matrice se mogu podeliti koristeći iste metode kao kvadratne, praveći manje nekvadratne matrice. Ako je razlika broja redova i kolona matrica veoma velika, poželjno je napraviti da matrice budu "kvadratnije". To se postiže jednostavnim metodama:
- Proizvod -{[2N x N] * [N x 10N]}- se može izraziti preko 20 zasebnih -{[N x N] * [N x N]}- operacija, sortiranih tako da formiraju rezultat;
- Proizvod -{[N x 10N] * [10N x N]}- se može odrediti sa 100 -{[N x N] * [N x N]}- operacija, koje se sabiraju da bi se dobio rezultat.
Ove tehnike otežavaju implementaciju algoritma u odnosu na obično dopunjavanje do stepena dvojke i kvadratne matrice. Ipak, jasno je da onom ko implementira Štrasenov algoritam na neki nekonvencionalni način bitnija efikasnost izvršavanja od jednostavnosti implementacije.
Reference
Literatura
- Strassen, Volker, Gaussian Elimination is not Optimal, Numer. Math. 13, p. 354-356, 1969
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill. Шаблон:Page. Chapter 28: Section 28.2: Strassen's algorithm for matrix multiplication, pp. 735–741.
Spoljašnje veze
- Шаблон:MathWorld (takođe sadrži formule za brzu inverziju matrica)
- Tyler J. Earnest, Strassen's Algorithm on the Cell Broadband Engine
- Simple Strassen's algorithms implementation in C
- ↑ Шаблон:Citation
- ↑ Шаблон:Cite conference
- ↑ Шаблон:Cite journal
- ↑ Burgisser, Clausen, and Shokrollahi. Algebraic Complexity Theory. Springer-Verlag 1997.