演算法第四章作業

2022-07-11 22:30:15 字數 1065 閱讀 1906

1. 對貪心演算法的理解:貪心演算法總是做出在當前看來是最好的選擇,並不從整體最優上加以考慮,而是區域性最優選擇。可用貪心演算法求解的問題一般具有兩個性質:貪心選擇性質和最優子結構性質。

貪心選擇性質是指所求問題的整體最優解可以通過一系列區域性最優解的選擇。通過自頂向下迭代的方式,每次選擇將所求問題簡化為規模更小的子問題。當乙個問題的最優解包含其子問題的最優解時,稱此問題具有最優最優子結構性質。

2. 汽車加油問題

題目:一輛汽車加滿油後可行駛 n公里。旅途中有若干個加油站。設計乙個有效演算法,指出應 在哪些加油站停靠加油,使沿途加油次數最少。

輸入格式:第一行有 2 個正整數n和 k(k<=1000 ),表示汽車加滿油後可行駛n公里,且旅途中有 k個加油站。 第二行有 k+1 個整數,表示第 k 個加油站與第k-1 個加油站之間的距離。 第 0 個加油站表示出發地,汽車已加滿油。 第 k+1 個加油站表示目的地。

輸出格式:輸出最少加油次數。如果無法到達目的地,則輸出「no solution!」。

對於這個問題:設加油次數為k,每個加油站間距離為a[i];i=0,1,2,3……n

若存在某一段路程所需油量大於汽車最大油量,則汽車無法到達終點,輸出"no solution!」

其他使用貪心演算法解決問題,從a[0]開始遍歷,檢查每一小段路程是否超過汽車滿油量時的最大支撐路程。如果可以則在當前油量減去該路程所耗油量得到所剩油量,繼續跟下一段路程進行比較;如果有超過的,那麼汽車不可能走完這段路, 則充滿油後繼續向前遍歷,加油次數加一。**如下:

#include

using namespace std;

int main()

int flag=1;//標記是否可以到達 flag=1 代表可達

int min = 0; // 最少加油次數

int rest = n; //目前可用油量

for(int i=0;i<=k;i++)else

}cout<3. 本章學習過程中遇到的問題及結對程式設計的情況:

本週貪心演算法的學習,總體上基本理解,掌握,但是有一些題目的細節問題沒有考慮周全,而得出錯誤的貪心策略。

結伴程式設計情況同前幾周一樣,沒有出現其他問題。

演算法第四章作業

1.我對貪心演算法的理解 貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響以後的狀態...

演算法第四章作業

一 對貪心演算法的理解 貪心演算法的基本要素是 貪心選擇性質和最優子結構性質 貪心選擇每次選取當前最優解,可以依賴以往的選擇,但絕不依賴於將來所做的選擇,也不依賴於子問題的解。貪心演算法通常以自頂向下的方式進行。二 汽車加油問題的貪心選擇性質 汽車應選擇在能到達的前提下離自己最遠的加油站進行加油 i...

演算法第四章作業

我的理解 主要是在貪心二字上面,但是重要的是在哪些方面上貪心,是解決題目的最重要的思路。因此要考慮貪心選擇性質和子結構性質 貪心選擇性質 從區域性的最優解擴充套件到整體的最優解 最優子結構性質 整體的最優解包含子問題的最優解 由於要計算汽車從起點到終點的最少加油次數 故,每次可以盡可能多的在滿油量內...