日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

求一个任意实数c的算术平方根g的算法设计思想_算法复习第四篇——贪心法

發(fā)布時(shí)間:2025/3/12 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 求一个任意实数c的算术平方根g的算法设计思想_算法复习第四篇——贪心法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

公元2020年5月5日,距離算法考試僅剩4天。

一、知識(shí)歸納

1.設(shè)計(jì)思想

  • 只根據(jù)當(dāng)前已有的信息就做出選擇,而且一旦做出了選擇,將來(lái)無(wú)論如何都不能更改
  • 不從整體最優(yōu)考慮,所做的選擇只是在某種意義上的局部最優(yōu)
  • 這種選擇并不總能獲得整體最優(yōu)解(Optimal Solution),但通常能獲得近似最優(yōu)解(Near-Optimal Solution)
動(dòng)態(tài)規(guī)劃法通常以自底向上的方式求解各個(gè)子問(wèn)題。
貪心法則通常以自頂向下的方式做出一系列的貪心選擇。

2.示例

【找錢問(wèn)題】假設(shè)有面值為5元、2元、1元、5角、2角、1角的貨幣,需要找給顧客4元6角現(xiàn)金,使付出的貨幣的數(shù)量最少。

【思路】

  • 首先選出1張面值不超過(guò)4元6角的最大面值的貨幣,即2元,再選出1張面值不超過(guò)2元6角的最大面值的貨幣,即2元,再選出1張面值不超過(guò)6角的最大面值的貨幣,即5角,再選出1張面值不超過(guò)1角的最大面值的貨幣,即1角,總共付出4張貨幣。
  • 在付款問(wèn)題每一步的貪心選擇中,在不超過(guò)應(yīng)付款金額的條件下,只選擇面值最大的貨幣,而不去考慮在后面看來(lái)這種選擇是否合理,而且它還不會(huì)改變決定:一旦選出了一張貨幣,就永遠(yuǎn)選定。
  • 貪心選擇策略是盡可能使付出的貨幣最快地滿足支付要求,其目的是使付出的貨幣張數(shù)最慢地增加

3.基本要素

(1) 最優(yōu)量度標(biāo)準(zhǔn)(正確的貪心策略,貪心選擇性質(zhì))

  • 貪心法求解問(wèn)題的核心問(wèn)題
  • 根據(jù)該量度標(biāo)準(zhǔn),實(shí)行多步?jīng)Q策進(jìn)行求解
  • 在該量度意義下,每步的貪心選擇是局部最優(yōu)的
  • 得到全局最優(yōu)解

(2) 求解的問(wèn)題有最優(yōu)子結(jié)構(gòu)性質(zhì)(最優(yōu)性原理)

  • 一個(gè)問(wèn)題的最優(yōu)解包含其子問(wèn)題的最優(yōu)解
注:貪心算法的基本要素是貪心選擇性質(zhì)和最優(yōu)子結(jié)構(gòu)性質(zhì)。

4.求解過(guò)程

(1) 分解

  • 將原問(wèn)題分解為若干相互獨(dú)立的階段;

(2) 求解

  • 對(duì)于每個(gè)階段求局部最優(yōu)解,即根據(jù)貪心策略進(jìn)行貪心選擇;
  • 在每個(gè)階段,選擇一旦做出就不可更改。

(3) 合并

  • 將各個(gè)階段的解合并為原問(wèn)題的一個(gè)可行解。

5.相關(guān)概念

(1) 候選解集合C

  • 問(wèn)題的可能解
  • 問(wèn)題的最終解均取自于該候選集合

(2) 解集合S

  • 隨著貪心選擇的進(jìn)行不斷擴(kuò)展,直到構(gòu)成一個(gè)滿足問(wèn)題的完整解

(3) 解判定函數(shù)solution

  • 檢查解集合S是否構(gòu)成問(wèn)題的完整解

(4) 選擇函數(shù)select

  • 貪心策略,這是貪心法的關(guān)鍵
  • 指出哪個(gè)候選對(duì)象最有希望構(gòu)成問(wèn)題的解
  • 通常和目標(biāo)函數(shù)有關(guān)

(5) 可行解判定函數(shù)feasible

  • 檢查解集合中加入一個(gè)候選對(duì)象是否可行,即解集合擴(kuò)展后是否滿足約束條件

6.貪心法的一般過(guò)程

Greedy

二、組合問(wèn)題中的貪心法

  • 背包問(wèn)題(物品可切割)
  • 多機(jī)調(diào)度問(wèn)題
  • 活動(dòng)安排問(wèn)題

1.背包問(wèn)題

【問(wèn)題表述】給定n種物品和一個(gè)容量為C的背包,物品i的重量是wi,其價(jià)值為vi,設(shè)xi表示物品i裝入背包的情況,背包問(wèn)題是如何選擇裝入背包的物品,使得裝入背包中物品的總價(jià)值最大?

【建立模型】

【貪心策略】

貪心策略一:價(jià)值最大優(yōu)先
因?yàn)檫@可以盡可能快地增加背包的總價(jià)值。但是,雖然每一步選擇獲得了背包價(jià)值的極大增長(zhǎng),但背包容量卻可能消耗得太快,使得裝入背包的物品個(gè)數(shù)減少,從而不能保證目標(biāo)函數(shù)達(dá)到最大。貪心策略二:重量最輕優(yōu)先
因?yàn)檫@可以裝入盡可能多的物品,從而增加背包的總價(jià)值。但是,雖然每一步選擇使背包的容量消耗的慢了,但背包的價(jià)值卻沒(méi)能保證迅速增長(zhǎng),從而不能保證目標(biāo)函數(shù)達(dá)到最大。貪心策略三:單位重量?jī)r(jià)值最大優(yōu)先
在背包價(jià)值增長(zhǎng)和背包容量消耗兩者之間尋找平衡。

例如,有3個(gè)物品,其重量分別是{20, 30, 10},價(jià)值分別為{60, 120, 50},背包的容量為50,應(yīng)用三種貪心策略裝入背包的物品和獲得的價(jià)值如圖所示。

應(yīng)用第三種貪心策略,每次從物品集合中選擇單位重量?jī)r(jià)值最大的物品,如果其重量小于背包容量,就可以把它裝入,并將背包容量減去該物品的重量,然后我們就面臨了一個(gè)最優(yōu)子問(wèn)題——它同樣是背包問(wèn)題,只不過(guò)背包容量減少了,物品集合減少了。因此背包問(wèn)題具有最優(yōu)子結(jié)構(gòu)性質(zhì)。

【算法描述】

設(shè)背包容量為C,共有n個(gè)物品,物品重量存放在數(shù)組w[n]中,價(jià)值存放在數(shù)組v[n]中,問(wèn)題的解存放在數(shù)組x[n]中。

1.改變數(shù)組w和v的排列順序,使其按單位重量?jī)r(jià)值v[i]/w[i]降序排列; 2.將數(shù)組x[1:n]初始化為0; //初始化解向量 3.i=1; 4.循環(huán)直到(w[i]>C)4.1 x[i]=1; //將第i個(gè)物品放入背包4.2 C=C-w[i];4.3 i++; 5. x[i]=C/w[i]; void Knapsack(int n,float M,float v[],float w[],float x[]) {Sort(n,v,w);int i;for (i=1;i<=n;i++) x[i]=0;float c=M;for (i=1;i<=n;i++) {if (w[i]>c) break;x[i]=1;c - =w[i];}if (i<=n) x[i]=c/w[i]; }

【算法時(shí)間復(fù)雜度分析】

該算法的時(shí)間主要消耗在將各種物品依其單位重量的價(jià)值從大到小排序。因此,其時(shí)間復(fù)雜性為O(nlog2n)。

注:貪心算法不能解決0/1背包問(wèn)題,可通過(guò)動(dòng)態(tài)規(guī)劃法解決。

三、圖問(wèn)題中的貪心法

  • 單源最短路徑問(wèn)題 - Dijkstra算法
  • TSP問(wèn)題
  • 最小生成樹問(wèn)題 - Prim算法 - Kruskal算法
  • 圖著色問(wèn)題

1.最小代價(jià)生成樹問(wèn)題

【問(wèn)題表述】設(shè)G=(V,E)是一個(gè)無(wú)向連通圖,生成樹上各邊的權(quán)值之和稱為該生成樹的代價(jià),在G的所有生成樹中,代價(jià)最小的生成樹稱為最小生成樹(Minimal Spanning Trees)。

【貪心策略】

①最近頂點(diǎn)策略任選一個(gè)頂點(diǎn),并以此建立起生成樹,每一步的貪心選擇是簡(jiǎn)單地把不在生成樹中的最近頂點(diǎn)添加到生成樹中。②最短邊策略設(shè)G = (V,E)是一個(gè)無(wú)向連通網(wǎng),令T= (V,TE)是G的最小生成樹。從TE={}開始,每一次貪心選擇都是在邊集E中選取最短邊(u,v),如果邊(u, v)加入集合TE中不產(chǎn)生回路,則將邊(u,v)加入邊集TE中,并將它在集合E中刪去。

最近頂點(diǎn)策略—Prim算法

  • 使生成樹以一種自然的方式生長(zhǎng)
  • 從任意頂點(diǎn)開始,每一步為這棵樹添加一個(gè)分枝,直到生成樹中包含全部頂點(diǎn)

【算法描述】

設(shè)圖G中頂點(diǎn)的編號(hào)為0~n-1

Prim算法1. 初始化兩個(gè)輔助數(shù)組lowcost和adjvex;2. U={u0}; 輸出頂點(diǎn)u0; //將頂點(diǎn)u0加入生成樹中3. 重復(fù)執(zhí)行下列操作n-1次3.1 在lowcost中選取最短邊,取adjvex中對(duì)應(yīng)的頂點(diǎn)序號(hào)k;3.2 輸出頂點(diǎn)k和對(duì)應(yīng)的權(quán)值;3.3 U=U+{k};3.4 調(diào)整數(shù)組lowcost和adjvex;

【算法時(shí)間復(fù)雜度分析】

設(shè)連通網(wǎng)中有n個(gè)頂點(diǎn),則

  • 第一個(gè)進(jìn)行初始化的循環(huán)語(yǔ)句需要執(zhí)行n一1次
  • 第二個(gè)循環(huán)共執(zhí)行n - 1次,內(nèi)嵌兩個(gè)循環(huán):
  • 其一是在長(zhǎng)度為n的數(shù)組中求最小值,需要執(zhí)行n- 1次;
  • 其二是調(diào)整輔助數(shù)組,需要執(zhí)行n- 1次。

所以,Prim算法的時(shí)間復(fù)雜度為


四、考點(diǎn)總結(jié)

1.滿足最優(yōu)子結(jié)構(gòu)性質(zhì)一定滿足貪心性質(zhì)嗎?

滿足貪心選擇性質(zhì)一定滿足最優(yōu)子結(jié)構(gòu)性質(zhì),而滿足最優(yōu)子結(jié)構(gòu)性質(zhì)不一定滿足貪心選擇性質(zhì),比如背包問(wèn)題可以用貪心算法解決,而0-1背包問(wèn)題只能用動(dòng)態(tài)規(guī)劃。

2.活動(dòng)選擇問(wèn)題中:

?最優(yōu)的貪心策略是“最早結(jié)束活動(dòng)優(yōu)先”

?怎么衡量?jī)蓚€(gè)活動(dòng)A和B是相容的?

3.背包問(wèn)題的貪心算法所需的計(jì)算時(shí)間為 nlogn

4.貪心算法與動(dòng)態(tài)規(guī)劃算法的主要區(qū)別是 貪心選擇性質(zhì)

動(dòng)態(tài)規(guī)劃法通常以自底向上的方式求解各個(gè)子問(wèn)題。
貪心法則通常以自頂向下的方式做出一系列的貪心選擇。

5.最大效益優(yōu)先是( 貪心法 )的搜索方式

6.貪心算法的基本要素是 貪心選擇 性質(zhì)和 最優(yōu)子結(jié)構(gòu) 性質(zhì) 。

最優(yōu)子結(jié)構(gòu)性質(zhì)是貪心算法與動(dòng)態(tài)規(guī)劃算法的共同點(diǎn)。貪心選擇性質(zhì) 是貪心算法可行的第一個(gè)基本要素,也是貪心算法與動(dòng)態(tài)規(guī)劃算法的主要區(qū)別。

總結(jié)

以上是生活随笔為你收集整理的求一个任意实数c的算术平方根g的算法设计思想_算法复习第四篇——贪心法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。