貪心演算法並不難,難的是證明。

2021-10-09 15:35:49 字數 2148 閱讀 5930

貪心算

法並不難

,難的是

證明

。貪心演算法並不難,難的是證明。

貪心演算法並不

難,難的

是證明。

———— heidoudou

基本思路:先將陣列sor

tsort

sort

一遍,然後用雙指標i = 1j = 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 不相容了,記得當年演算法書證明這個...

貪心演算法的證明題

貪心演算法的證明一般是比動態規劃要複雜。原因是貪心演算法的證明有兩個,乙個是最優子結構,另外乙個是貪心選擇性質。貪心選擇性質 可以通過區域性最優選擇來構造全域性最優解 證明 一般考慮某個子問題的最優解,然後考慮用乙個貪心選擇替換其中某個選擇,修改此解,匯出更小子問題。最優子結構同動態規劃,而且其實一...