by tuifei_oier首先給出一些基本的定義:
給定二元組 \(m=(s,i)\),若滿足以下條件:
\(s\) 為乙個有限集。
\(i\) 為乙個元素為 \(s\) 的子集的有限非空集,空集屬於 \(i\)。
\(\forall a\in i,b\subseteq a\) 滿足 \(b\in i\)。
則稱 \(m\) 為乙個子集系統。
其中,第三條性質一般稱為遺傳性。
特別地,稱 \(i\) 中元素為獨立集。
稱乙個集合 \(a\) 為極大獨立集,當且僅當 \(\forall x,a\cup\\notin i\),也稱極大獨立集為基。
定義秩函式 \(r(u)\) 為 \(u\) 中最大獨立集的大小,事實上,通過秩函式的性質,我們可以反過來推導出原子集系統的性質,例如:證明其為乙個擬陣。
給定乙個子集系統 \(m=(s,l)\),若滿足:
\(\forall a\in l,b\in l,|a|<|b|,\exist\;x\in b-a\),滿足 \(a\cup\\in l\)。
則稱 \(m\) 為乙個擬陣。
其中,該性質一般稱為交換性。
稱 \(m^*\) 為 \(m=(s,i)\) 的對偶擬陣,即 \(m^*=(s,i^*)\),其中 \(i^*=\\)。
以及,我們可以定義一系列擬陣的運算:
刪除:對於 \(m=(s,i),z\subseteq s\),定義 \(m\backslash z\) 為 \(m\) 刪除子集 \(z\) 的擬陣,即 \(m\backslash z=(s\backslash z,i')\),其中 \(i'\) 的定義與 \(i\) 類似,實質是把原來的 \(s\) 變為 \(s\backslash z\),其他的定義不變。
收縮:對於 \(m=(s,i),z\subseteq s\),定義 \(m/z\) 為 \(m\) 關於子集 \(z\) 收縮後的擬陣,即 \(m/z=(m^*\backslash z)^*\),可以證明收縮的意義為 \(m/z\) 的任意乙個獨立集並上 \(z\) 中的任意乙個獨立集後仍然是原 \(m\) 中的乙個獨立集,可以利用秩函式來研究它。
事實上,這兩個運算一般用於證明擬陣。
擬陣有一些優美的性質:
次模性:\(r(a\cup b)+r(a\cap b)\le r(a)+r(b)\)。
擬陣 \(m=(s,i)\) 中 \(i\) 中的所有極大獨立集大小相等。
當然,並不止這些,它最適用於我們的性質將在下文提到。
一些經典的擬陣:
均勻擬陣 \(u^k_n=(s,i)\),其中 \(|s|=n,i=\\),不難證明這是乙個擬陣。
圖擬陣:對於無向圖 \(g=(v,e)\),令 \(m=(e,i),i=\\),則 \(m\) 為擬陣,證明如下:
遺傳性證明顯然;
對於交換性,由 \(|a|<|b|\) 知 \(a\) 連成的連通塊數量大於 \(b\),因此一定存在乙個 \(a\) 中不連通而 \(b\) 中連通的塊,加入該邊即可。
需要注意的是,對於有向圖是不成立的。
匹配擬陣:對於無向圖 \(g=(v,e)\),匹配擬陣 \(m=(v,i),i=\\),證明略去。
連通擬陣:對於無向圖 \(g=(v,e)\),考慮刪邊角度,連通擬陣 \(m=(e,i),i=\\),不難證明其為擬陣(類似圖擬陣)。事實上,連通擬陣就是圖擬陣的對偶擬陣。
在 oi 中,擬陣目前有兩種常用用法:
對於擬陣 \(m=(s,i)\),給定乙個函式 \(w:s\rightarrow n^*\),定義 \(s\) 乙個子集的權值 \(w(x)=\sum_w(e)\),擬陣的最優化問題即找乙個最大的 \(w(x)\) 滿足 \(x\in i\)。
如果可以證明乙個組合優化問題本質是擬陣的最優化問題,就可以套用下面的貪心演算法來求解:
將 \(s\) 中元素 \(e\) 按 \(w(e)\) 從大到小排序。
維護集合 \(a\),初始為空集, 依次考慮每個 \(e\),如果 \(a\cup\\in i\),則 \(a\gets a\cup\\),最後答案即為 \(w(a)\)。
證明略過,讀者自證(查資料)不難。
以下是一些可以被證明等價於擬陣最優化問題的問題:
最小/大生成樹。
二分圖匹配。
只要構造出擬陣,問題就可以被大大簡化了。
首先定義擬陣交。
對於兩個擬陣 \(m_1=(s,i_1),m_2=(s,i_2)\),稱集合 \(a=\\) 為擬陣 \(m_1,m_2\) 的交。
此時,我們就有兩種最優化問題:
求 \(a\) 中的最大獨立集。
定義函式 \(w:s\rightarrow n^*\),求 \(a\) 中權值最大的獨立集的權值。
對於兩種問題,我們有乙個相同的演算法來求解,先介紹求 \(a\) 種最大獨立集的演算法。
初始有乙個集合 \(a=\emptyset\)。
每次將屬於 \(a\) 的元素放在左部點,將屬於 \(s\backslash a\) 的元素放在右部點,同時新建起點 \(s\) 和終點 \(t\),按以下方式連邊:
a. 對於右部點 \(y\),如果滿足 \(a\cup\\in i_1\),由 \(s\) 向 \(y\) 連邊;如果滿足 \(a\cup\\in i_2\),由 \(y\) 向 \(t\) 連邊。
b. 對於左部點 \(x\) 和右部點 \(y\),如果滿足 \(a\backslash\\cup\\in i_2\),由 \(y\) 向 \(x\) 連邊;如果滿足 \(a\backslash\\cup\\in i_1\),由 \(x\) 向 \(y\) 連邊。
之後,每次找一條從 \(s\) 到 \(t\) 的最短路,將該路徑上原本屬於 \(a\) 的元素從 \(a\) 中刪除,不屬於 \(a\) 的元素加入 \(a\)(稱該操作為增廣),然後重新建圖,直至不存在最短路。
此時 \(a\) 即為擬陣交中的乙個最大獨立集。
演算法的正確性在此略去證明,大致可以發現每次增廣後 \(|a|\) 恰好 \(+1\)。
設 \(r=max(r_1(s),r_2(s)),n=|s|\),則增廣次數不超過 \(r\),每次增廣的複雜度為 \(o(rn)\),於是複雜度為 \(o(r^2n)\)。
對於第二個問題,我們使用與上文類似的演算法:每個節點賦點權,左部點的權值為 \(-w(e)\),右部點的權值為 \(w(e)\),然後將找 \(s\) 到 \(t\) 的最短路改為找 \(s\) 到 \(t\) 的最大點權路徑,在此基礎上盡可能短即可,此時由於存在負點權,使用 spfa,時間複雜度為 \(o(r^2n^2)\)(當然也可以是 \(o(r^2nk)\),雖然但是,\(k=n\))。
事實上可以證明,每次增廣後的 \(a\) 都是大小為 \(|a|\) 時的乙個最優解。
給定一張 \(n\) 個點 \(m\) 條邊的無向圖,每條邊有三種顏色 r,g,b 之一,同時帶有邊權 \(w_i\),選擇恰好 \(k\) 條邊使得分別保留選出邊中顏色為 r,g 的邊和顏色為 g,b 的邊時,都使得所有點連通,同時選出的 \(k\) 條邊的邊權和最小,對於 \([1,m]\) 每乙個 \(k\) 求出最小權值和。
\(tips:1\le n,m\le100,1\le w_i\le1000\)。
給定一張 \(n\) 個點 \(m\) 條邊的無向圖,每條邊有兩個屬性:\(w_i\) 表示邊權,\(c_i\) 表示顏色。
選出乙個邊集,滿足:
該邊集連通所有點;
每種顏色在邊集中至少出現一次;
求最小的邊集權值和。
\(tips:1\le n\le m\le200,1\le c_i\le m,1\le w_i\le10^9\)。
給定二分圖 \(g=(v,e)\),其中 \(v=v_1+v_2\),求最大匹配。
設 r,g,b 顏色邊集分別為 \(e_r,e_g,e_b\),則構造連通擬陣 \(m_1=(e_r+e_g,i),m_2=(e_g+e_b,i)\),然後帶權擬陣交即可,由於每次增廣後當前 \(a\) 都是大小為 \(|a|\) 時的乙個最優解,直接將當前的 \(w(a)\) 作為 \(ans_\) 即可。
時間複雜度 \(o(r^2n^2)\)。
構造擬陣 \(m_1\) 為連通擬陣,\(m_2=(e,i),i=\\),則直接求帶權擬陣交即可。
考慮構造 \(m_1=\,i_1=\\),類似定義 \(m_2\),然後最大擬陣交即可。
咕了。
任務排程問題 使用擬陣進行解決
前置知識 可以參見 擬陣的有關知識,圖擬陣。問題描述 輸入 輸出 轉換為加權擬陣上尋找優化子集問題 定義1,設s是乙個任務排程.乙個任務在s中是遲的,如果它在規定的期限之後完成 否則,該任務是早的.定義2,如果在乙個任務排程中,早任務總是排列於遲任務之前,則稱該排程具有早任務優先形式。命題1,該問題...
機器學習筆記 牛頓法與擬牛頓法
提要 今天講的牛頓法與擬牛頓法是求解無約束問題最優化方法的常用方法。一 牛頓法 假設我們求下面函式的最小值 假設f x 具有連續的二階的連續偏導數,假設第k次迭代值為xk的值,那麼可將f x 在xk附近進行二階泰勒展開得到 我們對上述公式求導可得 假設其中 可逆,我們就可以得到牛頓法的迭代公式為 這...
牛頓法與擬牛頓法學習筆記(一)牛頓法
好文!先轉在看!機器學習演算法中經常碰到非線性優化問題,如 sparse filtering 演算法,其主要工作在於求解乙個非線性極小化問題。在具體實現中,大多呼叫的是成熟的軟體包做支撐,其中最常用的乙個演算法是 l bfgs。為了解這個演算法的數學機理,這幾天做了一些調研,現把學習過程中理解的一些...