汽車加油問題之貪心算法_第1頁
汽車加油問題之貪心算法_第2頁
汽車加油問題之貪心算法_第3頁
汽車加油問題之貪心算法_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、汽車加油問題之貪心算法(一)問題描述一輛汽車加滿油后可以行駛 N千米。旅途中有若干個(gè)加油站。指出若要使沿途的加油次 數(shù)最少,設(shè)計(jì)一個(gè)有效的算法,指出應(yīng)在那些加油站??考佑?。給出N,并以數(shù)組的形式給出加油站的個(gè)數(shù)及相鄰距離,指出若要使沿途的加油次數(shù)最 少,設(shè)計(jì)一個(gè)有效的算法, 指出應(yīng)在那些加油站??考佑汀R螅核惴▓?zhí)行的速度越快越好。(二)問題分析(前提行駛前車?yán)锛訚M油)k,每個(gè)加油站間距離為ai ; i=0,1,對于這個(gè)問題我們有以下幾種情況:設(shè)加油次數(shù)為2, 3n1.始點(diǎn)到終點(diǎn)的距離小于N,則加油次數(shù)k=0 ;2.始點(diǎn)到終點(diǎn)的距離大于 N,加油站間的距離相等,即ai=aj=L=N,則加油次數(shù)

2、最少 k=n ;加油站間的距離相等,即ai=aj=L>N,則不可能到達(dá)終點(diǎn);加油站間的距離相等,即aCk=n/N+1(n%N ! =0);i=aj=L<N,則加油次數(shù) k= n/N(n%N=O)或D力啪站間的距離不相等,即ai ! =aj,則加油次數(shù)k通過以下算法求解。(三)算法描述貪心算法的基本思想該題目求加油最少次數(shù),即求最優(yōu)解的問題,可分成幾個(gè)步驟,一般來說,每個(gè)步驟的 最優(yōu)解不一定是整個(gè)問題的最優(yōu)解,然而對于有些問題,局部貪心可以得到全局的最優(yōu)解。 貪心算法將問題的求解過程看作是一系列選擇,從問題的某一個(gè)初始解出發(fā),向給定目標(biāo)推進(jìn)。推進(jìn)的每一階段不是依據(jù)某一個(gè)固定的遞推式,

3、而是在每一個(gè)階段都看上去是一個(gè)最優(yōu)的決策(在一定的標(biāo)準(zhǔn)下)。不斷地將問題實(shí)例歸納為更小的相似的子問題,并期望做出的 局部最優(yōu)的選擇產(chǎn)生一個(gè)全局得最優(yōu)解。貪心算法的適用的問題貪心算法適用的問題必須滿足兩個(gè)屬性:(1)貪心性質(zhì):整體的最優(yōu)解可通過一系列局部最優(yōu)解達(dá)到,并且每次的選擇可以依賴以前做出的選擇,但不能依賴于以后的選擇。(2) 最優(yōu)子結(jié)構(gòu):問題的整體最優(yōu)解包含著它的子問題的最優(yōu)解。貪心算法的基本步驟分解:將原問題分解為若干相互獨(dú)立的階段。對于每一個(gè)階段求局部的最優(yōu)解。3) 合并:將各個(gè)階段的解合并為原問題的解。問題分析我們可以假設(shè)不到萬不 我們才加一次油。在局 用相同的遞歸方法進(jìn)行由于汽車

4、是由始向終點(diǎn)方向開的,我們最大的麻煩就是不知道在哪個(gè)加油站加油可以使我 們既可以到達(dá)終點(diǎn)又可以使我們加油次數(shù)最少。提出問題是解決的開始.為了著手解決遇到的困難,取得最優(yōu)方案。 得已我們不加油,即除非我們油箱里的油不足以開到下一個(gè)加油站, 部找到一個(gè)最優(yōu)的解。卻每加一次油我們可以看作是一個(gè)新的起點(diǎn), 下去。最終將各個(gè)階段的最優(yōu)解合并為原問題的解得到我們原問題的求解。加油站貪心算法設(shè)計(jì)(C):in clude<math.h>in clude<studio.h>int add(i nt b ,i nt m,i nt n) 求一個(gè)從 m到n的數(shù)列的和int sb;for(i n

5、t i=m;i <n ;i+) sb+=bi;return sb;int Tanxin(int an, int N)/an表示加油站的個(gè)數(shù),N為加滿油能行駛的最遠(yuǎn)距離int bn; /若在ai加油站加油,則bi為1,否則為0int m=0;if(ai>N) return ERROR;/如果某相鄰的兩個(gè)加油站間的距離大于N,則不能到達(dá)終點(diǎn)if(add(ai, 0, n )<N) /如果這段距離小于 N,則不需要加油bi=0;return add(bi,0, n);if(ai=aj&&ai=N) /如果每相鄰的兩個(gè)加油站間的距離都是N,則每個(gè)加油站都需要加油bi=

6、1;return add(bi,O, n);if(ai=aj&&ai<N) /如果每相鄰的兩個(gè)加油站間的距離相等且都小于if( add(ai,m,k) < N && add(ai,m,k+1) > N )bk=1;m+=k;return add(bi,0, n);if(ai!=aj) /如果每相鄰的兩個(gè)加油站間的距離不相等且都小于if( add(ai,m,k) < N && add(ai,m,k+1) > N )bk=1;m+=k;return add(bi,0, n);viod mai n()int a;scan

7、f("%d",a);scan f("/n");scan f("/d",&N);Ta nxin( a ,0, n);貪心算法正確性證明:貪心選擇性質(zhì)所謂貪心選擇性質(zhì)是指所求問題的整體最優(yōu)解可以通過一系列局部最優(yōu)的選擇,即貪心 選擇來達(dá)到。對于一個(gè)具體的問題, 要確定它是否具有貪心性質(zhì),我們必須證明每一步所作的貪心選擇最終導(dǎo)致問題的一個(gè)整體最優(yōu)解。該題設(shè)在加滿油后可行駛的N千米這段路程上任取兩個(gè)加油站A、B,且A距離始點(diǎn)比B距離始點(diǎn)近,則若在B加油不能到達(dá)終點(diǎn)那么在A加油一定不能到達(dá)終點(diǎn),因?yàn)閙+N<n+N,即在B點(diǎn)加油可行

8、駛的路程比在 A點(diǎn)加油可行駛的路程要長 n-m千米,所以只要終點(diǎn)不在 B、C之間且在C的右邊的話,根據(jù)貪心 選擇,為使加油次數(shù)最少就會(huì)選擇距離加滿油得點(diǎn)遠(yuǎn)一些的加油站去加油,因此,加油次數(shù)最少滿足貪心選擇性質(zhì)。最優(yōu)子結(jié)構(gòu)性質(zhì):bn是從a2到an這段路程上 an的最優(yōu)解,即每次汽車中剩 每個(gè)過程從加油開始行 每個(gè)過程都是相同且當(dāng)一個(gè)問題大的最優(yōu)解包含著它的子問題的最優(yōu)解時(shí),稱該問題具有最優(yōu)子結(jié)構(gòu)性質(zhì)。 由于(b1,b2,bn是這段路程加油次數(shù)最少的一個(gè)滿足貪心選擇性質(zhì)的最優(yōu)解,則易知若在第一個(gè)加油站加油時(shí),b1=1,則(b2,b3,加油次數(shù)最少且這段路程上的加油站個(gè)數(shù)為(a2,a3,下的油不能在行駛到下一個(gè)加油站時(shí)我們才在這個(gè)加油站

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論