貪心算
法並不難
,難的是
證明
。貪心演算法並不難,難的是證明。
貪心演算法並不
難,難的
是證明。
———— heidoudou
基本思路:先將陣列sor
tsort
sort
一遍,然後用雙指標i = 1
,j = n
,if(
ai+a
j>w)
if(a_i+a_j>w)
if(ai
+aj
>w)
,則將a
ja_j
aj單獨分為一組,--j
,els
eelse
else
則將a
ia_i
ai和a
ja_j
aj分為一組,++i
,--j
證明:i f(
ai+a
j>w)
if(a_i+a_j>w)
if(ai
+aj
>w)
,a
ja_j
aj也不可能和其他任何乙個ak(
i<
k a_k(iak (i< k為一組 → \to→a ja_j aj單獨一組 i f( ai+a j≤w) if(a_i+a_j≤w) if(ai +aj ≤w)∴ ∴∴ 我們證明看子問題的最優解可以通過上述貪心過程得到 下面我們證明貪心後∑ ∑∑子問題的最優解就是全域性最優解 設a [i ...j ]a[i...j] a[i... j]問題為p pp,p pp的貪心解為s ss,經過貪心之後,∑ ∑∑子問題p′p' p′的最優解為s′s' s′。如果∑ ∑∑子問題p′p' p′的最優解s′s' s′不是p pp的最優解,那麼我們先假設存在乙個最優解z zz,可以通過上述證明過程後,使之變成相同∑ ∑∑子問題p′p' p′的解z ′z' z′,又∵ s> z∵s>z ∵s> z,而且二者貪心後的分組數是相同的,∴∴∴s ′>z′ s'>z' s′>z′ ,這就與s′s' s′為最優解相矛盾,→ ∑\to∑ →∑子問題的最優解 = == 全域性最優解 證 畢. 證畢.證畢 . 光 知道 貪心,貪 心為什麼 可以得到 最優解, 你證明過 麼? 光知道貪心,貪心為什麼可以得到最優解,你證明過麼? 光知道貪心, 貪心為什 麼可以得 到最優解 ,你證明 過麼?———— heidoudou#include
#define ll long long
#define maxn 30005
using
namespace std;
inline
intread()
while
(isdigit
(ch)
)return f ?
-x : x;
}inline
void
write
(ll x)
int w, n, p[maxn]
, ans;
intmain()
else
}write
(ans)
;puts(""
);return0;
}
貪心演算法的證明(貪心策略是安全的)
由於最近考演算法,經常會遇到要求證明貪心演算法中,貪心策略及貪心選擇是正確的。由於這塊涉及到胚和擬陣的問題,書上僅在貪心演算法章節的描述過於抽象,以至於我真的是頭大了很久才算弄懂。這裡不過多複述貪心演算法和動態規劃的區別,以及具體的應用條件 性質,僅描述如何理解 貪心選擇是安全 即證明貪心演算法的正...
貪心演算法證明的回憶
關於貪心選擇證明的理解,突然有點想不通了。拿最簡單的活動安排問題,我在想貪心選擇先找f1,然後剩下的2 n逐個找能與之前相容的活動,按照f 不遞減序排列。如果存在乙個最優解,第乙個活動是k,那麼 k後面的活動自然與 f1 相容,但是k前面的呢,可能就會與s1 f1 不相容了,記得當年演算法書證明這個...
貪心演算法的證明題
貪心演算法的證明一般是比動態規劃要複雜。原因是貪心演算法的證明有兩個,乙個是最優子結構,另外乙個是貪心選擇性質。貪心選擇性質 可以通過區域性最優選擇來構造全域性最優解 證明 一般考慮某個子問題的最優解,然後考慮用乙個貪心選擇替換其中某個選擇,修改此解,匯出更小子問題。最優子結構同動態規劃,而且其實一...