演算法學習 貪心演算法(一)沒完成

2021-10-04 13:27:48 字數 2905 閱讀 9273

問題二問題三(別忘記寫)

問題四問題五(第二問)

問題六設x1, x2, …., xn是實數軸上的n個點,嘗試用單位長度的閉區間覆蓋這些點,設計貪心演算法求解需要多少單位長度閉區間?

sort

(x)//將各點按照橫座標從小到大排序

length =

getlength

(x)sum =

0maxx = x[0]

-1for i =

0 to length -

1if maxx < x[i]

maxx = x[i]+1

sum++

return sum

時間複雜度是o(n

lgn)

o(nlgn)

o(nlgn

) 設有n個物品,第i個物品的價值是vi、重量是wi, 假設物品可以任意分割,給定乙個揹包,其能容納最大重量為c,求該揹包能容納物品的最大價值。要求寫出偽**並分析演算法正確性和複雜性。

計算物品的價效比,按照價效比從大到小排序,首先裝價效比最大的物品,直到該物品全部裝進去或者揹包已滿,對剩餘物品同樣。

sort

(goods)

//對物品按照價效比從大到小排序,即按照vi/wi排序

count =

length

(goods)

//計算商品數量

value =

0//記錄放進揹包的商品價值

for i =

0 to count -

1if wi < c

c -= wi

value +

= vi

else

value +

= vi * c / wi

break

return value

貪心選擇性:如果給定揹包可以盛裝物品的最大價值是valuemax,除了單位容積之外的價值是value.對於揹包的這個單位容積,如果不選擇當前可選的價效比最大的物品vmax,而是選擇了價效比更小的物品vmin,則揹包價值是vmin+value,比vmax+value小,與當前盛裝方案是最佳的矛盾。所以,對於單位容積,必須選擇當前可以放下的價效比最大的物品。

最優子結構:反證法即可。

排序是制約演算法時間複雜性的瓶頸

考慮多揹包問題,即給定n個物品,其中物品i的**是vi, 重量是wi,有m個揹包,揹包j最大能裝物品的重量均為bj,求這些揹包能夠裝下物品的最大**,其中每個物品要麼完全放入揹包,要麼不放入。

對於此問題乙個顯然的貪心演算法如下:利用精確演算法選擇物品裝第乙個揹包,然後移除裝入第乙個揹包的物品,然後按此方法依次裝後面的揹包。

(a) 證明此貪心演算法不能給出精確解,在所有bj都相等時也是如此。

(b) 證明當所有bj都相等時,此貪心演算法是乙個常近似比的近似演算法。

設有6種硬幣,面值是1分, 2分, 5分, 1角,5角,1元,給定乙個錢數n,求出乙個硬幣組合,要求面值總和為n且硬幣個數最少,假設每種硬幣個數無限。要求

寫出偽**並分析演算法正確性和時間複雜性。

money[0]

=0.01

money[1]

=0.02

money[2]

=0.05

money[3]

=0.1

money[4]

=0.5

money[5]

=1sum =

0while n !=

0for i =

5 downto 0

if n >= money[i]

n -= money

sum++

break

return sum

給定乙個城市集合,一些城市之間由高速公路連線,這些城市和城市之間的高速公路構成了乙個無向圖g = (v, e),每條邊e=(u, v)e表示一條城市u到v的高速公路,e上的權重le表示該高速公路的長度。一輛車需要從城市s到達城市t,但該車的油箱存油最多能走l公里,每個城市有乙個加油站,但是城市之間沒有加油站,因此,只有當le直接bfs搜尋即可。可以通行的路滿足耗油小於等於油箱存油,並且沒走過。

不會,待更

考慮特殊的0-1揹包問題:有n個物品,每個物品i價值和重量都是wi,揹包能容納物品的最大重量是c, 選擇揹包能容納的物品集合,使得這些物品價值之和最大。回答下列問題:

(1)若物品的重量(價值)分別是1, 2, …,2n−

12^

2n−1

, 證明該0-1揹包問題可以用貪心法求解並寫出該貪心演算法的偽**。

(2)請寫出乙個物品重量(價值)序列,使得上述貪心法無法得到最優解。

貪心選擇性:每次選擇可以裝下並且物品重量最大的。

對於乙個可盛裝的最大重量為c的揹包,方案a構成了最優解,其中一定包含重量小於等於c的重量最大的物品,其重量為2k2^

2k則2 k+

1>

c2^>c

2k+1

>

c,如果不包含這個物品,選擇∑i=

0k−1

2i

\sum_^2^i

∑i=0k−

1​2i

,其值小於2

k2^k

2k不是最優選擇,所以具有貪心選擇性

優化子結構:對於乙個最優解a,去掉貪心選出來的物品good,構成的選擇方案是針對子問題的最優解b

1b_1

b1​,如果不是,則選擇子問題的最優解b

2b_2

b2​,則b

2b_2

b2​和good構成的解比a更優,與a是最優解矛盾。所以該問題有最優子結構。重量3

48價值5

55揹包最大重量是8

未完待更

演算法學習 貪心演算法

所謂貪心演算法,是在對問題求解時,總是做出在當前看來最好的選擇。即,不從整體最優上加以考慮,它所做出的僅僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,就是某個狀態以前的過程不會影響以後的狀態,只與當前的狀態有關。貪心...

演算法學習 貪心演算法

想通過這篇部落格來分享一下學習貪心演算法和動態規劃的過程 首先什麼是貪心演算法?翻譯 話就是用簡單粗暴的方式,以最少的代價 占用的時間和空間 得出結果。比如某麵包店有a b c三種大小的麵包,其中a麵包可以提供10點能量售價5元,b麵包可以提供8點能量售價3元,c麵包可以提供2點能量售價1元。現在有...

貪心演算法學習

基本概念 所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。貪心演算法沒有固定的演算法框架,演算法設計的關鍵是貪心策略的選擇。必須注意的是,貪心演算法不是對所有問題都能得到整體最優解,選擇的貪心策略必須具備...