揹包相關問題。
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...