因為有的問題,用動態規劃解決起來,比較耗費效能,而用貪心演算法,雖然不能得到最優解,但也能得到次優解,與動態規劃比起來更加簡單節約效能。
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來解的話,就需要找到最優解的...
貪心演算法 活動選擇問題
前言 貪心演算法也是用來解決最優化問題,將乙個問題分成子問題,在現在子問題最優解的時,選擇當前看起來是最優的解,期望通過所做的區域性最優選擇來產生乙個全域性最優解。書中先從活動選擇問題來引入貪心演算法,分別採用動態規劃方法和貪心演算法進行分析。本篇筆記給出活動選擇問題的詳細分析過程,並給出詳細的實現...
貪心演算法 活動選擇問題
需要閱讀這篇 的同學應該都知道貪心演算法的定義吧,所以這裡就不贅述什麼叫貪心演算法了。如果確實不知道什麼是貪心演算法,可以去看一下 演算法導論 問度娘也是挺好的。下面簡述一下活動選擇問題 你是乙個場地管理員,你收到的很多的活動申請,每個活動的開始時間和結束時間會有交錯,也就是說有些活動不能同時舉辦,...