Pagini recente » Sandbox | Sandbox | Diferente pentru utilizator/alexradu04 intre reviziile 16 si 17 | Diferente pentru utilizator/tomescu_dorinel intre reviziile 25 si 24 | Diferente pentru pd intre reviziile 57 si 58
Diferente pentru
pd intre reviziile
#57 si
#58
Nu exista diferente intre titluri.
Diferente intre continut:
Să ne uităm mai atent la acest loop.
Fie un interval $[i,j]$ fixat. Acum, $opt[i][j] < opt[i][j']$, pentru orice $j < j'$. Similar, $opt[i][j] < opt[i'][j]$, pentru orice $i' < i$.
Atunci, există un indice $k$, $i \le k \le j$ astfel încât $max(opt[i][o-1], opt[o+1][j]) = opt[o+1][j]$, pentru orice $i \le o \le k$, şi $max(opt[i][o-1], opt[o+1][j]) = opt[i][o-1]$ pentru orice <tex>$k < o \le j$</tex>. După cum ştim, trebuie să aflăm <tex>\displaystyle\min_{i \le k \le j} \{a_{k} + \max( opt[i][k-1], opt[k+1][j] )\} </tex>. Să definim acum 2 matrici auxiliare:
Atunci, există un indice $k$, $i \le k \le j$ astfel încât $max(opt[i][o-1], opt[o+1][j]) = opt[o+1][j]$, pentru orice $i \le o \le k$, şi $max(opt[i][o-1], opt[o+1][j]) = opt[i][o-1]$ pentru orice <tex>$k < o \le j$</tex>. După cum ştim, trebuie să aflăm <tex>\displaystyle\min_{i \le k \le j} \{a_{k} + \max( opt[i][k-1], opt[k+1][j] )\} </tex>. Să definim acum 3 matrici auxiliare:
@to_left[ i ][ j ] = a_i + opt[ i + 1 ][ j ]@
@to_right[ i ][ j ] = a_j + opt[ i ][ j - 1 ]@
@inter[ i ][ j ] = <tex>\displaystyle\arg \max_{i \le k \le j}\{opt[i][k-1] \le opt[k+1][j]\} </tex>
Se observă că $inter[i][j]$ nu reprezintă altceva decât indicele $k$ tratat in paragraful precedent.
De asemenea, $inter$ poate fi calculată în $O(N^2)$ observând o proprietate simplă: <tex>$inter[i][j-1] \le inter[i][j] \le inter[i+1][j] $</tex>. Aceasta reiese imediat din monotonia lui $opt$ discutată mai sus.
Acum vine ideea decisivă pentru a reduce complexitatea loop-ului: pentru a afla $opt[i][j]$, este suficient să aflăm maximul dintre 2 valori:
* <tex>\displaystyle\min_{i \le k \le inter[i][j]} \{to_left[k][j]\} </tex> şi
* <tex>\displaystyle\min_{i \le k \le inter[i][j]} \{to_left[k][j]\} </tex>
Nu exista diferente intre securitate.
Topicul de forum nu a fost schimbat.