国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

動(dòng)態(tài)規(guī)劃——矩陣優(yōu)化DP 學(xué)習(xí)筆記

這篇具有很好參考價(jià)值的文章主要介紹了動(dòng)態(tài)規(guī)劃——矩陣優(yōu)化DP 學(xué)習(xí)筆記。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

動(dòng)態(tài)規(guī)劃——矩陣優(yōu)化DP 學(xué)習(xí)筆記

前置知識(shí):矩陣、矩陣乘法。

矩陣乘法優(yōu)化線性遞推

斐波那契數(shù)列

在斐波那契數(shù)列當(dāng)中,\(f_1 = f_2 = 1\),\(f_i = f_{i - 1} + f_{i - 2}\),求 \(f_n\)。

而分析式子可以知道,求 \(f_k\) 僅與 \(f_{k - 1}\)\(f_{k - 2}\) 有關(guān);
所以我們?cè)O(shè)矩陣 \(F_i = \begin{bmatrix} f_{i - 1} & f_{i - 2} \end{bmatrix}\)。

設(shè)矩陣 \(\text{Base}\),使得 \(F_{i - 1} \times \text{Base} = F_i\),接下來(lái)考慮 \(\text{Base}\) 是什么;
帶入可得 \(\begin{bmatrix} f_{i - 2} & f_{i - 3} \end{bmatrix} \times \text{Base} = \begin{bmatrix} f_{i - 1} & f_{i - 2} \end{bmatrix}\)

\(\begin{bmatrix} f_{i - 2} & f_{i - 3} \end{bmatrix} \times \text{Base} = \begin{bmatrix} f_{i - 2} + f_{i - 3} & f_{i - 2} \end{bmatrix}\);
根據(jù)矩陣乘法的規(guī)則可知 \(\text{Base}\) 的第 \(1\) 列應(yīng)為 \(\begin{bmatrix} 1 & 1 \end{bmatrix}^\text{T}\),第 \(2\) 列應(yīng)為 \(\begin{bmatrix} 1 & 0 \end{bmatrix}^\text{T}\)。

所以求得 \(\text{Base} = \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}\)

然后考慮 \(f_i\) 的值應(yīng)該是多少;
根據(jù)前面的公式可以知道 \(f_i = F_{n + 1}\) 的第一個(gè)數(shù),所以就是求這個(gè)數(shù)。

根據(jù) \(f_1 = f_2 = 1\),可以知道 \(F_3 = \begin{bmatrix} f_2 & f_1 \end{bmatrix} = \begin{bmatrix} 1 & 1 \end{bmatrix}\),我們將這個(gè)作為邊界值;
然后有 \(F_4 = F_3 \times \text{Base}\)\(F_5 = F_4 \times \text{Base} = F_3 \times \text{Base} \times \text{Base}\)。

因?yàn)榫仃嚦朔ㄓ薪Y(jié)合律,所以 \(F_{n + 1} = F_3 \times \text{Base}^{n - 2} = \begin{bmatrix} 1 & 1 \end{bmatrix} \times \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}^{n - 2}\)。

因?yàn)榫仃嚊](méi)有交換律,所以 \(F_3\)(前)和 \(\text{Base}^{n - 2}\)(后)一定不能寫(xiě)反了!

例題1

\(\left\{\begin{array}{l} f_1 = f_2 = 0 \\ f_i = f_{i - 1} + f_{i - 2} + 1 \end{array}\right.\)

點(diǎn)擊查看題解

\(f_i\) 僅與 \(f_{i - 1}\)\(f_{i - 2}\) 有關(guān),同時(shí)還包括了常數(shù) \(1\)
所以我們?cè)O(shè) \(F_i = \begin{bmatrix} f_{i - 1} & f_{i - 2} & 1 \end{bmatrix}\),

然后設(shè) \(\text{Base}\) 使得 \(F_{i - 1} \times \text{Base} = F_i\),
\(\begin{bmatrix} f_{i - 2} & f_{i - 3} & 1 \end{bmatrix} \times \text{Base} = \begin{bmatrix} f_{i - 1} & f_{i - 2} & 1 \end{bmatrix}\)。

因?yàn)?\(f_{i - 1} = f_{i - 2} + f_{i - 3} + 1\),所以易知:

\(\text{Base} = \begin{bmatrix} 1 & 1 & 0 \\ 1 & 0 & 0 \\ 1 & 0 & 1 \end{bmatrix}\).

邊界條件為 \(F_3 = \begin{bmatrix} 0 & 0 & 1\end{bmatrix}\)
所以 \(F_{n + 1} = F_3 \times \text{Base}^{n - 2}\)。

即可求出 \(f_n\).

例題2

\(\left\{\begin{array}{l} f_1 = 0 \text{,} f_2 = 1 \\ f_i = f_{i - 1} + f_{i - 2} + i \end{array}\right.\)

點(diǎn)擊查看題解

\(f_i\) 僅與 \(f_{i - 1}\)、\(f_{i - 2}\)\(i\) 有關(guān),為實(shí)現(xiàn) \(i\) 的遞增,還需設(shè)置常量 \(1\);
所以我們?cè)O(shè) \(F_i = \begin{bmatrix} f_{i - 1} & f_{i - 2} & i & 1 \end{bmatrix}\)

\(F_{i - 1} \times \text{Base} = F_i\)\(\text{Base} = \begin{bmatrix} 1 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 1 & 0 & 1 & 0 \\ 0 & 0 & 1 & 1 \end{bmatrix}\).

邊界條件為 \(F_3 = \begin{bmatrix} 1 & 0 & 3 & 1 \end{bmatrix}\).

\(F_{n + 1} = F_3 \times \text{Base}^{n - 2}\);即可求出 \(f_n\)。

例題3(來(lái)自 OI-Wiki)

\(\left\{\begin{array}{l} f_{1} = f_{2} = 0 \\ f_{n} = 7f_{n-1}+6f_{n-2}+5n+4\times 3^n \end{array}\right.\)

點(diǎn)擊查看題解

我的解法與 OI-Wiki 上的有所不同:

設(shè) \(F_n = \begin{bmatrix} f_{n - 1} & f_{n - 2} & n & 3^n & 1 \end{bmatrix}\).

易知 \(\text{Base} = \begin{bmatrix} 7 & 1 & 0 & 0 & 0 \\ 6 & 0 & 0 & 0 & 0 \\ 5 & 0 & 1 & 0 & 0 \\ 4 & 0 & 0 & 3 & 0 \\ 0 & 0 & 1 & 0 & 1 \end{bmatrix}\).

邊界值 \(F_3 = \begin{bmatrix} 0 & 0 & 3 & 27 & 1 \end{bmatrix}\).

\(F_{n + 1} = F_3 \times \text{Base}^{n - 2}\).

例題4

\(\left\{\begin{array}{l} f_1 = f_2 = 0 \text{,} f_3 = 1 \\ f_i = 3f_{i - 1} + 2f_{i - 2} + f_{i - 3} + 5i + 7 \end{array}\right.\)

點(diǎn)擊查看題解

增加了 \(f_{i - 3}\),但是本質(zhì)是一樣的。

可以設(shè) \(F_i = \begin{bmatrix} f_{i - 1} & f_{i - 2} & f_{i - 3} & i & 1 \end{bmatrix}\)

易得 \(\text{Base} = \begin{bmatrix} 3 & 1 & 0 & 0 & 0 \\ 2 & 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 & 0 \\ 5 & 0 & 0 & 1 & 0 \\ 7 & 0 & 0 & 1 & 1 \end{bmatrix}\).

\(F_4 = \begin{bmatrix} 1 & 0 & 0 & 4 & 1 \end{bmatrix}\),

\(F_{n + 1} = F_4 \times \text{Base}^{n - 3}\)。

例題5

洛谷 P1939 矩陣加速(數(shù)列):https://www.luogu.com.cn/problem/P1939

考慮這道題 \(\text{Base}\) 該如何設(shè)置。

點(diǎn)擊查看代碼
const long long MOD = 1e9 + 7;

struct matrix
{
    long long a[4][4];
    matrix operator*(const matrix &t) const
    {
        matrix res;
        memset(res.a, 0, sizeof res.a);
        for (int i = 1; i <= 3; ++i)
            for (int j = 1; j <= 3; ++j)
                for (int k = 1; k <= 3; ++k)
                    res.a[i][j] = (res.a[i][j] + a[i][k] * t.a[k][j] % MOD) % MOD;
        return res;
    }
};

int main()
{
    int T = rr;
    while (T--)
    {
        int n = rr;

        if (n <= 3)
        {
            printf("1\n");
            continue;
        }

        matrix Base = {{{0, 0, 0, 0},
                        {0, 1, 1, 0},
                        {0, 0, 0, 1},
                        {0, 1, 0, 0}}};
        matrix res = {{{0, 0, 0, 0},
                       {0, 1, 0, 0},
                       {0, 0, 1, 0},
                       {0, 0, 0, 1}}};

        int k = n - 3;
        while (k)
        {
            if (k & 1)
                res = res * Base;
            k >>= 1, Base = Base * Base;
        }

        printf("%lld\n", (res.a[1][1] + res.a[2][1] + res.a[3][1]) % MOD);
    }

    return 0;
}

時(shí)間復(fù)雜度

矩陣乘法 \(O(k^3)\) 其中 \(k\) 為矩陣的長(zhǎng)(或?qū)挘?br> 快速冪 \(O(\log n)\)

所以[矩陣乘法優(yōu)化線性遞推]的時(shí)間復(fù)雜度為 \(O(k^3 \log n)\)。

矩陣乘法優(yōu)化 DP

樸素矩陣乘法

\(\mathrm{dp}[t][x][y] = \sum\limits_{w = 1}^n \mathrm{dp}[t][x][w] \times G[w][y]\)

則可以看為矩陣乘法的形式:\(\mathrm{dp}_t = \mathrm{dp}_{t - 1} \times G\),即 \(\mathrm{dp}_t = Ans_0 \times G^t\)。

廣義矩陣乘法

對(duì)矩陣的乘法重載,即可用快速冪求解了。

具體的,可以看這篇文章:https://www.luogu.com.cn/blog/i207M/xie-ti-bao-gao-sp1716-gss3-can-you-answer-these-queries-iii。

多組詢(xún)問(wèn)的矩陣乘法優(yōu)化 DP

例題:P6569 魔法值

我們要求一個(gè) \(\mathrm{Ans}_k = \mathrm{Ans}_0 \times \mathrm{Mp}^k\),其中 \(\mathrm{Ans}_i\) 是一個(gè)長(zhǎng)度為 \(n\) 的行向量。

那么,我們先預(yù)處理 \(\mathrm{Mp}^k\),即 \(\mathrm{Mp}^{2^i}\)。

然后我們就是在求一個(gè)行向量和 \(\log_2 k\) 個(gè) \(n \times n\) 的矩陣的乘積了。

在算答案的時(shí)候,我們先別算這 \(\log_2 k\) 個(gè)方陣的乘積,先用 \(\mathrm{Ans}_0\) 向量從左乘到右。

因?yàn)橄蛄砍司仃噺?fù)雜度是 \(O(n^2)\) 的!

這樣復(fù)雜度就從 \(O(q \times n^3 \log_2 t)\),變成了 \(O(n^3 \log_2 t+q \times n^2 \log_2 t)\)。

練習(xí)題

見(jiàn):https://www.luogu.com.cn/training/385249

Reference

[1] https://oi-wiki.org/math/linear-algebra/matrix/
[2] https://www.cnblogs.com/ningago/p/17472070.html
[3] https://www.cnblogs.com/luckyblock/p/14430820.html
[4] http://blog.tsawke.com/Data/Blog/content/DDP.html
[5] https://blog.csdn.net/qq_41739081/article/details/128184363文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-711848.html

到了這里,關(guān)于動(dòng)態(tài)規(guī)劃——矩陣優(yōu)化DP 學(xué)習(xí)筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 動(dòng)態(tài)規(guī)劃——狀壓DP 學(xué)習(xí)筆記

    前置知識(shí):位運(yùn)算 動(dòng)態(tài)規(guī)劃的過(guò)程是隨著階段的增長(zhǎng),在每個(gè)狀態(tài)維度上不斷擴(kuò)展的。 在任意時(shí)刻,已經(jīng)求出最優(yōu)解的狀態(tài)與尚未求出最優(yōu)解的狀態(tài)在各維度上的分界點(diǎn)組成了 DP 擴(kuò)展的“輪廓”。對(duì)于某些問(wèn)題,我們需要在動(dòng)態(tài)規(guī)劃的“狀態(tài)”中記錄一個(gè)集合,保存這個(gè)“

    2024年02月08日
    瀏覽(25)
  • 動(dòng)態(tài)規(guī)劃——樹(shù)形DP 學(xué)習(xí)筆記

    前置知識(shí):樹(shù)基礎(chǔ)。 樹(shù)形 DP,即在樹(shù)上進(jìn)行的 DP,最常見(jiàn)的狀態(tài)表示為 (f_{u,cdots}) ,表示以 (u) 為根的子樹(shù)的某個(gè)東東。 本文將講解一些經(jīng)典題目(樹(shù)的子樹(shù)個(gè)數(shù)、樹(shù)的最大獨(dú)立集、樹(shù)的最小點(diǎn)覆蓋、樹(shù)的最小支配集、樹(shù)的直徑、樹(shù)的重心、樹(shù)的中心),以及一些常見(jiàn)形

    2024年02月08日
    瀏覽(22)
  • 動(dòng)態(tài)規(guī)劃——數(shù)位DP 學(xué)習(xí)筆記

    引入 數(shù)位 DP 往往都是這樣的題型:給定一個(gè)區(qū)間 ([l, r]) ,求這個(gè)區(qū)間中滿足某種條件的數(shù)的總數(shù)。 簡(jiǎn)單的暴力代碼如下: 而當(dāng)數(shù)據(jù)規(guī)模過(guò)大,暴力枚舉就 (mathbb T) 飛了,因此引入數(shù)位 DP: 概念 數(shù)位(digit):對(duì)于十進(jìn)制,即把一個(gè)數(shù)字按照個(gè)位、十位、百位等,一位

    2024年02月08日
    瀏覽(26)
  • 動(dòng)態(tài)規(guī)劃算法學(xué)習(xí)一:DP的重要知識(shí)點(diǎn)、矩陣連乘算法

    動(dòng)態(tài)規(guī)劃算法學(xué)習(xí)一:DP的重要知識(shí)點(diǎn)、矩陣連乘算法

    三部曲如下三步: 基本原則:“空間換時(shí)間” 存儲(chǔ)重復(fù)子問(wèn)題的解,減少運(yùn)算時(shí)間 底層運(yùn)算:“表格操作” 用表格存儲(chǔ)子問(wèn)題的解 實(shí)現(xiàn)路線:“子問(wèn)題劃分、自底向上求解” 利用表格中存儲(chǔ)的子問(wèn)題的解,求上一層子問(wèn)題的解。 矩陣連乘計(jì)算次序 可以用 加括號(hào)的方式

    2024年02月09日
    瀏覽(24)
  • AcWing算法學(xué)習(xí)筆記:動(dòng)態(tài)規(guī)劃(背包 + 線性dp + 區(qū)間dp + 計(jì)數(shù)dp + 狀態(tài)壓縮dp + 樹(shù)形dp + 記憶化搜索)

    AcWing算法學(xué)習(xí)筆記:動(dòng)態(tài)規(guī)劃(背包 + 線性dp + 區(qū)間dp + 計(jì)數(shù)dp + 狀態(tài)壓縮dp + 樹(shù)形dp + 記憶化搜索)

    算法 復(fù)雜度 時(shí)間復(fù)雜度0(nm) 空間復(fù)雜度0(nv) 代碼 算法 通過(guò)滾動(dòng)數(shù)組對(duì)01背包樸素版進(jìn)行空間上的優(yōu)化 f[i] 與 f[i - 1]輪流交替 若體積從小到大進(jìn)行遍歷,當(dāng)更新f[i, j]時(shí),f[i - 1, j - vi] 已經(jīng)在更新f[i, j - vi]時(shí)被更新了 因此體積需要從大到小進(jìn)行遍歷,當(dāng)更新f[i, j]時(shí),f[i - 1,

    2024年02月21日
    瀏覽(21)
  • 15.動(dòng)態(tài)規(guī)劃:數(shù)據(jù)結(jié)構(gòu)優(yōu)化DP

    數(shù)據(jù)結(jié)構(gòu)優(yōu)化DP有前綴和、滑動(dòng)窗口、樹(shù)狀數(shù)組、線段樹(shù)、單調(diào)棧、單調(diào)隊(duì)列 中等 給你一個(gè)整數(shù)數(shù)組 nums ,找到其中最長(zhǎng)嚴(yán)格遞增子序列的長(zhǎng)度。 子序列 是由數(shù)組派生而來(lái)的序列,刪除(或不刪除)數(shù)組中的元素而不改變其余元素的順序。例如, [3,6,2,7] 是數(shù)組 [0,3,1,6,2,2

    2024年02月03日
    瀏覽(22)
  • 從01背包開(kāi)始動(dòng)態(tài)規(guī)劃:暴力解法 + dp + 滾動(dòng)數(shù)組 + dp優(yōu)化

    從01背包開(kāi)始動(dòng)態(tài)規(guī)劃:暴力解法 + dp + 滾動(dòng)數(shù)組 + dp優(yōu)化

    ? ? 01背包問(wèn)題是動(dòng)態(tài)規(guī)劃中最經(jīng)典的問(wèn)題之一,本篇將通過(guò)給出其四種解法,使讀者更深刻理解動(dòng)態(tài)規(guī)劃。 ? 有N件物品和一個(gè)容量是?V 的背包,每個(gè)物品有各自的體積和價(jià)值,且每個(gè)物品只能放一次(這也是01背包名字的由來(lái)),如何讓背包里裝入的物品具有最大的價(jià)值總

    2024年04月17日
    瀏覽(22)
  • 【優(yōu)化數(shù)學(xué)模型】2. 動(dòng)態(tài)規(guī)劃DP方法的求解思路

    【優(yōu)化數(shù)學(xué)模型】2. 動(dòng)態(tài)規(guī)劃DP方法的求解思路

    多階段決策問(wèn)題,就是要在允許的決策范圍內(nèi),選擇一個(gè)最優(yōu)決策使整個(gè)系統(tǒng)在預(yù)定標(biāo)準(zhǔn)下達(dá)到最佳效果。 動(dòng)態(tài)規(guī)劃 (dynamic programming,DP) 是用來(lái)解決多階段決策過(guò)程最優(yōu)化的一種數(shù)量方法。其特點(diǎn)在于,它可以把一個(gè)n維決策問(wèn)題變換為幾個(gè)一維最優(yōu)化問(wèn)題,從而一個(gè)一個(gè)地去

    2024年02月21日
    瀏覽(24)
  • 動(dòng)態(tài)規(guī)劃(DP)(算法筆記)

    動(dòng)態(tài)規(guī)劃(DP)(算法筆記)

    本文內(nèi)容基于《算法筆記》和官方配套練題網(wǎng)站“晴問(wèn)算法”,是我作為小白的學(xué)習(xí)記錄,如有錯(cuò)誤還請(qǐng)?bào)w諒,可以留下您的寶貴意見(jiàn),不勝感激。 動(dòng)態(tài)規(guī)劃(Dynamic Programming,DP)是一種用來(lái)解決一類(lèi)最優(yōu)化問(wèn)題的算法思想。簡(jiǎn)單來(lái)說(shuō),動(dòng)態(tài)規(guī)劃將一個(gè)復(fù)雜的問(wèn)題分解成若干個(gè)子

    2024年02月05日
    瀏覽(20)
  • 【狀態(tài)機(jī)dp 動(dòng)態(tài)規(guī)劃】100290. 使矩陣滿足條件的最少操作次數(shù)

    【狀態(tài)機(jī)dp 動(dòng)態(tài)規(guī)劃】100290. 使矩陣滿足條件的最少操作次數(shù)

    動(dòng)態(tài)規(guī)劃匯總 狀態(tài)機(jī)dp 給你一個(gè)大小為 m x n 的二維矩形 grid 。每次 操作 中,你可以將 任一 格子的值修改為 任意 非負(fù)整數(shù)。完成所有操作后,你需要確保每個(gè)格子 grid[i][j] 的值滿足: 如果下面相鄰格子存在的話,它們的值相等,也就是 grid[i][j] == grid[i + 1][j](如果存在)

    2024年04月24日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包