貪心演算法講解例題:活動選擇問題問題描述
有乙個需要使用每個資源的n個活動組成的集合s= ,資源每次只能由乙個活動使用。每個活動a都有乙個開始時間和結束時間,且 0<= s < f < 。一旦被選擇後,活動a就佔據半開時間區間[s,f]。如果[s,f]和[s,f]互不重疊,則稱兩個活動是相容的。該問題就是要找出乙個由互相相容的活動組成的最大子集。
11個活動按結束時間排序好,之後為:
s=; //開始時間
f=; //結束時間(遞增)
動態規劃求解:o(n3)
#include"stdio.h"
int c[13][13];//活動的個數 用來表示 從 i 到 j 符合規則的有幾個活動
int partition[13][13];//partition[i][j] 表示 使用哪個k 使得s[i][j]到最大相容集合
void dynamic_activity_select(int s,int f,int n)
for(i=1;i<=n;i++)
; //這個地方容易出錯
int f=;
dynamic_activity_select(s,f,11);
int m=11;
int n=11;
for(int i=1;i
由於動態規劃時間複雜度高,用來求解這類問題,大材小用。所以提供以下貪心演算法
#include"stdio.h"
void recursive_activity_select(int s,int f,int i,int n)//遞迴的貪心演算法
else
return ;
}/*這個方法思想:尋找最早結束且與前乙個 相容的 活動加入集合 i 在前 m 在後*/
void greedy_activity_select(int s,int f,int n)//迭代方法 }
} int main()
; //這個地方容易出錯
int f=;
printf("要選擇的活動為:");
// recursive_activity_select(s,f,0,11);//之所以注釋掉 是因為跟下面的方法重複 一次只能除錯乙個
greedy_activity_select(s,f,11);
} **至微博
**至微博
貪心演算法,動態規劃 原始碼解析
貪心演算法講解例題 活動選擇問題問題描述 有乙個需要使用每個資源的n個活動組成的集合s 資源每次只能由乙個活動使用。每個活動a都有乙個開始時間和結束時間,且 0 s f 一旦被選擇後,活動a就佔據半開時間區間 s,f 如果 s,f 和 s,f 互不重疊,則稱兩個活動是相容的。該問題就是要找出乙個由互...
貪心演算法 and 動態規劃
動態規劃dynamic programming 貪心演算法,又名貪婪法,是尋找最優解問題的常用方法 步驟1 從某個初始解出發 步驟2 採用迭代的過程,當可以向目標前進一步時,就根據區域性最優策略,得到一部分解,縮小問題規模 步驟3 將所有解綜合起來。假設你開了間小店,不能電子支付,錢櫃裡的貨幣只有 ...
動態規劃與貪心演算法
1.動態規劃演算法 在解決最優解時我們用到的兩個演算法,貪心與動態規劃演算法,接下來我根據自己的理解解釋兩者的差異之處。貪心會怎樣做,動態規劃又會怎樣做?我的了解,貪心演算法是自頂向下,及每一步向下都取最大值,但得到的是最優解嗎?如圖顯然不是。接下來我會逐一跟大家演示。動態規劃解法,從小規模來看是否...