Množenje zaporedja matrik

Množenje zaporedja matrik

Avtor: Matija Lokar

Množenje matrik

  • C = A * B

    • A : d e in B : e f

    • O(def)

      (Slika2.png)
(Slika1.jpg)

Matrično množenje

  • Zaporedje množenj matrik:

    • Izračunaj A=A*A*…*A
    • A ima dimenzije d d
    • Problem: Kako postaviti oklepaje?
    • Zanima nas NAČIN množenja in ne množenja sama!

      • Rezultat bo vedno enak

        • Množenje matrik je asociativno!
    • Problem je smiseln, če bomo večkrat množili matrike enakih dimenzij, a z različnimi vrednostmi!
    • Vnaprej si pripravimo način množenja
  • Primer: B * C * D

    • B :
    • C :
    • D :
    • Dve možnosti

      • (B*C)*D : op + op = op
      • B*(C*D) : op + op = op
(Slika1.jpg)

Množenje 5 matrik

  • A1*A2*A3*A4*A5
  • A1: 30 * 35
  • A2: 35 * 15
  • A3: 15 * 10
  • A4: 10 * 5
  • A5: 5 * 10
  • 14 načinov!
(Slika3.png)

Preizkusimo vse

  • Algoritem:

    • Na vse možne načine postavi oklepaje A=A*A*…*A
    • Za vsak način izračunaj število operacij
    • Izberi najboljšo
  • Čas:

    • Možnih načinov postavljanja oklepajev je toliko, kot je dvojiških dreves z n listi, kjer ima vsako vozlišče (razen lista) dva sinova (Zakaj?)
    • To je eksponentno!
    • Dobimo t.i. Catalan-ovo število, ki je približno 4.
    • Nemogoče slab algoritem!
(Slika4.jpg)

Požrešni pristop

  • Ideja: izberemo matriki z najmanj množenji.
  • Protiprimer:

    • A :
    • B :
    • C :
    • D :
    • Ideja

      • AB: , BC: , CD:
      • (B*C)
      • A: , (BC): , D:
      • A(BC): , (BC)D:
      • ((B*C)*D) :
      • (A*((B*C)*D))
      • + + = op
    • ((A*B)*(C*D))
    • + + = op
    • Boljše!

      • Je to najboljše možno?
(Slika5.jpg)

Še en požrešni način

  • Ideja: izberemo matriki, ki zahtevata največ operacij (da že na začetku "pokurimo požrešneže").
  • Protiprimer:

    • A :
    • B :
    • C :
    • D :
    • Naša ideja da: (A*B)*(C*D),

      • + + = op
    • A*((B*C)*D)

      • + + = op
(Slika5.jpg)

Ideja – razmišljajmo rekurzivno

  • Zadnja operacija bo zmnožila dve matriki
  • A = B * C

    • B so “leve” matrike
    • C so "desne" matrike
  • Če želimo, da je to optimalno, moramo tako do B, kot tudi do C, priti na optimalni način

    • Pravilo optimalnosti
  • Vprašanje:

    • Koliko matrik spada v B?
    • Če znamo to vedno določiti – imamo rešitev
    • Problem razpade na dva manjša problema ISTE vrste – rešimo enako
0%
0%