Sök…


Matriseksponentiering för att lösa exempelproblem

Hitta f (n): n: e Fibonacci-numret. Problemet är ganska enkelt när n är relativt liten. Vi kan använda enkel rekursion, f(n) = f(n-1) + f(n-2) , eller vi kan använda dynamisk programmeringsmetod för att undvika beräkning av samma funktion om och om igen. Men vad ska du göra om problemet säger: Med tanke på 0 <n <10⁹, hitta f (n) mod 999983? Dynamisk programmering kommer att misslyckas, så hur löser vi det här problemet?

Låt oss först se hur matriseksponentiering kan hjälpa till att representera rekursiv relation.

förutsättningar:

  • Med två matriser, vet du hur du hittar deras produkt. Vidare, med tanke på produktmatrisen för två matriser, och en av dem, vet hur man hittar den andra matrisen.
  • Med tanke på en matris med storlek d X d , veta hur man hittar sin n: a kraft i O (d 3 log (n)) .

Mönster:

Först behöver vi en rekursiv relation och vi vill hitta en matris M som kan leda oss till önskat tillstånd från en uppsättning av redan kända tillstånd. Låt oss anta att vi känner till k- tillstånden för en given återfallsrelation och vi vill hitta det (k + 1): e tillståndet. Låt M vara en k X k- matris, och vi bygger en matris A: [k X 1] från de kända tillstånden för återfallsrelationen, nu vill vi få en matris B: [k X 1] som kommer att representera uppsättningen av nästa tillstånd, dvs. MXA = B som visas nedan:

       |  f(n)  |     | f(n+1) |
       | f(n-1) |     |  f(n)  |
   M X | f(n-2) |  =  | f(n-1) |
       | ...... |     | ...... |
       | f(n-k) |     |f(n-k+1)|

Så om vi kan utforma M i enlighet med detta kommer vårt jobb att göras! Matrisen kommer sedan att användas för att representera återfallsrelationen.

Typ 1:
Låt oss börja med den enklaste, f(n) = f(n-1) + f(n-2)
Vi får, f(n+1) = f(n) + f(n-1) .
Låt oss anta att vi vet f(n) och f(n-1) ; Vi vill ta reda på f(n+1) .
Från den ovan angivna situationen kan matris A och matris B formas såsom visas nedan:

 Matrix A          Matrix B

|  f(n)  |        | f(n+1) |
| f(n-1) |        |  f(n)  |

[Obs: Matris A kommer alltid att utformas på ett sådant sätt att varje tillstånd som f(n+1) beror på kommer att vara närvarande]
Nu måste vi utforma en 2X2- matris M så att den uppfyller MXA = B enligt ovan.
Det första elementet i B är f(n+1) som faktiskt är f(n) + f(n-1) . För att få detta, från matris A , behöver vi 1 X f (n) och 1 X f (n-1) . Så den första raden med M kommer att vara [1 1] .

| 1   1 |  X  |  f(n)  |  =  | f(n+1) |
| ----- |     | f(n-1) |     | ------ |

[Obs: ----- betyder att vi inte är oroliga för detta värde.]
På liknande sätt är den andra delen av B f(n) som kan erhållas genom att helt enkelt ta 1 X f (n) från A , så den andra raden av M är [1 0].

| ----- |  X  |  f(n)  |  =  | ------ |
| 1   0 |     | f(n-1) |     |  f(n)  |

Sedan får vi vår önskade 2 X 2 matris M.

| 1   1 |  X  |  f(n)  |  =  | f(n+1) |
| 1   0 |     | f(n-1) |     |  f(n)  |

Dessa matriser härrör helt enkelt med hjälp av matrismultiplikation.

Typ 2:

Låt oss göra det lite komplicerat: hitta f(n) = a X f(n-1) + b X f(n-2) , där a och b är konstanter.
Detta säger oss, f(n+1) = a X f(n) + b X f(n-1) .
Hittills borde detta vara tydligt att matrisernas dimension kommer att vara lika med antalet beroenden, dvs i detta specifika exempel, återigen. Så för A och B kan vi bygga två matriser i storlek 2 X 1 :

Matrix A             Matrix B
|  f(n)  |          | f(n+1) |
| f(n-1) |          |  f(n)  |

För f(n+1) = a X f(n) + b X f(n-1) behöver vi [a, b] i den första raden med objektivmatris M. Och för det andra objektet i B , dvs f(n) vi det redan i matris A , så vi tar bara det, som leder, den andra raden i matrisen M till [1 0]. Den här gången får vi:

| a   b |  X  |  f(n)  |  =  | f(n+1) |
| 1   0 |     | f(n-1) |     |  f(n)  |

Ganska enkelt, va?

Typ 3:

Om du har överlevt till detta skede har du blivit mycket äldre, låt oss nu möta en lite komplex relation: hitta f(n) = a X f(n-1) + c X f(n-3) ?
Oj! För några minuter sedan var allt vi såg sammanhängande tillstånd, men här saknas tillståndet f (n-2) . Nu?

Egentligen är detta inte ett problem längre, vi kan konvertera förhållandet enligt följande: f(n) = a X f(n-1) + 0 X f(n-2) + c X f(n-3) , drar f(n+1) = a X f(n) + 0 X f(n-1) + c X f(n-2) . Nu ser vi det, det här är faktiskt en form som beskrivs i typ 2. Så här kommer objektivmatrisen M att vara 3 X 3 och elementen är:

| a 0 c |     |  f(n)  |     | f(n+1) |
| 1 0 0 |  X  | f(n-1) |  =  |  f(n)  |
| 0 1 0 |     | f(n-2) |     | f(n-1) |

Dessa beräknas på samma sätt som typ 2, om du har svårt kan du prova det på penna och papper.

Typ 4:

Livet blir komplicerat som helvete, och Mr, Problem ber dig nu att hitta f(n) = f(n-1) + f(n-2) + c där c är någon konstant.
Nu är detta ett nytt och allt vi har sett tidigare, efter multiplikationen, förvandlas varje tillstånd i A till sitt nästa tillstånd i B.

f(n) = f(n-1) + f(n-2) + c
f(n+1) = f(n) + f(n-1) + c
f(n+2) = f(n+1) + f(n) + c
.................... so on

Så normalt sett kan vi inte få det genom tidigare mode, men vad sägs om vi lägger till c som ett tillstånd:

      |  f(n)  |   | f(n+1) |
  M X | f(n-1) | = |  f(n)  |
      |    c   |   |    c   |

Nu är det inte mycket svårt att designa M. Så här görs, men glöm inte att verifiera:

  | 1 1 1 |     |  f(n)  |     | f(n+1) |
  | 1 0 0 |  X  | f(n-1) |  =  |  f(n)  |
  | 0 0 1 |     |    c   |     |    c   |

Typ 5:

Låt oss säga det helt: hitta f(n) = a X f(n-1) + c X f(n-3) + d X f(n-4) + e . Låt oss lämna det som en övning för dig. Försök först ta reda på tillstånden och matrisen M. Och kolla om det stämmer med din lösning. Hitta även matris A och B.

| a 0 c d 1 |
| 1 0 0 0 0 |
| 0 1 0 0 0 |
| 0 0 1 0 0 |
| 0 0 0 0 1 |

Typ 6:

Ibland ges återfallet så här:

f(n) = f(n-1)   -> if n is odd
f(n) = f(n-2)   -> if n is even

Kortfattat:

f(n) = (n&1) X f(n-1) + (!(n&1)) X f(n-2)

Här kan vi dela funktionerna utifrån udda jämna och hålla 2 olika matriser för båda och beräkna dem separat.

Typ 7:

Känner du dig lite för säker? Bra för dig. Ibland kan vi behöva hålla mer än ett återfall, där de är intresserade. Låt till exempel en återfall återkomma; atopm vara:

g(n) = 2g(n-1) + 2g(n-2) + f(n)

Här är återfall g (n) beroende av f(n) och detta kan beräknas i samma matris men av ökade dimensioner. Låt oss från början designa matriserna A och B.

 Matrix A            Matrix B
|  g(n)  |          | g(n+1) |
| g(n-1) |          |  g(n)  |
| f(n+1) |          | f(n+2) |
|  f(n)  |          | f(n+1) |

Här är g(n+1) = 2g(n-1) + f(n+1) and f(n+2) = 2f(n+1) + 2f(n) . Genom att använda de processer som anges ovan kan vi hitta den objektiva matrisen M :

| 2 2 1 0 |
| 1 0 0 0 |
| 0 0 2 2 |
| 0 0 1 0 |

Så det är de grundläggande kategorierna för återfallsrelationer som används för att lösa denna enkla teknik.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow