貪心演算法,動態規劃 原始碼解析

2021-08-26 11:29:00 字數 1320 閱讀 7954

貪心演算法講解例題:活動選擇問題問題描述

有乙個需要使用每個資源的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.動態規劃演算法 在解決最優解時我們用到的兩個演算法,貪心與動態規劃演算法,接下來我根據自己的理解解釋兩者的差異之處。貪心會怎樣做,動態規劃又會怎樣做?我的了解,貪心演算法是自頂向下,及每一步向下都取最大值,但得到的是最優解嗎?如圖顯然不是。接下來我會逐一跟大家演示。動態規劃解法,從小規模來看是否...