貪心演算法之活動選擇問題

2021-10-09 23:47:15 字數 3571 閱讀 6541

因為有的問題,用動態規劃解決起來,比較耗費效能,而用貪心演算法,雖然不能得到最優解,但也能得到次優解,與動態規劃比起來更加簡單節約效能。

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace 貪心演算法

;int

f =

; list<

int>[,

] result =

newlist

<

int>[13

,13];

for(

int i=

0;i<

13;i++)}

for(

int j=

0;jif(sij.count>0)

} result[i, j]

= templist;}}

}foreach

(int temp in result[0,

12]) console.

readkey()

;}}}

通常最早結束的活動a1它一定在最優解中,根據這一點來實現貪心演算法。

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace 貪心演算法_遞迴**實現

console.

readkey()

; list<

int> result2 =

methord2(0

,11,0

,0);

foreach

(int item in result2)

console.

readkey()

;}static

int[

] s =

;static

int[

] f =

;// static listresult = new list();

///

///

///

/// 開始活動的編號 0

/// 結束活動的編號 n

/// 開始活動的時間 上乙個活動 0

/// 結束活動的時間 總活動時間

///

static list<

int>

methord

(int startactivenum,

int endactivenum,

int starttime,

int endtime)

int temp =0;

//從下乙個活動開始

for(

int number = startactivenum;number<=endactivenum;number++)}

list<

int> list =

methord

(temp+

1, endactivenum, f[temp]

,endtime)

; list.

add(temp)

;return list;

}///

///

///

/// 上乙個活動那個的開始時間

/// 最後乙個活動的編號通常是乙個定值

/// 上乙個活動的開始時間

/// 上乙個活動的結束時間

///

static list<

int>

methord2

(int startactivenum,

int endactivenum,

int starttime,

int endtime)

int temp =0;

//從下乙個活動開始

for(

int number = startactivenum; number <= endactivenum; number++)}

list<

int> list =

methord2

(temp +

1, endactivenum, s[temp]

, f[temp]);

list.

add(temp)

;return list;}}

}

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace 貪心演算法_活動選擇_迭代**

;int

f =

;int starttime =0;

int endtime =24;

list<

int> list =

newlist

<

int>()

;for

(int number = starttime;number<

12;number++)}

foreach

(int item in list)

console.

readkey()

;}}}

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace 貪心演算法_錢幣找零問題

;int

count =

;int

result =

methord

(150

,value

, count)

;foreach

(int item in result)

console.

readkey()

;}static

int[

]methord

(int k,

int[

]value

,int

count)

if(k>count[index]

*value

[index]

)else

index--;}

result[count.length]

= k;

return result;}}

}

貪心演算法 活動選擇問題

活動選擇問題 就是給定一組活動的開始時間和結束時間,然後他們都需要使用到乙個資源,這個資源每次只有乙個活動可以用,要求求出乙個最大的相互相容的活動子集。首先定義了乙個集合sij 其中s就是所有活動的集合,fi是活動ai的完成時間si是活動ai的開始時間。這道題如果是用dp來解的話,就需要找到最優解的...

貪心演算法 活動選擇問題

前言 貪心演算法也是用來解決最優化問題,將乙個問題分成子問題,在現在子問題最優解的時,選擇當前看起來是最優的解,期望通過所做的區域性最優選擇來產生乙個全域性最優解。書中先從活動選擇問題來引入貪心演算法,分別採用動態規劃方法和貪心演算法進行分析。本篇筆記給出活動選擇問題的詳細分析過程,並給出詳細的實現...

貪心演算法 活動選擇問題

需要閱讀這篇 的同學應該都知道貪心演算法的定義吧,所以這裡就不贅述什麼叫貪心演算法了。如果確實不知道什麼是貪心演算法,可以去看一下 演算法導論 問度娘也是挺好的。下面簡述一下活動選擇問題 你是乙個場地管理員,你收到的很多的活動申請,每個活動的開始時間和結束時間會有交錯,也就是說有些活動不能同時舉辦,...