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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法-贪心法

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

貪心法是把一個復雜問題分解為一系列較為簡單的局部最優選擇,每一步選擇都是對當前解的一個擴展,直到獲得問題的完整解。貪心法的典型應用是求解最優化問題,而且對許多問題都能得到整體最優解,即使不能得到整體最優解,通常也是最優解的很好近似。

概述

貪心法的設計思路

貪心法目光短淺,并不是從整體最優考慮,它所做出的選擇只是在某種意義上的局部最優,這種局部最優選擇并不總能獲得整體最優解,但通常能獲得近似最優解。

用貪心法求解的問題一般有兩個最重要的性質:最優子結構性質和貪心選擇性質。

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

2)貪心選擇性質:所謂貪心選擇性質是指問題的整體最優解可以通過一系列局部最優的選擇,即貪心選擇來得到,貪心法通常以自頂向下的方式作出一系列的貪心選擇。確定是否有貪心選擇性質

  • 通常先考察問題的一個整體最優解,并證明可修改這個最優解,使其從貪心選擇開始
  • 作出貪心選擇后,原問題簡化為規模較小的類似子問題
  • 用數學歸納法證明,通過每一步貪心選擇,最終可得到問題的整體最優解

貪心法的求解過程

貪心法通常用來求解最優化問題,從某一個初始狀態出發,根據當前的局部最優策略,以滿足約束方程為條件,以使目標函數增長最快(最慢)為準則,在候選集合中進行一系列的選擇,以便盡快構成問題的可行解。

圖問題中的貪心法

TSP問題

TSP問題是指旅行家要旅行n個城市,要求各個城市經歷且僅經歷一次,然后回到出發城市,并要求所走的路程最短。

貪心法求解TSP問題的貪心策略有兩種

  • 最近鄰點策略:從頂點出發,每次選擇相鄰的同時又是距離最短的。該方案的最終結果難以保證,所以pass。

  • 最短鏈接策略:每次在整個圖的范圍內選擇最短邊加入到解集合中,但是,要保證加入解集合中的邊最終形成一個哈密頓回路。因此,當從剩余邊集E’中選擇一條邊(u,v)加入解集合S中,應滿足以下條件:

    • 邊(u,v)是邊集E’中代價最小的邊
    • 邊(u,v)加入解集合S后,S中不產生回路
    • 邊(u,v)加入解集合S后,S不產生分枝

    這個思路可以解決TSP問題,獲取最短邊使用堆排序,判斷兩個頂點是否連通及是否產生分枝,使用并查集,可以將時間性能提高為O(nlog2 n)

  • TSP問題樂扣上沒有相關題目,此處就不做了,不過這個思路其實比動態規劃要容易一些,但是在具體的實現上,困難很多。

    圖著色問題

    給定無向連通圖G=(V,E),求圖G的最小色數k,使得用k種顏色對G中的頂點著色,可使任意兩個相鄰頂點著色不同。

    貪心策略為:選擇一種顏色,以任意頂點作為開始頂點,依次考察圖中的未被著色的每個頂點,如果一個頂點可以用顏色1著色,換言之,該頂點的鄰接點都還未被著色,則用顏色1為該頂點著色,當沒有頂點能以這種顏色著色時,選擇顏色2和一個未被著色的頂點作為開始頂點,用第二種顏色為盡可能多的頂點著色,如果還有未著色的頂點,則選取顏色3并為盡可能多的頂點著色,以此類推。

    這種策略和選擇頂點進行著色的順序有很大關系,而且很難確認是最優解,我也不知道為啥作者講這道題。

    最小生成樹問題

    設G=(V,E)是一個無向連通圖,生成樹上各邊的權值之和稱為該生成樹的代價,在G的所有生成樹中,代價最小的生成樹稱為最小生成樹。

  • 最近頂點策略:選一個頂點,找出和該頂點相鄰的最近的頂點,加入該點后,找出和這兩個頂點相鄰的最近頂點,不斷重復該過程,直到加入完所有頂點。這也叫做Prim算法,時間復雜度為O(n^2)。
  • 最短邊策略:最短邊策略從TE={}開始,每一次貪心選擇都是在邊集E中選取最短邊(u,v),如果邊(u,v)加入集合TE中不產生回路,則將邊(u,v)加入邊集TE中,并將它在集合E中刪去。這也叫Kruska算法,時間復雜度為O(elog2 e)。

    這兩個算法的證明,其實可以用反證法,如果說不是最優的,那么說明存在一個點到其他各個點的距離要小于當前邊,但這個是不存在的,所以說明是最優的。
  • 樂扣的貪心算法系列里,沒有圖相關的算法,所以這里先不做習題了。

    組合問題中的貪心法

    背包問題

    給定n中物品和一個容量為C的背包,物品i的重量是wi,其價值為vi,背包問題是如何選擇裝入背包的物品,使得裝入背包中物品的總價值最大?

    這個背包問題不是0/1背包問題,因為物品可以部分裝入,所以可以使用貪心法,貪心策略為:每次從物品集合中選擇單位重量價值最大的物品,單位價值=vi/wi。

  • 1383. 最大的團隊表現值 - 困難 代碼 這道題我沒有解出來,最初的思路有問題。后來看了答案才解出來的。確實是用的貪心算法。解這道題,一定需要想清楚思路,其實這道題的思路從宏觀上看是很直白的,另外需要靈活使用go的堆。
  • 活動安排問題

    設有n個活動集合E={1,2,……,n},其中每個活動都要求使用同一資源(如演講會場),而在同一時間內只有一個活動能使用這一資源。每個活動i都有一個要求使用該資源的起始時間si和一個結束時間fi,且si<fi。如果選擇了活動i,則它在半開時間區間[si,fi)內占用資源。若區間[si,fi)與區間[sj,fj)不相交,則稱活動i與活動j是相容的。也就是說,當si>=fj或者sj>=fi時,活動i與活動j相容。活動安排問題要求在所給的活動集合中選出最大的相容活動子集。

    其中合理的貪心策略為:最早結束時間,這樣可以使下一個活動盡早開始。

    將所有活動按照最早結束時間排序,從頭開始選擇不相交的活動,便是最終結果。

    麻煩的點在于如何證明該貪心策略能夠計算出正確結果:

    • 整體最優解從貪心選擇開始:設E={1,2……,n}為n個活動的集合,且E中的活動按結束時間非減序排列,所以,活動1具有最早的結束時間。首先證明活動安排問題有一個最優解以貪心選擇開始,即該最優解中包含活動1。設A是E的子集且是活動安排問題的一個最優解,且A中的活動也按結束時間非減序排列,A中的第一個活動是活動k。若k=1,則A就是以貪心選擇開始的最優解;若k>1,則設B=A-{k}+1,即在最優解A中用活動1取代活動k。由于f1<=fk,所以B中的活動也是相容的,且B中活動個數與A中活動個數相同,故B也是最優解。由此可見,總存在以貪心選擇開始的最優活動安排方案。
    • 作出貪心選擇后,原問題簡化為規模較小的類似子問題:選擇活動1后,原問題簡化為對E中所有與活動1相容的活動安排子問題。也就是說,若A是原問題的最優解,則A’是活動安排子問題E’={si>=f1,si屬于E}的最優解。如果不然,假設B’是E’的最優解,則B‘比A’包含更多的活動,將活動1加入B‘中將產生E的一個解B,且B比A包含更多的活動,這與A是原問題的最優解相矛盾。因此每一步貪心選擇陡降問題簡化為一個規模較小的與原問題具有相同形式的子問題。
    • 對貪心選擇次數應用數學歸納法可證,貪心法求解活動安排問題最終產生原問題的最優解。
  • 1386. 安排電影院座位 - 中等 代碼
  • 多機調度問題

    設有n個獨立的作業{1,2,……,n},由m臺相同的機器{M1,M2,……,Mm}進行加工處理,作業i鎖需的處理時間為ti(1<=i<=n),每個作業均可在任何一臺機器上加工處理,但不可間斷、拆分。多機調度問題要求給出一種作業調度方案,使所給的n個作業在盡可能短的時間內由m臺機器加工處理完成。

    多機調度問題問題是NP難問題,到目前為止還沒有有效的解法。對于這類問題,用貪心法求解有時可以得到較好的近似解。貪心法求解多機調度問題的貪心策略是最長處理時間作業優先,即把處理時間最長的作業分配給最先空閑的機器,這樣可以保證處理時間長的作業優先處理,從而在整體上獲得盡可能短的處理時間。

    其實看貪心法這一章的時候,一直沒明白為什么老師在這章里的很多題目,使用貪心法是無法計算出正確結果的。現在我多少有點明白了,因為本書的關鍵并不是在于計算出正確結果,而是讓我們理解貪心法能做什么、不能做什么、能做到什么程度。真實社會中,可能也不需要最準確的結果,因為一些其他因素可能比結果是否最準確影響更大。

  • 621. 任務調度器 - 中等 代碼
  • 總結

    本來以為DP的題麻煩,后來發現貪心法其實更麻煩。主要在于使用貪心法需要證明能夠取得最優解

  • 從貪心選擇開始
  • 簡化為規模較小類似子問題
  • 使用歸納法證明能產生最優解
  • 貪心法的證明比動態規劃證明更加復雜一些,而且本章中做的習題,沒有動態規劃法做的更加順暢。建議大家多多練習一下貪心法。

    最后

    大家如果喜歡我的文章,可以關注我的公眾號(程序員麻辣燙)

    我的個人博客為:https://shidawuhen.github.io/

    往期文章回顧:

    算法

  • 算法學習計劃
  • 蠻力法
  • 分治法
  • 減治法
  • 動態規劃法
  • 貪心法
  • 技術

  • 微服務之服務框架和注冊中心
  • Beego框架使用
  • 淺談微服務
  • TCP性能優化
  • 限流實現1
  • Redis實現分布式鎖
  • Golang源碼BUG追查
  • 事務原子性、一致性、持久性的實現原理
  • CDN請求過程詳解
  • 記博客服務被壓垮的歷程
  • 常用緩存技巧
  • 如何高效對接第三方支付
  • Gin框架簡潔版
  • InnoDB鎖與事務簡析
  • 讀書筆記

  • 敏捷革命
  • 如何鍛煉自己的記憶力
  • 簡單的邏輯學-讀后感
  • 熱風-讀后感
  • 論語-讀后感
  • 思考

  • 對項目管理的一些看法
  • 對產品經理的一些思考
  • 關于程序員職業發展的思考
  • 關于代碼review的思考
  • Markdown編輯器推薦-typora
  • 總結

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

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

    主站蜘蛛池模板: 陪读偷伦初尝小说 | 亚洲av无码精品一区二区 | 国产成人激情 | 强制憋尿play黄文尿奴 | 无码久久精品国产亚洲av影片 | 久久er99热精品一区二区 | 久久久久一区二区三区 | 俄罗斯一级片 | 善良的老师伦理bd中字 | 精品人妻一区二区三区潮喷在线 | 大胸喷奶水www视频妖精网站 | 在线91观看 | 欧美日韩精品亚洲精品 | 亚洲品质自拍视频网站 | 99国产精品白浆在线观看免费 | 欧美操穴视频 | 日本黄频| 精品99久久久 | 日韩三级中文字幕 | 91精品福利视频 | 丁香亚洲 | 婷婷看片 | 国产一区视频在线免费观看 | 性色在线 | 91桃色污 | 美女黄免费 | 四川丰满妇女毛片四川话 | 成片免费观看 | 国产精品第72页 | 日本三级少妇 | 中文一二三区 | 乳女教师の诱惑julia | www.com黄色片| 国产高清视频一区二区 | 九七影院在线观看免费观看电视 | 狠狠操天天射 | 久久丫精品久久丫 | 在线观看亚洲国产 | 日韩大胆视频 | 鲁片一区二区三区 | 医生强烈淫药h调教小说视频 | 天堂а√在线中文在线 | 国产亚洲电影 | 国产一区=区 | 亚洲国产视频网站 | 欧美 日韩 国产 激情 | 高清中文字幕av | av手机在线播放 | 阿拉伯性视频xxxx | 69视频在线看 | 无码人妻精品一区二区三区99不卡 | 古装做爰无遮挡三级 | 亚洲一区二区视频在线 | 人人草人人澡 | 亚洲精品久久久 | 国产无毛片 | 劲爆欧美第一页 | 一区二区三区亚洲 | 性xxxx狂欢老少配o | 九九热只有精品 | 天天爱夜夜爽 | 阿v视频在线免费观看 | 日本精品少妇 | 三级自拍视频 | 日本免费视频 | 99久久精品国产一区二区成人 | 日韩精品一二区 | 美女少妇一区二区 | 日韩精品欧美 | 欧美一级在线免费观看 | 内射合集对白在线 | 成年人国产精品 | 国产精品成人午夜视频 | 亚洲综合欧美综合 | 无套爆插| 亚洲精品高清在线 | 四级黄色片 | 亚洲欧美日本在线观看 | 99视频热| 成人片免费视频 | 精品欧美一区二区精品少妇 | 亚洲国产欧美一区 | 日本天堂网 | 精品国产区| 夜夜爽av| 丰满人妻一区二区三区免费 | 黑丝一区 | 午夜小影院 | 97自拍视频 | 久久久久久久久久久福利 | 中文字幕在线观看线人 | 精品人伦一区二区三区蜜桃免费 | 台湾a级艳片潘金莲 | 欧美天堂在线观看 | 黄色片网站视频 | 中文字幕日本一区二区 | 国产a毛片 | av视觉盛宴| 国产亚洲无 |