貪心演算法 筆記

2021-08-18 11:25:48 字數 1518 閱讀 9600

揹包相關問題。

1. 給出n 個物品,第i 個物體的重量為wi

, 選擇盡量多的物體,使得總重量不超過

c .

按照物品重量從到小排序

2. 部分揹包問題。有

n個物體,第

i 個物體的重量為wi

,價值為vi

,在總重量超過c的情況下讓總價值盡量高。

按照「價值除以重量的值」排序

乘船問題。 有

n 個人,第

i個人的重量為wi

,每艘船的最大載重量均為

c , 且最多只能乘兩個人。用最少地船裝載所有人。

從兩個極端考慮。

先按重量從小到大排序看看。

3.1先考慮最重的人。最重的人貪心選擇能和他一起坐船中人的集合中最輕的人。

3.2 先考慮最輕的ren。 最輕的人貪心選擇能和他一起坐船的人中最重的人。

雙指標,一首一尾,遍歷一遍即可。

4.區間相關問題。

4.1 選擇不相交的區間。數軸上有

n個開區間(a

i,bi

) ,選擇盡量多個區間,使得這些區間兩兩沒有公共點。

區間按照 b1

≤b2≤

b3排序。

4.1.1 a1

>a2

選擇區間1

4.1.2 a1

≤a2 選擇區間1

選擇區間1 後,需要把所有和區間1相交的區間排除在外,需要記錄上乙個被選擇的區間編號。從頭到尾掃瞄一遍可完成貪心過程,得到正確結果。

4.2 區間選點問題。數軸上有

n 個閉區間[a

i,bi

]。取盡量少的點,使得每個區間內都至少有乙個點。

把所有的區間按

b 從小到大排序(b相同時,安裝a從大到小排序),貪心策略選擇第乙個區間的最後乙個點。

4.3 區間覆蓋問題。數軸上有

n個閉區間[a

i,bi

] 。選擇盡量少地區間覆蓋一條指定線段[s

,t]

先進行一次預處理。每個區間在[s

,t] 外的部分都應該預先被切掉。

把各區間按照

a 從小到大排序。如果區間1的起點不是

s,無解。否則選擇起點在s的最長區間。選擇此區間[a

i,bi

] 後,新的起點應該設定為bi

,並且忽略所有區間在bi

之前的部分。

哈夫曼編碼問題

原理和性質:貪心策略和最優子結構

程式實現:

5.1 按照頻率把所有的字元排序成表p,演算法複雜度o(

nlog

n)。

5.2 新開闢乙個節點佇列q, 其目的裝放哈夫曼樹合併的父節點。

5.3 從p或q 選取兩個頻率最小的節點合併成乙個父節點,放父節點放入q中,由於後合併的父節點頻率比先合併的頻率大,因此q內的元素是有序的。

5.4 重複5.3 直到p 和 q為空。時間複雜度o(

n)

貪心演算法筆記

貪心演算法總是作出在當前看來最好的選擇,所作出的選擇只是在某種意義上的區域性最優選擇。雖然貪心演算法不能對所有問題都得到整體最優解,但對許多問題它能產生整體最優解。如單源最短路經問題,最小生成樹問題等。在一些情況下,即使貪心演算法不能得到整體最優解,其最終結果卻是最優解的很好近似。貪心演算法和動態規...

筆記整合 貪心演算法

假設有乙個可以容納100kg物品的揹包,可以裝各種物品。有以下5種豆子,每種豆子的總量和總價值都各不相同。為了讓揹包中所裝物品的總價值最大,如何選擇在揹包中裝哪些豆子?每種豆子又該裝多少呢?只要先算一算每個物品的單價,按照單價由高到低依次來裝就好了。單價從高到低排列,依次是 黑豆 綠豆 紅豆 青豆 ...

leetcode 貪心演算法筆記

題目 此題的貪心演算法解法如下。def maxsubarray nums cur sum nums 0 max sum nums 0 for i in range 1 len nums cur sum max nums i cur sum nums i max sum max cur sum,max...