日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基础算法 —— 贪心算法

發布時間:2025/3/17 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基础算法 —— 贪心算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【概述】

貪心算法是從問題的初始狀態出發,通過若干次的貪心選擇而得到的最優值的一種求解策略,即貪心策略。

簡單來說,貪心策略是一種在每次決策時采取當前意義下最優策略的算法,做出的選擇至少在某種約束條件下的局部最優解或較優解,并不一定是全局的最優解或較優解,但在某些特定的情況下,可以利用貪心算法來求得其最優解或較優解。

貪心算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無后效性,即:某個狀態以前的過程不會影響以后的狀態,只與當前狀態有關。

當一個問題的最優解包含其子問題的最優解時,稱此問題具有最優子結構性質,問題的最優子結構性質是該問題可以用動態規劃或者貪心算法求解的關鍵特征。

【一般步驟】

  • 建立數學模型來描述問題;
  • 把求解的問題分成若干個子問題;
  • 對每一子問題求解,得到子問題的局部最優解;
  • 把子問題的局部最優解合成原來問題的一個解。
  • 簡單來說,就是根據要求,不斷選擇最大/最小的,直到滿足/不滿足條件為止

    /* 候選集合A:問題的最終解均取自于候選集合A。 解集合S:解集合S不斷擴展,直到構成滿足問題的完整解。 解決函數solution:檢查解集合S是否構成問題的完整解。 選擇函數select:貪心策略,這是貪心算法的關鍵。 可行函數feasible:解集合擴展后是否滿足約束條件。 */ Greedy(A) {S={ };//初始解集合為空集while (not solution(S))//集合S沒有構成問題的一個解{x=select(A);//在候選集合A中做貪心選擇if feasible(S, x)//判斷集合S中加入x后的解是否可行S = S+{x};A = A-{x};}return S; }

    【例題】

    1.最優選擇問題

    問題:給出 n 個物品,第 i 個物品重量為 wi,選擇盡量多的物品,使得總重量不超過 C

    貪心策略:由于只關心物品重量,因此將所有物品按重量從小到大排序,依次選擇每個物品,直到裝不下為止

  • 紀念品分組(洛谷-P1094):點擊這里
  • 合并果子(洛谷-P1090):點擊這里
  • 攔截導彈問題(信息學奧賽一本通-T1322):點擊這里
  • 書架(信息學奧賽一本通-T1228):點擊這里
  • 接水問題(信息學奧賽一本通-T1233):點擊這里
  • 統計數字(信息學奧賽一本通-T1239):點擊這里
  • 整數區間(信息學奧賽一本通-T1324):點擊這里
  • An Easy Problem(信息學奧賽一本通-T1223):點擊這里
  • Turn the Rectangles(CF-1008B):點擊這里
  • 數列分段Section I(洛谷-P1181):點擊這里
    同題:數列分段(信息學奧賽一本通-T1428):點擊這里
  • 排隊接水(洛谷-P1223):點擊這里
    同題:排隊接水(信息學奧賽一本通-T1319):點擊這里
  • 電池的壽命(信息學奧賽一本通-T1229):點擊這里
  • 刪數問題(信息學奧賽一本通-T1321):點擊這里
  • 裝箱問題(信息學奧賽一本通-T1226):點擊這里
  • 最小新整數(信息學奧賽一本通-T1231):點擊這里
  • 數列極差(信息學奧賽一本通-T1427):點擊這里
  • 釣魚(信息學奧賽一本通-T1431):點擊這里
  • 處女座的期末復習(2019??秃偎惴ɑA集訓營 Day2-J):點擊這里
  • 項鏈(2019??秃偎惴ɑA集訓營 Day6-C):點擊這里
  • Polycarp's Practice(CF-1006B):點擊這里
  • Songs Compression(CF-1015C):點擊這里
  • 超級賽亞ACMer(HDU-5246):點擊這里
  • Sequence(BZOJ-1345):點擊這里
  • Boxes and Candies(AtCoder-2152):點擊這里
  • Roundgod and Milk Tea(HDU-6667):點擊這里
  • New Year Snowmen(CF-140C)(map+優先隊列):點擊這里
  • Polycarp and Div3(CF-1005D)(前綴和):點擊這里
  • 2.部分背包問題

    問題:n 個物品,第 i 個物品重量為 wi,價值為 vi,在總重量不超過 C 的情況下讓總價值盡量高,每一個物品可以取走一部分,價值與重量按比例計算

    貪心策略:本質上在最優選擇問題的基礎上加了價值項,不能僅考慮重量因素或價值因素,應該綜合考慮兩個因素,即優先選擇價值和重量比值最大的,直到重量和為 C,需要注意的是,由于每個物品只能選擇一部分,因此一定可以讓總重量恰好為 C,而且除了最后一個物品以外,其他物品要么不選要么全選

  • Yogurt factory(POJ-2393):點擊這里
  • 混合牛奶(洛谷-P1208):點擊這里
  • 金銀島(信息學奧賽一本通-T1225):點擊這里
  • Protecting the Flowers(POJ-3262):點擊這里
  • Ride to Office(信息學奧賽一本通-T1227):點擊這里
  • 處女座的訓練(2019牛客寒假算法基礎集訓營 Day3-D):點擊這里
  • Cow Acrobats(POJ-3045):點擊這里
  • Annoying Present(CF-1009C):點擊這里
  • Allowance(POJ-3040)(小數背包):點擊這里
  • Minimum Value Rectangle(CF-1027C)(數學推導):點擊這里
  • 3.乘船問題

    問題:n 個人,第 i 個人重量為 wi,每艘船載重為 C,最多可乘 2?個人,現在想用最少的船將所有人運走,問船的數量

    貪心策略:將所有人按重量從小到大排序,依次考慮最輕的人 i,如果每個人都不能與他一起乘船,那么就只能每個人都乘一條船,否則,其能選擇能與他一起乘的人中重量最終的一個 j,這樣使得眼前的浪費最少

  • 獨木舟(51Nod-1432):點擊這里
  • Balloons(CF-998A):點擊這里
  • 4.選擇不相交區間問題

    問題:給定 n 個開區間 (a,b),選擇盡量多個區間,使得這些區間兩兩沒有公共點。

    貪心策略:將每個區間按結束時間從小到大排序,即按:b[1]<=b[2]<=...<=b[n] 的順序排序,最初選擇結束時間最早的活動 temp=b[1],然后每次考慮最早的開始時間 a[i],如果比當前選擇的區間的結束時間要晚 a[i]>temp,那么就選擇這個區間,即有:temp=b[i],res++

  • 線段(信息學奧賽一本通-T1429):點擊這里
  • 活動選擇(信息學奧賽一本通-T1323):點擊這里
  • 活動安排(信息學奧賽一本通-T1422):點擊這里
  • 不重疊的線段(51Nod-1133):點擊這里
  • 凌亂的yyy(洛谷-P1803):點擊這里
  • Muddy roads(POJ-2437):點擊這里
  • 5.區間選點問題

    問題:給定 n 個閉區間 [a,b],在數軸上選盡量少的點,使得每個區間內都至少有一個點

    貪心策略:首先按照區間右端點從小到大排序,然后從區間 1 到區間 n 進行選擇,對于當前區間,若集合中的數不能覆蓋他,則將集合末尾的數加入集合

  • 種樹(信息學奧賽一本通-T1423):點擊這里
  • Sunscreen(POJ-3416):點擊這里
  • 美食(2019牛客寒假算法基礎集訓營 Day6-D):點擊這里
  • X: Yet Another Die Game(AtCoder-2298):點擊這里
  • Cutting(CF-998B):點擊這里
  • 6.區間覆蓋問題

    問題:給 n 個閉區間 [a,b],選擇盡量少的區間覆蓋一條指定的線段區間 [s,t]

    貪心策略:將所有的區間按左端點從小到大排序,依次處理每個區間,每次選擇覆蓋點 s 的區間中右端點坐標最大的一個,并將 s 更新為該區間的右端點坐標,直到選擇的區間包含 t 為止

  • 噴水裝置(信息學奧賽一本通-T1424):點擊這里
  • Expedition(POJ-2431):點擊這里
  • Sonya and Hotels(CF-1004A):點擊這里
  • 尋找平面上的極大點(信息學奧賽一本通-T1230):點擊這里
  • Convert to Ones(CF-998C):點擊這里
  • 7.帶限期與罰款的單位時間任務調度

    問題:n 個任務,每個任務需要一個單位時間執行,任務 i 的截止時間 di表示任務 i 在時間 di 前必須完成,誤時罰款 wi 表示任務 i 若未在 di 前完成,導致 wi 的罰款,確定所有任務的執行順序使得罰款最少

    貪心策略:要使罰款最少,就盡量完成 w[i] 值較大的任務,此時將任務按 w[i] 從大到小排序,按排好的順序對任務進行安排:使得處理任務 i 的時間在 d[i] 之內又盡量靠后,如果 d[i] 時間之內的時間都已排滿,就放棄處理該任務

  • 智力大沖浪(信息學奧賽一本通-T1426):點擊這里
  • 家庭作業(信息學奧賽一本通-T1430):點擊這里
  • 8.其他

  • 小a與"204"(2019??秃偎惴ɑA集訓營 Day1-B)(貪心+構造):點擊這里
  • Walk and Teleport(AtCoder-2287)(貪心+線性DP):點擊這里
  • 均分紙牌(洛谷-P1031):點擊這里
    同題:均分紙牌(信息學奧賽一本通-T1320):點擊這里
  • 糖果傳遞(信息學奧賽一本通-T1432)(環形均分紙牌):點擊這里
  • Merging Two Decks(CF-234H)(貪心+vector):點擊這里
  • Game(HDU-6669)(貪心+區間交集):點擊這里
  • Summarize to the Power of Two(CF-1005C)(map+貪心):點擊這里
  • Stay Real(HDU-6645)(小根堆性質):點擊這里
  • 新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

    總結

    以上是生活随笔為你收集整理的基础算法 —— 贪心算法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。